diff options
author | Maximilian <Shawak@users.noreply.github.com> | 2021-10-28 20:16:22 +0200 |
---|---|---|
committer | Shawak <maxi.nussbaum@googlemail.com> | 2021-11-09 18:46:28 +0100 |
commit | c7a8e047ccc8908f680dc55b9d1e6f2787ac49f6 (patch) | |
tree | 2bbd75297070ca77e6036e51cd85c0c76806e8f9 /modules/gdscript/gdscript_parser.cpp | |
parent | e7e9e663b56d72485040ed627ed76b418f332865 (diff) | |
download | redot-engine-c7a8e047ccc8908f680dc55b9d1e6f2787ac49f6.tar.gz |
Allow using $/root node paths
format
fix shadowing
use match instead of comparison
Update gdscript_parser.cpp
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index b96139ac51..924e7d2df1 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -2774,6 +2774,23 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_get_node(ExpressionNode *p get_node->chain.push_back(identifier); } while (match(GDScriptTokenizer::Token::SLASH)); return get_node; + } else if (match(GDScriptTokenizer::Token::SLASH)) { + GetNodeNode *get_node = alloc_node<GetNodeNode>(); + IdentifierNode *identifier_root = alloc_node<IdentifierNode>(); + get_node->chain.push_back(identifier_root); + int chain_position = 0; + do { + make_completion_context(COMPLETION_GET_NODE, get_node, chain_position++); + if (!current.is_node_name()) { + push_error(R"(Expect node path after "/".)"); + return nullptr; + } + advance(); + IdentifierNode *identifier = alloc_node<IdentifierNode>(); + identifier->name = previous.get_identifier(); + get_node->chain.push_back(identifier); + } while (match(GDScriptTokenizer::Token::SLASH)); + return get_node; } else { push_error(R"(Expect node path as string or identifier after "$".)"); return nullptr; |