1
0
mirror of https://github.com/godotengine/godot.git synced 2025-11-20 14:45:44 +00:00

GDScript: Fix lambda resolution with cyclic references

This commit is contained in:
Danil Alexeev
2023-08-23 12:37:18 +03:00
parent 6758a7f8c0
commit 89429b0273
10 changed files with 127 additions and 31 deletions

View File

@@ -0,0 +1,5 @@
var f = (func (_a): return 0).call(x)
var x = f
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Could not resolve member "f": Cyclic reference.

View File

@@ -0,0 +1,5 @@
var f = func (_a = x): return 0
var x = f
func test():
pass

View File

@@ -0,0 +1,2 @@
GDTEST_ANALYZER_ERROR
Could not resolve member "f": Cyclic reference.

View File

@@ -0,0 +1,34 @@
# GH-70592
var f: Callable = func ():
x = 2
return 1
var x: int = f.call()
var g: Array[Callable] = [
func ():
y += 10
return 1,
func ():
y += 20
return 2,
]
var y: int = g[0].call() + g[1].call()
func test():
print(x)
f.call()
print(x)
print(y)
g[0].call()
g[1].call()
print(y)
# This prevents memory leak in CI. TODO: Investigate it.
# Also you cannot run the `EditorScript` twice without the cleaning. Error:
# Condition "!p_keep_state && has_instances" is true. Returning: ERR_ALREADY_IN_USE
f = Callable()
g.clear()

View File

@@ -0,0 +1,5 @@
GDTEST_OK
1
2
3
33