Merge pull request #82767 from dalexeev/core-make-object-has-method-virtual

Core: Fix `Object::has_method()` for script static methods
This commit is contained in:
Rémi Verschelde
2023-10-05 10:09:45 +02:00
9 changed files with 40 additions and 1 deletions

View File

@@ -346,6 +346,10 @@ bool GDScript::has_method(const StringName &p_method) const {
return member_functions.has(p_method);
}
bool GDScript::has_static_method(const StringName &p_method) const {
return member_functions.has(p_method) && member_functions[p_method]->is_static();
}
MethodInfo GDScript::get_method_info(const StringName &p_method) const {
HashMap<StringName, GDScriptFunction *>::ConstIterator E = member_functions.find(p_method);
if (!E) {

View File

@@ -266,6 +266,7 @@ public:
virtual void get_script_method_list(List<MethodInfo> *p_list) const override;
virtual bool has_method(const StringName &p_method) const override;
virtual bool has_static_method(const StringName &p_method) const override;
virtual MethodInfo get_method_info(const StringName &p_method) const override;
virtual void get_script_property_list(List<PropertyInfo> *p_list) const override;

View File

@@ -0,0 +1,12 @@
# GH-79521
class_name TestStaticMethodAsCallable
static func static_func() -> String:
return "Test"
func test():
var a: Callable = TestStaticMethodAsCallable.static_func
var b: Callable = static_func
prints(a.call(), a.is_valid())
prints(b.call(), b.is_valid())

View File

@@ -0,0 +1,3 @@
GDTEST_OK
Test true
Test true