diff options
author | Yuri Sizov <11782833+YuriSizov@users.noreply.github.com> | 2023-02-17 16:47:50 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-17 16:47:50 +0300 |
commit | 6e0dd6beca4ac9f62ecf27f33c99d456d5871f7f (patch) | |
tree | 6d2118adcb95def8cb476df633a8d1546a597056 | |
parent | 37cd20b38d2cfcf05467975a4f60c51c1071f76a (diff) | |
parent | cedc5fa823dc64bcf500c87e8fe20a423994796a (diff) |
Merge pull request #72925 from vonagam/fix-enum-typed-array-error
GDScript: Fix error about enum typed arrays
-rw-r--r-- | modules/gdscript/gdscript_analyzer.cpp | 24 | ||||
-rw-r--r-- | modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd | 4 |
2 files changed, 18 insertions, 10 deletions
diff --git a/modules/gdscript/gdscript_analyzer.cpp b/modules/gdscript/gdscript_analyzer.cpp index d0525be853..c8dfdbdd68 100644 --- a/modules/gdscript/gdscript_analyzer.cpp +++ b/modules/gdscript/gdscript_analyzer.cpp @@ -4252,18 +4252,22 @@ Variant GDScriptAnalyzer::make_subscript_reduced_value(GDScriptParser::Subscript Array GDScriptAnalyzer::make_array_from_element_datatype(const GDScriptParser::DataType &p_element_datatype, const GDScriptParser::Node *p_source_node) { Array array; - Ref<Script> script_type = p_element_datatype.script_type; - if (p_element_datatype.kind == GDScriptParser::DataType::CLASS && script_type.is_null()) { - Error err = OK; - Ref<GDScript> scr = GDScriptCache::get_shallow_script(p_element_datatype.script_path, err); - if (err) { - push_error(vformat(R"(Error while getting cache for script "%s".)", p_element_datatype.script_path), p_source_node); - return array; + if (p_element_datatype.builtin_type == Variant::OBJECT) { + Ref<Script> script_type = p_element_datatype.script_type; + if (p_element_datatype.kind == GDScriptParser::DataType::CLASS && script_type.is_null()) { + Error err = OK; + Ref<GDScript> scr = GDScriptCache::get_shallow_script(p_element_datatype.script_path, err); + if (err) { + push_error(vformat(R"(Error while getting cache for script "%s".)", p_element_datatype.script_path), p_source_node); + return array; + } + script_type.reference_ptr(scr->find_class(p_element_datatype.class_type->fqcn)); } - script_type.reference_ptr(scr->find_class(p_element_datatype.class_type->fqcn)); - } - array.set_typed(p_element_datatype.builtin_type, p_element_datatype.native_type, script_type); + array.set_typed(p_element_datatype.builtin_type, p_element_datatype.native_type, script_type); + } else { + array.set_typed(p_element_datatype.builtin_type, StringName(), Variant()); + } return array; } diff --git a/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd b/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd index 7416ecd87a..26542a9e2f 100644 --- a/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd +++ b/modules/gdscript/tests/scripts/analyzer/features/typed_array_usage.gd @@ -201,6 +201,10 @@ func test(): assert(str(typed_enums) == '[391]') assert(typed_enums.get_typed_builtin() == TYPE_INT) + const const_enums: Array[E] = [] + assert(const_enums.get_typed_builtin() == TYPE_INT) + assert(const_enums.get_typed_class_name() == &'') + var a := A.new() var typed_natives: Array[RefCounted] = [a] |