summaryrefslogtreecommitdiffstats
path: root/servers/rendering/shader_language.cpp
diff options
context:
space:
mode:
authorYuri Roubinsky <chaosus89@gmail.com>2021-05-19 21:50:11 +0300
committerYuri Roubinsky <chaosus89@gmail.com>2021-05-19 21:50:11 +0300
commit61357447864fdb9603ac5d4ba4294ae3e0b3ad6b (patch)
treeca55eb5e86ddec8e3725db8ba1a720f8d7508cf9 /servers/rendering/shader_language.cpp
parentf1f5b92b8e84541759e7dc38aa85da036027ba06 (diff)
downloadredot-engine-61357447864fdb9603ac5d4ba4294ae3e0b3ad6b.tar.gz
Implements length() shader function for arrays in structs
Diffstat (limited to 'servers/rendering/shader_language.cpp')
-rw-r--r--servers/rendering/shader_language.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/servers/rendering/shader_language.cpp b/servers/rendering/shader_language.cpp
index 43eaf213d7..e92940b31a 100644
--- a/servers/rendering/shader_language.cpp
+++ b/servers/rendering/shader_language.cpp
@@ -4301,8 +4301,15 @@ ShaderLanguage::Node *ShaderLanguage::_parse_expression(BlockNode *p_block, cons
}
mn->assign_expression = assign_expression;
} else if (tk.type == TK_PERIOD) {
- _set_error("Nested array length() is not yet implemented");
- return nullptr;
+ completion_class = TAG_ARRAY;
+ p_block->block_tag = SubClassTag::TAG_ARRAY;
+ Node *call_expression = _parse_and_reduce_expression(p_block, p_function_info);
+ p_block->block_tag = SubClassTag::TAG_GLOBAL;
+ if (!call_expression) {
+ return nullptr;
+ }
+ mn->datatype = call_expression->get_datatype();
+ mn->call_expression = call_expression;
} else if (tk.type == TK_BRACKET_OPEN) {
Node *index_expression = _parse_and_reduce_expression(p_block, p_function_info);
if (!index_expression) {