GDScript: Fix and simplify coroutine stack clearing
This commit is contained in:
parent
74b5be24f4
commit
8a09a2f88c
5 changed files with 72 additions and 36 deletions
|
|
@ -1,13 +1,16 @@
|
|||
# GH-116706
|
||||
|
||||
class Instance:
|
||||
func _init() -> void:
|
||||
print("Instance _init")
|
||||
|
||||
func _to_string() -> String:
|
||||
return "<Instance>"
|
||||
|
||||
func _notification(what: int) -> void:
|
||||
if what == NOTIFICATION_PREDELETE:
|
||||
print("Instance predelete")
|
||||
|
||||
# GH-116706
|
||||
|
||||
class LocalOwner:
|
||||
signal never_emitted()
|
||||
|
||||
|
|
@ -24,10 +27,52 @@ class LocalOwner:
|
|||
await never_emitted
|
||||
print("interrupted_coroutine end")
|
||||
|
||||
func test():
|
||||
print("test begin")
|
||||
func subtest_order():
|
||||
print("subtest_order begin")
|
||||
var local_owner := LocalOwner.new()
|
||||
@warning_ignore("missing_await")
|
||||
local_owner.interrupted_coroutine()
|
||||
local_owner = null
|
||||
print("test end")
|
||||
print("subtest_order end")
|
||||
|
||||
# GH-117049
|
||||
|
||||
signal tick()
|
||||
|
||||
func await_before_and_after() -> void:
|
||||
await tick
|
||||
var packed_array: PackedStringArray = ["abc"]
|
||||
var instance := Instance.new()
|
||||
await tick
|
||||
prints(packed_array, instance)
|
||||
|
||||
func await_two_after() -> void:
|
||||
var packed_array: PackedStringArray = ["abc"]
|
||||
var instance := Instance.new()
|
||||
await tick
|
||||
await tick
|
||||
prints(packed_array, instance)
|
||||
|
||||
func subtest_resume():
|
||||
print("subtest_resume begin")
|
||||
|
||||
@warning_ignore("missing_await")
|
||||
await_before_and_after()
|
||||
tick.emit()
|
||||
tick.emit()
|
||||
|
||||
print("---")
|
||||
|
||||
@warning_ignore("missing_await")
|
||||
await_two_after()
|
||||
tick.emit()
|
||||
tick.emit()
|
||||
|
||||
print("subtest_resume end")
|
||||
|
||||
# ===
|
||||
|
||||
func test():
|
||||
subtest_order()
|
||||
print("===")
|
||||
subtest_resume()
|
||||
|
|
|
|||
|
|
@ -1,8 +1,18 @@
|
|||
GDTEST_OK
|
||||
test begin
|
||||
subtest_order begin
|
||||
LocalOwner _init
|
||||
interrupted_coroutine begin
|
||||
Instance _init
|
||||
LocalOwner predelete
|
||||
Instance predelete
|
||||
test end
|
||||
subtest_order end
|
||||
===
|
||||
subtest_resume begin
|
||||
Instance _init
|
||||
["abc"] <Instance>
|
||||
Instance predelete
|
||||
---
|
||||
Instance _init
|
||||
["abc"] <Instance>
|
||||
Instance predelete
|
||||
subtest_resume end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue