|
@@ -1748,12 +1748,6 @@ void GDScriptAnalyzer::resolve_variable(GDScriptParser::VariableNode *p_variable
|
|
|
|
|
|
type = p_variable->initializer->get_datatype();
|
|
|
|
|
|
-#ifdef DEBUG_ENABLED
|
|
|
- if (p_variable->initializer->type == GDScriptParser::Node::CALL && type.is_hard_type() && type.kind == GDScriptParser::DataType::BUILTIN && type.builtin_type == Variant::NIL) {
|
|
|
- parser->push_warning(p_variable->initializer, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_variable->initializer)->function_name);
|
|
|
- }
|
|
|
-#endif
|
|
|
-
|
|
|
if (p_variable->infer_datatype) {
|
|
|
type.type_source = GDScriptParser::DataType::ANNOTATED_INFERRED;
|
|
|
|
|
@@ -1843,12 +1837,6 @@ void GDScriptAnalyzer::resolve_constant(GDScriptParser::ConstantNode *p_constant
|
|
|
}
|
|
|
|
|
|
type = p_constant->initializer->get_datatype();
|
|
|
-
|
|
|
-#ifdef DEBUG_ENABLED
|
|
|
- if (p_constant->initializer->type == GDScriptParser::Node::CALL && type.is_hard_type() && type.kind == GDScriptParser::DataType::BUILTIN && type.builtin_type == Variant::NIL) {
|
|
|
- parser->push_warning(p_constant->initializer, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_constant->initializer)->function_name);
|
|
|
- }
|
|
|
-#endif
|
|
|
}
|
|
|
|
|
|
if (p_constant->datatype_specifier != nullptr) {
|
|
@@ -2333,9 +2321,7 @@ void GDScriptAnalyzer::reduce_assignment(GDScriptParser::AssignmentNode *p_assig
|
|
|
}
|
|
|
|
|
|
#ifdef DEBUG_ENABLED
|
|
|
- if (p_assignment->assigned_value->type == GDScriptParser::Node::CALL && assigned_value_type.is_hard_type() && assigned_value_type.kind == GDScriptParser::DataType::BUILTIN && assigned_value_type.builtin_type == Variant::NIL) {
|
|
|
- parser->push_warning(p_assignment->assigned_value, GDScriptWarning::VOID_ASSIGNMENT, static_cast<GDScriptParser::CallNode *>(p_assignment->assigned_value)->function_name);
|
|
|
- } else if (assignee_type.is_hard_type() && assignee_type.builtin_type == Variant::INT && assigned_value_type.builtin_type == Variant::FLOAT) {
|
|
|
+ if (assignee_type.is_hard_type() && assignee_type.builtin_type == Variant::INT && assigned_value_type.builtin_type == Variant::FLOAT) {
|
|
|
parser->push_warning(p_assignment->assigned_value, GDScriptWarning::NARROWING_CONVERSION);
|
|
|
}
|
|
|
#endif
|
|
@@ -2650,6 +2636,10 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
|
|
|
} else if (GDScriptUtilityFunctions::function_exists(function_name)) {
|
|
|
MethodInfo function_info = GDScriptUtilityFunctions::get_function_info(function_name);
|
|
|
|
|
|
+ if (!p_is_root && function_info.return_val.type == Variant::NIL && ((function_info.return_val.usage & PROPERTY_USAGE_NIL_IS_VARIANT) == 0)) {
|
|
|
+ push_error(vformat(R"*(Cannot get return value of call to "%s()" because it returns "void".)*", function_name), p_call);
|
|
|
+ }
|
|
|
+
|
|
|
if (all_is_constant && GDScriptUtilityFunctions::is_function_constant(function_name)) {
|
|
|
// Can call on compilation.
|
|
|
Vector<const Variant *> args;
|
|
@@ -2693,6 +2683,10 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
|
|
|
} else if (Variant::has_utility_function(function_name)) {
|
|
|
MethodInfo function_info = info_from_utility_func(function_name);
|
|
|
|
|
|
+ if (!p_is_root && function_info.return_val.type == Variant::NIL && ((function_info.return_val.usage & PROPERTY_USAGE_NIL_IS_VARIANT) == 0)) {
|
|
|
+ push_error(vformat(R"*(Cannot get return value of call to "%s()" because it returns "void".)*", function_name), p_call);
|
|
|
+ }
|
|
|
+
|
|
|
if (all_is_constant && Variant::get_utility_function_type(function_name) == Variant::UTILITY_FUNC_TYPE_MATH) {
|
|
|
// Can call on compilation.
|
|
|
Vector<const Variant *> args;
|
|
@@ -2835,6 +2829,10 @@ void GDScriptAnalyzer::reduce_call(GDScriptParser::CallNode *p_call, bool p_is_a
|
|
|
mark_lambda_use_self();
|
|
|
}
|
|
|
|
|
|
+ if (!p_is_root && return_type.is_hard_type() && return_type.kind == GDScriptParser::DataType::BUILTIN && return_type.builtin_type == Variant::NIL) {
|
|
|
+ push_error(vformat(R"*(Cannot get return value of call to "%s()" because it returns "void".)*", p_call->function_name), p_call);
|
|
|
+ }
|
|
|
+
|
|
|
#ifdef DEBUG_ENABLED
|
|
|
if (p_is_root && return_type.kind != GDScriptParser::DataType::UNRESOLVED && return_type.builtin_type != Variant::NIL) {
|
|
|
parser->push_warning(p_call, GDScriptWarning::RETURN_VALUE_DISCARDED, p_call->function_name);
|