mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	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
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Dmitrii Maganov
						Dmitrii Maganov