mirror of
				https://github.com/godotengine/godot.git
				synced 2025-11-01 06:01:14 +00:00 
			
		
		
		
	Fix: Typed arrays aren't working with +
This commit is contained in:
		
							parent
							
								
									0c27edf3d9
								
							
						
					
					
						commit
						2a12213c31
					
				
					 4 changed files with 62 additions and 3 deletions
				
			
		|  | @ -4306,7 +4306,16 @@ GDScriptParser::DataType GDScriptAnalyzer::type_from_variant(const Variant &p_va | |||
| 	result.builtin_type = p_value.get_type(); | ||||
| 	result.type_source = GDScriptParser::DataType::ANNOTATED_EXPLICIT; // Constant has explicit type.
 | ||||
| 
 | ||||
| 	if (p_value.get_type() == Variant::OBJECT) { | ||||
| 	if (p_value.get_type() == Variant::ARRAY) { | ||||
| 		const Array &array = p_value; | ||||
| 		if (array.get_typed_script()) { | ||||
| 			result.set_container_element_type(type_from_metatype(make_script_meta_type(array.get_typed_script()))); | ||||
| 		} else if (array.get_typed_class_name()) { | ||||
| 			result.set_container_element_type(type_from_metatype(make_native_meta_type(array.get_typed_class_name()))); | ||||
| 		} else if (array.get_typed_builtin() != Variant::NIL) { | ||||
| 			result.set_container_element_type(type_from_metatype(make_builtin_meta_type((Variant::Type)array.get_typed_builtin()))); | ||||
| 		} | ||||
| 	} else if (p_value.get_type() == Variant::OBJECT) { | ||||
| 		// Object is treated as a native type, not a builtin type.
 | ||||
| 		result.kind = GDScriptParser::DataType::NATIVE; | ||||
| 
 | ||||
|  | @ -4741,11 +4750,21 @@ GDScriptParser::DataType GDScriptAnalyzer::get_operation_type(Variant::Operator | |||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	Variant::ValidatedOperatorEvaluator op_eval = Variant::get_validated_operator_evaluator(p_operation, a_type, b_type); | ||||
| 	GDScriptParser::DataType result; | ||||
| 	bool hard_operation = p_a.is_hard_type() && p_b.is_hard_type(); | ||||
| 
 | ||||
| 	if (p_operation == Variant::OP_ADD && a_type == Variant::ARRAY && b_type == Variant::ARRAY) { | ||||
| 		if (p_a.get_container_element_type() == p_a.get_container_element_type()) { | ||||
| 			r_valid = true; | ||||
| 			result = p_a; | ||||
| 			result.type_source = hard_operation ? GDScriptParser::DataType::ANNOTATED_INFERRED : GDScriptParser::DataType::INFERRED; | ||||
| 			return result; | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	Variant::ValidatedOperatorEvaluator op_eval = Variant::get_validated_operator_evaluator(p_operation, a_type, b_type); | ||||
| 	bool validated = op_eval != nullptr; | ||||
| 
 | ||||
| 	GDScriptParser::DataType result; | ||||
| 	if (validated) { | ||||
| 		r_valid = true; | ||||
| 		result.type_source = hard_operation ? GDScriptParser::DataType::ANNOTATED_INFERRED : GDScriptParser::DataType::INFERRED; | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 mashumafi
						mashumafi