Fix: Get constructor as Callable

This commit is contained in:
mashumafi 2023-02-20 21:55:35 -05:00
parent 62d4d8bfc6
commit b39b4010bd
3 changed files with 24 additions and 1 deletions

View file

@ -3264,7 +3264,7 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
base = *p_base;
}
const StringName &name = p_identifier->name;
StringName name = p_identifier->name;
if (base.kind == GDScriptParser::DataType::ENUM) {
if (base.is_meta_type) {
@ -3359,12 +3359,18 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
get_class_node_current_scope_classes(base_class, &script_classes);
}
bool is_constructor = base.is_meta_type && p_identifier->name == SNAME("new");
for (GDScriptParser::ClassNode *script_class : script_classes) {
if (p_base == nullptr && script_class->identifier && script_class->identifier->name == name) {
reduce_identifier_from_base_set_class(p_identifier, script_class->get_datatype());
return;
}
if (is_constructor) {
name = "_init";
}
if (script_class->has_member(name)) {
resolve_class_member(script_class, name, p_identifier);
@ -3443,6 +3449,10 @@ void GDScriptAnalyzer::reduce_identifier_from_base(GDScriptParser::IdentifierNod
const StringName &native = base.native_type;
if (class_exists(native)) {
if (is_constructor) {
name = "_init";
}
MethodInfo method_info;
if (ClassDB::has_property(native, name)) {
StringName getter_name = ClassDB::get_property_getter(native, name);

View file

@ -0,0 +1,10 @@
# https://github.com/godotengine/godot/issues/70319
class InnerClass:
pass
func test():
var inner_ctor : Callable = InnerClass.new
print(inner_ctor)
var native_ctor : Callable = Node.new
print(native_ctor)

View file

@ -0,0 +1,3 @@
GDTEST_OK
GDScript::new
GDScriptNativeClass::new