Fix "Identifier not found" compiler error when accessing inherited signals or functions as callables.
This commit is contained in:
parent
9c3cbc9edc
commit
dcf19f8914
@ -291,8 +291,11 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
|
|||||||
|
|
||||||
// Try signals and methods (can be made callables).
|
// Try signals and methods (can be made callables).
|
||||||
{
|
{
|
||||||
if (codegen.class_node->members_indices.has(identifier)) {
|
// Search upwards through parent classes:
|
||||||
const GDScriptParser::ClassNode::Member &member = codegen.class_node->members[codegen.class_node->members_indices[identifier]];
|
const GDScriptParser::ClassNode *base_class = codegen.class_node;
|
||||||
|
while (base_class != nullptr) {
|
||||||
|
if (base_class->has_member(identifier)) {
|
||||||
|
const GDScriptParser::ClassNode::Member &member = base_class->get_member(identifier);
|
||||||
if (member.type == GDScriptParser::ClassNode::Member::FUNCTION || member.type == GDScriptParser::ClassNode::Member::SIGNAL) {
|
if (member.type == GDScriptParser::ClassNode::Member::FUNCTION || member.type == GDScriptParser::ClassNode::Member::SIGNAL) {
|
||||||
// Get like it was a property.
|
// Get like it was a property.
|
||||||
GDScriptCodeGenerator::Address temp = codegen.add_temporary(); // TODO: Get type here.
|
GDScriptCodeGenerator::Address temp = codegen.add_temporary(); // TODO: Get type here.
|
||||||
@ -302,6 +305,8 @@ GDScriptCodeGenerator::Address GDScriptCompiler::_parse_expression(CodeGen &code
|
|||||||
return temp;
|
return temp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
base_class = base_class->base_type.class_type;
|
||||||
|
}
|
||||||
|
|
||||||
// Try in native base.
|
// Try in native base.
|
||||||
GDScript *scr = codegen.script;
|
GDScript *scr = codegen.script;
|
||||||
|
Loading…
Reference in New Issue
Block a user