GDScript: consider constructors as always existing
There's always a constructor, even if implicit, especially for native types. Also don't check for signature match on function call, since this information is not available in release builds.
This commit is contained in:
@ -6767,10 +6767,10 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
|
|||||||
valid = _get_function_signature(base_type, callee_name, return_type, arg_types,
|
valid = _get_function_signature(base_type, callee_name, return_type, arg_types,
|
||||||
default_args_count, is_static, is_vararg);
|
default_args_count, is_static, is_vararg);
|
||||||
|
|
||||||
if (valid) {
|
return_type = original_type;
|
||||||
return_type = original_type;
|
return_type.is_meta_type = false;
|
||||||
return_type.is_meta_type = false;
|
|
||||||
}
|
valid = true; // There's always an initializer, we can asume this is true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!valid) {
|
if (!valid) {
|
||||||
@ -6829,6 +6829,7 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
|
|||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEBUG_ENABLED
|
||||||
if (!check_types) {
|
if (!check_types) {
|
||||||
return return_type;
|
return return_type;
|
||||||
}
|
}
|
||||||
@ -6854,11 +6855,9 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
|
|||||||
|
|
||||||
if (!par_type.has_type) {
|
if (!par_type.has_type) {
|
||||||
_mark_line_as_unsafe(p_call->line);
|
_mark_line_as_unsafe(p_call->line);
|
||||||
#ifdef DEBUG_ENABLED
|
|
||||||
if (par_type.may_yield && p_call->arguments[i]->type == Node::TYPE_OPERATOR) {
|
if (par_type.may_yield && p_call->arguments[i]->type == Node::TYPE_OPERATOR) {
|
||||||
_add_warning(GDScriptWarning::FUNCTION_MAY_YIELD, p_call->line, _find_function_name(static_cast<OperatorNode *>(p_call->arguments[i])));
|
_add_warning(GDScriptWarning::FUNCTION_MAY_YIELD, p_call->line, _find_function_name(static_cast<OperatorNode *>(p_call->arguments[i])));
|
||||||
}
|
}
|
||||||
#endif // DEBUG_ENABLED
|
|
||||||
} else if (!_is_type_compatible(arg_types[i - arg_diff], par_type, true)) {
|
} else if (!_is_type_compatible(arg_types[i - arg_diff], par_type, true)) {
|
||||||
// Supertypes are acceptable for dynamic compliance
|
// Supertypes are acceptable for dynamic compliance
|
||||||
if (!_is_type_compatible(par_type, arg_types[i - arg_diff])) {
|
if (!_is_type_compatible(par_type, arg_types[i - arg_diff])) {
|
||||||
@ -6871,14 +6870,14 @@ GDScriptParser::DataType GDScriptParser::_reduce_function_call_type(const Operat
|
|||||||
_mark_line_as_unsafe(p_call->line);
|
_mark_line_as_unsafe(p_call->line);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
#ifdef DEBUG_ENABLED
|
|
||||||
if (arg_type.kind == DataType::BUILTIN && arg_type.builtin_type == Variant::INT && par_type.kind == DataType::BUILTIN && par_type.builtin_type == Variant::REAL) {
|
if (arg_type.kind == DataType::BUILTIN && arg_type.builtin_type == Variant::INT && par_type.kind == DataType::BUILTIN && par_type.builtin_type == Variant::REAL) {
|
||||||
_add_warning(GDScriptWarning::NARROWING_CONVERSION, p_call->line, callee_name);
|
_add_warning(GDScriptWarning::NARROWING_CONVERSION, p_call->line, callee_name);
|
||||||
}
|
}
|
||||||
#endif // DEBUG_ENABLED
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // DEBUG_ENABLED
|
||||||
|
|
||||||
return return_type;
|
return return_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user