aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
Diffstat (limited to 'testes')
-rw-r--r--testes/cstack.lua26
1 files changed, 26 insertions, 0 deletions
diff --git a/testes/cstack.lua b/testes/cstack.lua
index ca76c872..97afe9fd 100644
--- a/testes/cstack.lua
+++ b/testes/cstack.lua
@@ -84,6 +84,32 @@ do -- bug in 5.4.0
84end 84end
85 85
86 86
87do -- bug since 5.4.0
88 local count = 0
89 print("chain of 'coroutine.close'")
90 -- create N coroutines forming a list so that each one, when closed,
91 -- closes the previous one. (With a large enough N, previous Lua
92 -- versions crash in this test.)
93 local coro = false
94 for i = 1, 1000 do
95 local previous = coro
96 coro = coroutine.create(function()
97 local cc <close> = setmetatable({}, {__close=function()
98 count = count + 1
99 if previous then
100 assert(coroutine.close(previous))
101 end
102 end})
103 coroutine.yield() -- leaves 'cc' pending to be closed
104 end)
105 assert(coroutine.resume(coro)) -- start it and run until it yields
106 end
107 local st, msg = coroutine.close(coro)
108 assert(not st and string.find(msg, "C stack overflow"))
109 print("final count: ", count)
110end
111
112
87do 113do
88 print("nesting of resuming yielded coroutines") 114 print("nesting of resuming yielded coroutines")
89 local count = 0 115 local count = 0