fix(gdscript): Fix infinite loop on type inferernce from super method calls

When infering the type from a `super()` call, the gdscript_editor didn't use the base class to search for the original implementation of the method, but instead searched in the extending class.
This caused the same function to be analyzed for type inference which created the infinite loop.

Solves #63592
This commit is contained in:
Antonio Dell'Annunziata 2022-07-29 10:21:11 +02:00
parent 9869182e8a
commit 7b975b50dc
No known key found for this signature in database
GPG Key ID: 8D2BB16641F06E94

View File

@ -1473,11 +1473,16 @@ static bool _guess_expression_type(GDScriptParser::CompletionContext &p_context,
if (callee_type == GDScriptParser::Node::IDENTIFIER || call->is_super) { if (callee_type == GDScriptParser::Node::IDENTIFIER || call->is_super) {
// Simple call, so base is 'self'. // Simple call, so base is 'self'.
if (p_context.current_class) { if (p_context.current_class) {
base.type.kind = GDScriptParser::DataType::CLASS; if (call->is_super) {
base.type.type_source = GDScriptParser::DataType::INFERRED; base.type = p_context.current_class->base_type;
base.type.is_constant = true; base.value = p_context.base;
base.type.class_type = p_context.current_class; } else {
base.value = p_context.base; base.type.kind = GDScriptParser::DataType::CLASS;
base.type.type_source = GDScriptParser::DataType::INFERRED;
base.type.is_constant = true;
base.type.class_type = p_context.current_class;
base.value = p_context.base;
}
} else { } else {
break; break;
} }