aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
Diffstat (limited to 'testes')
-rw-r--r--testes/locals.lua37
1 files changed, 37 insertions, 0 deletions
diff --git a/testes/locals.lua b/testes/locals.lua
index 4f103be9..0e5e0c74 100644
--- a/testes/locals.lua
+++ b/testes/locals.lua
@@ -264,6 +264,43 @@ do
264end 264end
265 265
266 266
267-- testing to-be-closed x compile-time constants
268-- (there were some bugs here in Lua 5.4-rc3, due to a confusion
269-- between compile levels and stack levels of variables)
270do
271 local flag = false
272 local x = setmetatable({},
273 {__close = function() assert(flag == false); flag = true end})
274 local y <const> = nil
275 local z <const> = nil
276 do
277 local a <close> = x
278 end
279 assert(flag) -- 'x' must be closed here
280end
281
282do
283 -- similar problem, but with implicit close in for loops
284 local flag = false
285 local x = setmetatable({},
286 {__close = function () assert(flag == false); flag = true end})
287 -- return an empty iterator, nil, nil, and 'x' to be closed
288 local function a ()
289 return (function () return nil end), nil, nil, x
290 end
291 local v <const> = 1
292 local w <const> = 1
293 local x <const> = 1
294 local y <const> = 1
295 local z <const> = 1
296 for k in a() do
297 a = k
298 end -- ending the loop must close 'x'
299 assert(flag) -- 'x' must be closed here
300end
301
302
303
267do 304do
268 -- calls cannot be tail in the scope of to-be-closed variables 305 -- calls cannot be tail in the scope of to-be-closed variables
269 local X, Y 306 local X, Y