aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
Diffstat (limited to 'testes')
-rw-r--r--testes/coroutine.lua26
1 files changed, 22 insertions, 4 deletions
diff --git a/testes/coroutine.lua b/testes/coroutine.lua
index 955f6776..5b927151 100644
--- a/testes/coroutine.lua
+++ b/testes/coroutine.lua
@@ -124,6 +124,11 @@ x, a = nil
124 124
125 125
126-- coroutine closing 126-- coroutine closing
127
128local function func2close (f)
129 return setmetatable({}, {__close = f})
130end
131
127do 132do
128 -- ok to close a dead coroutine 133 -- ok to close a dead coroutine
129 local co = coroutine.create(print) 134 local co = coroutine.create(print)
@@ -146,10 +151,6 @@ do
146 -- to-be-closed variables in coroutines 151 -- to-be-closed variables in coroutines
147 local X 152 local X
148 153
149 local function func2close (f)
150 return setmetatable({}, {__close = f})
151 end
152
153 co = coroutine.create(function () 154 co = coroutine.create(function ()
154 local x <close> = func2close(function (self, err) 155 local x <close> = func2close(function (self, err)
155 assert(err == nil); X = false 156 assert(err == nil); X = false
@@ -192,6 +193,23 @@ do
192 193
193end 194end
194 195
196do
197 -- <close> versus pcall in coroutines
198 local X = false
199 local Y = false
200 function foo ()
201 local x <close> = func2close(function (self, err)
202 Y = debug.getinfo(2)
203 X = err
204 end)
205 error(43)
206 end
207 co = coroutine.create(function () return pcall(foo) end)
208 local st1, st2, err = coroutine.resume(co)
209 assert(st1 and not st2 and err == 43)
210 assert(X == 43 and Y.name == "pcall")
211end
212
195 213
196-- yielding across C boundaries 214-- yielding across C boundaries
197 215