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

This commit is contained in:
A Thousand Ships 2024-07-08 16:31:00 +02:00
parent ec02d406ca
commit f68ab70a6a
No known key found for this signature in database
GPG Key ID: 2033189A662F8BD7
4 changed files with 31 additions and 0 deletions

View File

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

View File

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

View File

@ -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>".

View File

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