Bladeren bron

GDScript: Allow implicit type conversion when constructing variants

Incidentally fix error message when no valid constructor is found which
was missing an end parenthesis.
George Marques 5 jaren geleden
bovenliggende
commit
8bc9b3a2ae
1 gewijzigde bestanden met toevoegingen van 3 en 1 verwijderingen
  1. 3 1
      modules/gdscript/gdscript_analyzer.cpp

+ 3 - 1
modules/gdscript/gdscript_analyzer.cpp

@@ -1634,6 +1634,7 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool is_awa
 							}
 							}
 							signature += p_call->arguments[i]->get_datatype().to_string();
 							signature += p_call->arguments[i]->get_datatype().to_string();
 						}
 						}
+						signature += ")";
 						push_error(vformat(R"(No constructor of "%s" matches the signature "%s".)", Variant::get_type_name(builtin_type), signature), p_call->callee);
 						push_error(vformat(R"(No constructor of "%s" matches the signature "%s".)", Variant::get_type_name(builtin_type), signature), p_call->callee);
 					} break;
 					} break;
 					case Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS:
 					case Callable::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS:
@@ -1684,7 +1685,7 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool is_awa
 					for (int i = 0; i < p_call->arguments.size(); i++) {
 					for (int i = 0; i < p_call->arguments.size(); i++) {
 						GDScriptParser::DataType par_type = type_from_property(info.arguments[i]);
 						GDScriptParser::DataType par_type = type_from_property(info.arguments[i]);
 
 
-						if (!is_type_compatible(par_type, p_call->arguments[i]->get_datatype())) {
+						if (!is_type_compatible(par_type, p_call->arguments[i]->get_datatype(), true)) {
 							types_match = false;
 							types_match = false;
 							break;
 							break;
 #ifdef DEBUG_ENABLED
 #ifdef DEBUG_ENABLED
@@ -1711,6 +1712,7 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool is_awa
 						}
 						}
 						signature += p_call->arguments[i]->get_datatype().to_string();
 						signature += p_call->arguments[i]->get_datatype().to_string();
 					}
 					}
+					signature += ")";
 					push_error(vformat(R"(No constructor of "%s" matches the signature "%s".)", Variant::get_type_name(builtin_type), signature), p_call);
 					push_error(vformat(R"(No constructor of "%s" matches the signature "%s".)", Variant::get_type_name(builtin_type), signature), p_call);
 				}
 				}
 			}
 			}