Merge pull request #73657 from mashumafi/callable-ctor

Fix: Get constructor as Callable
This commit is contained in:
Rémi Verschelde 2023-06-18 16:27:42 +02:00
commit 4db1d09bf5
No known key found for this signature in database
GPG key ID: C3336907360768E1
3 changed files with 24 additions and 1 deletions

View file

@ -3366,7 +3366,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) {
@ -3461,12 +3461,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);
@ -3545,6 +3551,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