diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-21 19:26:32 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-08-21 19:26:32 +0200 |
commit | 7d3bee73e42b00a75bf9fafead8b200db994950c (patch) | |
tree | 48c4715000967030ee2ba31f65536047682ce5a4 /modules/gdscript/gdscript_parser.cpp | |
parent | 38b8751f0ddfdf5184135cf16770feafe09cd844 (diff) | |
parent | 6c59ed9485bbfadee73a08dfc57224e022626e6e (diff) | |
download | redot-engine-7d3bee73e42b00a75bf9fafead8b200db994950c.tar.gz |
Merge pull request #80247 from dalexeev/gds-for-loop-var-static-typing
GDScript: Add static typing for `for` loop variable
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index b76ceea11f..1dde67d2d1 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -1850,7 +1850,18 @@ GDScriptParser::ForNode *GDScriptParser::parse_for() { n_for->variable = parse_identifier(); } - consume(GDScriptTokenizer::Token::IN, R"(Expected "in" after "for" variable name.)"); + if (match(GDScriptTokenizer::Token::COLON)) { + n_for->datatype_specifier = parse_type(); + if (n_for->datatype_specifier == nullptr) { + push_error(R"(Expected type specifier after ":".)"); + } + } + + if (n_for->datatype_specifier == nullptr) { + consume(GDScriptTokenizer::Token::IN, R"(Expected "in" or ":" after "for" variable name.)"); + } else { + consume(GDScriptTokenizer::Token::IN, R"(Expected "in" after "for" variable type specifier.)"); + } n_for->list = parse_expression(false); |