Merge pull request #61373 from vnen/gdscript-redundant-await-warning-fix

This commit is contained in:
Rémi Verschelde 2022-05-24 23:28:23 +02:00 committed by GitHub
commit 2dc7ee4711
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 27 additions and 4 deletions

View File

@ -1160,8 +1160,16 @@ void GDScriptAnalyzer::resolve_function_signature(GDScriptParser::FunctionNode *
} }
} }
} else { } else {
GDScriptParser::DataType return_type = resolve_datatype(p_function->return_type); if (p_function->return_type != nullptr) {
p_function->set_datatype(resolve_datatype(p_function->return_type));
} else {
// In case the function is not typed, we can safely assume it's a Variant, so it's okay to mark as "inferred" here.
// It's not "undetected" to not mix up with unknown functions.
GDScriptParser::DataType return_type;
return_type.type_source = GDScriptParser::DataType::INFERRED;
return_type.kind = GDScriptParser::DataType::VARIANT;
p_function->set_datatype(return_type); p_function->set_datatype(return_type);
}
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
// Check if the function signature matches the parent. If not it's an error since it breaks polymorphism. // Check if the function signature matches the parent. If not it's an error since it breaks polymorphism.
@ -1231,7 +1239,7 @@ void GDScriptAnalyzer::resolve_function_body(GDScriptParser::FunctionNode *p_fun
GDScriptParser::DataType return_type = p_function->body->get_datatype(); GDScriptParser::DataType return_type = p_function->body->get_datatype();
if (p_function->get_datatype().has_no_type() && return_type.is_set()) { if (!p_function->get_datatype().is_hard_type() && return_type.is_set()) {
// Use the suite inferred type if return isn't explicitly set. // Use the suite inferred type if return isn't explicitly set.
return_type.type_source = GDScriptParser::DataType::INFERRED; return_type.type_source = GDScriptParser::DataType::INFERRED;
p_function->set_datatype(p_function->body->get_datatype()); p_function->set_datatype(p_function->body->get_datatype());
@ -2057,7 +2065,8 @@ void GDScriptAnalyzer::reduce_await(GDScriptParser::AwaitNode *p_await) {
p_await->set_datatype(awaiting_type); p_await->set_datatype(awaiting_type);
#ifdef DEBUG_ENABLED #ifdef DEBUG_ENABLED
if (!awaiting_type.is_coroutine && awaiting_type.builtin_type != Variant::SIGNAL) { awaiting_type = p_await->to_await->get_datatype();
if (!(awaiting_type.has_no_type() || awaiting_type.is_coroutine || awaiting_type.builtin_type == Variant::SIGNAL)) {
parser->push_warning(p_await, GDScriptWarning::REDUNDANT_AWAIT); parser->push_warning(p_await, GDScriptWarning::REDUNDANT_AWAIT);
} }
#endif #endif

View File

@ -0,0 +1,12 @@
# https://github.com/godotengine/godot/issues/54589
# https://github.com/godotengine/godot/issues/56265
extends Resource
func test():
print("okay")
await self.changed
await unknown(self)
func unknown(arg):
await arg.changed

View File

@ -0,0 +1,2 @@
GDTEST_OK
okay