GDScript: Allow elements of a parent class in a typed array literal
This commit is contained in:
parent
f818d2b98f
commit
8655d979a1
4 changed files with 20 additions and 2 deletions
modules/gdscript
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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')
|
|
@ -0,0 +1,7 @@
|
|||
GDTEST_RUNTIME_ERROR
|
||||
>> ERROR
|
||||
>> on function: assign()
|
||||
>> core/variant/array.cpp
|
||||
>> 222
|
||||
>> Method/function failed.
|
||||
not ok
|
Loading…
Reference in a new issue