diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2021-05-20 09:04:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-20 09:04:50 +0200 |
commit | 7f6ee00b4e06955457c00359792db1b35b157b46 (patch) | |
tree | 10ed1b8b2439c33d264fefc4e5e9e9c4136cbaac /servers/rendering/shader_language.cpp | |
parent | ba7448f84e5d9b2e7179c6061b58ee0b63297a36 (diff) | |
parent | 61357447864fdb9603ac5d4ba4294ae3e0b3ad6b (diff) | |
download | redot-engine-7f6ee00b4e06955457c00359792db1b35b157b46.tar.gz |
Merge pull request #48855 from Chaosus/shader_array_length_in_structs
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) { |