Quellcode durchsuchen

[GDScript] Fix `get_method` for lambda self `Callable`s

A Thousand Ships vor 1 Jahr
Ursprung
Commit
f68ab70a6a

+ 4 - 0
modules/gdscript/gdscript_lambda_callable.cpp

@@ -198,6 +198,10 @@ ObjectID GDScriptLambdaSelfCallable::get_object() const {
 	return object->get_instance_id();
 }
 
+StringName GDScriptLambdaSelfCallable::get_method() const {
+	return function->get_name();
+}
+
 int GDScriptLambdaSelfCallable::get_argument_count(bool &r_is_valid) const {
 	if (function == nullptr) {
 		r_is_valid = false;

+ 1 - 0
modules/gdscript/gdscript_lambda_callable.h

@@ -87,6 +87,7 @@ public:
 	CompareEqualFunc get_compare_equal_func() const override;
 	CompareLessFunc get_compare_less_func() const override;
 	ObjectID get_object() const override;
+	StringName get_method() const override;
 	int get_argument_count(bool &r_is_valid) const override;
 	void call(const Variant **p_arguments, int p_argcount, Variant &r_return_value, Callable::CallError &r_call_error) const override;
 

+ 21 - 0
modules/gdscript/tests/scripts/runtime/features/lambda_get_method.gd

@@ -0,0 +1,21 @@
+# https://github.com/godotengine/godot/issues/94074
+
+func foo():
+	pass
+
+func test():
+	var lambda_self := func test() -> void:
+		foo()
+	var anon_lambda_self := func() -> void:
+		foo()
+
+	print(lambda_self.get_method())  # Should print "test".
+	print(anon_lambda_self.get_method())  # Should print "<anonymous lambda>".
+
+	var lambda_non_self := func test() -> void:
+		pass
+	var anon_lambda_non_self := func() -> void:
+		pass
+
+	print(lambda_non_self.get_method())  # Should print "test".
+	print(anon_lambda_non_self.get_method())  # Should print "<anonymous lambda>".

+ 5 - 0
modules/gdscript/tests/scripts/runtime/features/lambda_get_method.out

@@ -0,0 +1,5 @@
+GDTEST_OK
+test
+<anonymous lambda>
+test
+<anonymous lambda>