1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-17 14:11:06 +00:00

Merge pull request #75419 from vonagam/fix-super-classes-in-array-literals

GDScript: Allow elements of a parent class in a typed array literal
This commit is contained in:
Rémi Verschelde
2023-06-14 09:23:32 +02:00
4 changed files with 20 additions and 2 deletions

View File

@@ -2446,6 +2446,10 @@ void GDScriptAnalyzer::update_array_literal_element_type(GDScriptParser::ArrayNo
continue; continue;
} }
if (!is_type_compatible(p_element_type, element_type, true, p_array)) { if (!is_type_compatible(p_element_type, element_type, true, p_array)) {
if (is_type_compatible(element_type, p_element_type)) {
mark_node_unsafe(element_node);
continue;
}
push_error(vformat(R"(Cannot have an element of type "%s" in an array of type "Array[%s]".)", element_type.to_string(), p_element_type.to_string()), element_node); push_error(vformat(R"(Cannot have an element of type "%s" in an array of type "Array[%s]".)", element_type.to_string(), p_element_type.to_string()), element_node);
return; return;
} }

View File

@@ -116,8 +116,8 @@ func test():
assert(duplicated_floats.get_typed_builtin() == TYPE_FLOAT) assert(duplicated_floats.get_typed_builtin() == TYPE_FLOAT)
var b_objects: Array[B] = [B.new(), null] var b_objects: Array[B] = [B.new(), B.new() as A, null]
assert(b_objects.size() == 2) assert(b_objects.size() == 3)
assert(b_objects.get_typed_builtin() == TYPE_OBJECT) assert(b_objects.get_typed_builtin() == TYPE_OBJECT)
assert(b_objects.get_typed_script() == B) assert(b_objects.get_typed_script() == B)

View File

@@ -0,0 +1,7 @@
class Foo: pass
class Bar extends Foo: pass
class Baz extends Foo: pass
func test():
var typed: Array[Bar] = [Baz.new() as Foo]
print('not ok')

View File

@@ -0,0 +1,7 @@
GDTEST_RUNTIME_ERROR
>> ERROR
>> on function: assign()
>> core/variant/array.cpp
>> 222
>> Method/function failed.
not ok