lua

A copy of the Lua development repository
Log | Files | Refs | README

commit 4a3fd8488d617aa633f6b8be85e662653b100a59
parent 2c68e66570206aa1496f9c76fcf2a1a0f550d692
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Mon,  3 Jun 2019 12:12:46 -0300

bug in 5.4 alpha rc1: to-be-closed x vararg functions

Closing methods must be run before correcting 'ci->func' when exiting
a vararg function, to get correct debug information (e.g., in case of
errors).

Diffstat:
Mlvm.c | 2+-
Mtestes/locals.lua | 9+++++++++
2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/lvm.c b/lvm.c @@ -1593,9 +1593,9 @@ void luaV_execute (lua_State *L, CallInfo *ci) { savepc(ci); if (TESTARG_k(i)) { int nparams1 = GETARG_C(i); + luaF_close(L, base, LUA_OK); /* there may be open upvalues */ if (nparams1) /* vararg function? */ ci->func -= ci->u.l.nextraargs + nparams1; - luaF_close(L, base, LUA_OK); /* there may be open upvalues */ } luaD_poscall(L, ci, n); return; diff --git a/testes/locals.lua b/testes/locals.lua @@ -276,6 +276,15 @@ do -- errors in __close assert(msg == 1) assert(log[1] == 4 and log[2] == 3 and log[3] == 2 and log[4] == 2 and #log == 4) + + -- error in toclose in vararg function + function foo (...) + local <toclose> x123 = 10 + end + + local st, msg = pcall(foo) + assert(string.find(msg, "'x123'")) + end