diff options
| author | Yuri Roubinsky <chaosus89@gmail.com> | 2021-05-19 21:50:11 +0300 |
|---|---|---|
| committer | Yuri Roubinsky <chaosus89@gmail.com> | 2021-05-19 21:50:11 +0300 |
| commit | 61357447864fdb9603ac5d4ba4294ae3e0b3ad6b (patch) | |
| tree | ca55eb5e86ddec8e3725db8ba1a720f8d7508cf9 /servers/rendering/shader_language.cpp | |
| parent | f1f5b92b8e84541759e7dc38aa85da036027ba06 (diff) | |
| download | redot-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.cpp | 11 |
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) { |
