diff options
author | Rémi Verschelde <remi@verschelde.fr> | 2021-03-29 16:47:38 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-29 16:47:38 +0200 |
commit | aba03110ba73fc1dc1dd0e00b85dbd605154fcb5 (patch) | |
tree | 30834318bd85ce89a4a83c77afe7e8abee55a83c /modules/gdscript/gdscript_parser.cpp | |
parent | 58d302dd5fc2bd5307ca06a6a0f5b2be43403243 (diff) | |
parent | 85e316a5d58a1866ff4c8738f1703b01629abc32 (diff) | |
download | redot-engine-aba03110ba73fc1dc1dd0e00b85dbd605154fcb5.tar.gz |
Merge pull request #46830 from vnen/gdscript-typed-arrays
GDScript typed arrays
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r-- | modules/gdscript/gdscript_parser.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp index 7f3dd6b2e5..2a7fc85a69 100644 --- a/modules/gdscript/gdscript_parser.cpp +++ b/modules/gdscript/gdscript_parser.cpp @@ -2674,6 +2674,19 @@ GDScriptParser::TypeNode *GDScriptParser::parse_type(bool p_allow_void) { type->type_chain.push_back(type_element); + if (match(GDScriptTokenizer::Token::BRACKET_OPEN)) { + // Typed collection (like Array[int]). + type->container_type = parse_type(false); // Don't allow void for array element type. + if (type->container_type == nullptr) { + push_error(R"(Expected type for collection after "[".)"); + type = nullptr; + } else if (type->container_type->container_type != nullptr) { + push_error("Nested typed collections are not supported."); + } + consume(GDScriptTokenizer::Token::BRACKET_CLOSE, R"(Expected closing "]" after collection type.)"); + return type; + } + int chain_index = 1; while (match(GDScriptTokenizer::Token::PERIOD)) { make_completion_context(COMPLETION_TYPE_ATTRIBUTE, type, chain_index++); @@ -3278,6 +3291,9 @@ String GDScriptParser::DataType::to_string() const { if (builtin_type == Variant::NIL) { return "null"; } + if (builtin_type == Variant::ARRAY && has_container_element_type()) { + return vformat("Array[%s]", container_element_type->to_string()); + } return Variant::get_type_name(builtin_type); case NATIVE: if (is_meta_type) { |