GDScript: Allow elements of a parent class in a typed array literal

This commit is contained in:
Dmitrii Maganov 2023-03-28 13:47:24 +03:00
parent f818d2b98f
commit 8655d979a1
4 changed files with 20 additions and 2 deletions

View file

@ -2373,6 +2373,10 @@ void GDScriptAnalyzer::update_array_literal_element_type(GDScriptParser::ArrayNo
continue;
}
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);
return;
}

View file

@ -116,8 +116,8 @@ func test():
assert(duplicated_floats.get_typed_builtin() == TYPE_FLOAT)
var b_objects: Array[B] = [B.new(), null]
assert(b_objects.size() == 2)
var b_objects: Array[B] = [B.new(), B.new() as A, null]
assert(b_objects.size() == 3)
assert(b_objects.get_typed_builtin() == TYPE_OBJECT)
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