aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-04-07 14:59:26 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-04-07 14:59:26 -0300
commit47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4 (patch)
tree54d46a0530aa2ee09db66d57c66bd313a5de530e /testes
parent36de01d9885562444ae2e2a3e0b7e01b3fb8743b (diff)
downloadlua-47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4.tar.gz
lua-47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4.tar.bz2
lua-47cffdc723c2e0c6dfaf62b7775ca1c1d338c0a4.zip
Bug: tbc variables in "for" loops don't avoid tail calls
Diffstat (limited to 'testes')
-rw-r--r--testes/locals.lua23
1 files changed, 23 insertions, 0 deletions
diff --git a/testes/locals.lua b/testes/locals.lua
index 2c67edbd..6aad5d25 100644
--- a/testes/locals.lua
+++ b/testes/locals.lua
@@ -335,6 +335,29 @@ do
335end 335end
336 336
337 337
338do
339 -- bug in 5.4.3: previous condition (calls cannot be tail in the
340 -- scope of to-be-closed variables) must be valid for tbc variables
341 -- created by 'for' loops.
342
343 local closed = false
344
345 local function foo ()
346 return function () return true end, 0, 0,
347 func2close(function () closed = true end)
348 end
349
350 local function tail() return closed end
351
352 local function foo1 ()
353 for k in foo() do return tail() end
354 end
355
356 assert(foo1() == false)
357 assert(closed == true)
358end
359
360
338do print("testing errors in __close") 361do print("testing errors in __close")
339 362
340 -- original error is in __close 363 -- original error is in __close