aboutsummaryrefslogtreecommitdiff
path: root/testes
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-01-19 10:03:13 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-01-19 10:03:13 -0300
commit6ccd24eff58340c00db2877c4558a63c6b859442 (patch)
tree4c8f51657d8d1f4921846a23ba4b475db49fd837 /testes
parentd0f34d91373fa265d4445e456e4a10ce206c1559 (diff)
downloadlua-6ccd24eff58340c00db2877c4558a63c6b859442.tar.gz
lua-6ccd24eff58340c00db2877c4558a63c6b859442.tar.bz2
lua-6ccd24eff58340c00db2877c4558a63c6b859442.zip
Simpler handling of errors when creating tbc variables
New field 'lua_State.ptbc' keeps to-be-closed variable until its upvalue is created, so that it can be closed in case of a memory-allocation error.
Diffstat (limited to 'testes')
-rw-r--r--testes/locals.lua13
1 files changed, 5 insertions, 8 deletions
diff --git a/testes/locals.lua b/testes/locals.lua
index 8506195e..24a95d18 100644
--- a/testes/locals.lua
+++ b/testes/locals.lua
@@ -539,15 +539,17 @@ if rawget(_G, "T") then
539 local _, msg = pcall(foo) 539 local _, msg = pcall(foo)
540 assert(msg == "not enough memory") 540 assert(msg == "not enough memory")
541 541
542 local closemsg
542 local close = func2close(function (self, msg) 543 local close = func2close(function (self, msg)
543 T.alloccount() 544 T.alloccount()
544 assert(msg == "not enough memory") 545 closemsg = msg
545 end) 546 end)
546 547
547 -- set a memory limit and return a closing object to remove the limit 548 -- set a memory limit and return a closing object to remove the limit
548 local function enter (count) 549 local function enter (count)
549 stack(10) -- reserve some stack space 550 stack(10) -- reserve some stack space
550 T.alloccount(count) 551 T.alloccount(count)
552 closemsg = nil
551 return close 553 return close
552 end 554 end
553 555
@@ -558,12 +560,7 @@ if rawget(_G, "T") then
558 end 560 end
559 561
560 local _, msg = pcall(test) 562 local _, msg = pcall(test)
561 assert(msg == "not enough memory") 563 assert(msg == "not enough memory" and closemsg == "not enough memory")
562
563 -- now use metamethod for closing
564 close = setmetatable({}, {__close = function ()
565 T.alloccount()
566 end})
567 564
568 -- repeat test with extra closing upvalues 565 -- repeat test with extra closing upvalues
569 local function test () 566 local function test ()
@@ -580,7 +577,7 @@ if rawget(_G, "T") then
580 end 577 end
581 578
582 local _, msg = pcall(test) 579 local _, msg = pcall(test)
583 assert(msg == 1000) 580 assert(msg == 1000 and closemsg == "not enough memory")
584 581
585 do -- testing 'toclose' in C string buffer 582 do -- testing 'toclose' in C string buffer
586 collectgarbage() 583 collectgarbage()