瀏覽代碼

GDScriptNativeClass: Allow getting static function as callable

rune-scape 10 月之前
父節點
當前提交
d3ad99d3d1

+ 9 - 2
modules/gdscript/gdscript.cpp

@@ -76,9 +76,16 @@ bool GDScriptNativeClass::_get(const StringName &p_name, Variant &r_ret) const {
 	if (ok) {
 		r_ret = v;
 		return true;
-	} else {
-		return false;
 	}
+
+	MethodBind *method = ClassDB::get_method(name, p_name);
+	if (method && method->is_static()) {
+		// Native static method.
+		r_ret = Callable(this, p_name);
+		return true;
+	}
+
+	return false;
 }
 
 void GDScriptNativeClass::_bind_methods() {

+ 8 - 0
modules/gdscript/tests/scripts/runtime/features/native_static_method_as_callable.gd

@@ -0,0 +1,8 @@
+func get_parse_string(t: Variant):
+	return t.parse_string
+
+func test():
+	var a: Callable = JSON.parse_string
+	var b: Callable = get_parse_string(JSON)
+	prints(a.call("{\"test\": \"a\"}"), a.is_valid())
+	prints(b.call("{\"test\": \"b\"}"), b.is_valid())

+ 3 - 0
modules/gdscript/tests/scripts/runtime/features/native_static_method_as_callable.out

@@ -0,0 +1,3 @@
+GDTEST_OK
+{ "test": "a" } false
+{ "test": "b" } false