1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-05 12:10:55 +00:00

Merge pull request #82808 from dalexeev/gds-vararg

GDScript: Add support for variadic functions
This commit is contained in:
Thaddeus Crews
2025-06-09 17:08:48 -05:00
33 changed files with 416 additions and 65 deletions

View File

@@ -4,6 +4,7 @@ abstract class A:
# No `UNUSED_PARAMETER` warning.
abstract func func_with_param(param: int) -> int
abstract func func_with_rest_param(...args: Array) -> int
abstract func func_with_semicolon() -> int;
abstract func func_1() -> int; abstract func func_2() -> int
abstract func func_without_return_type()
@@ -23,6 +24,7 @@ class C extends B:
return "text_2c"
func func_with_param(param: int) -> int: return param
func func_with_rest_param(...args: Array) -> int: return args.size()
func func_with_semicolon() -> int: return 0
func func_1() -> int: return 0
func func_2() -> int: return 0

View File

@@ -0,0 +1,38 @@
class A:
func f(x: int) -> void:
print(x)
class B extends A:
func f(x: int, ...args: Array) -> void:
prints(x, args)
class C extends B:
func f(x: int, y: int = 0, ...args: Array) -> void:
prints(x, y, args)
class D extends C:
func f(...args: Array) -> void:
print(args)
func test_func(x: int, y: int = 0, ...args: Array) -> void:
prints(x, y, args)
var test_lambda := func (x: int, y: int = 0, ...args: Array) -> void:
prints(x, y, args)
func test():
for method in get_method_list():
if str(method.name).begins_with("test_"):
print(Utils.get_method_signature(method))
test_func(1)
test_func(1, 2)
test_func(1, 2, 3)
test_func(1, 2, 3, 4)
test_func(1, 2, 3, 4, 5)
test_lambda.call(1)
test_lambda.call(1, 2)
test_lambda.call(1, 2, 3)
test_lambda.call(1, 2, 3, 4)
test_lambda.call(1, 2, 3, 4, 5)

View File

@@ -0,0 +1,12 @@
GDTEST_OK
func test_func(x: int, y: int = 0, ...args) -> void
1 0 []
1 2 []
1 2 [3]
1 2 [3, 4]
1 2 [3, 4, 5]
1 0 []
1 2 []
1 2 [3]
1 2 [3, 4]
1 2 [3, 4, 5]