diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-06-03 12:13:13 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2019-06-03 12:13:13 -0300 |
commit | 4a3fd8488d617aa633f6b8be85e662653b100a59 (patch) | |
tree | 1dcc7fa6a6cec21619cb833be6f4a89ccc95404f /lvm.c | |
parent | 2c68e66570206aa1496f9c76fcf2a1a0f550d692 (diff) | |
download | lua-4a3fd8488d617aa633f6b8be85e662653b100a59.tar.gz lua-4a3fd8488d617aa633f6b8be85e662653b100a59.tar.bz2 lua-4a3fd8488d617aa633f6b8be85e662653b100a59.zip |
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 (limited to 'lvm.c')
-rw-r--r-- | lvm.c | 2 |
1 files changed, 1 insertions, 1 deletions
@@ -1593,9 +1593,9 @@ void luaV_execute (lua_State *L, CallInfo *ci) { | |||
1593 | savepc(ci); | 1593 | savepc(ci); |
1594 | if (TESTARG_k(i)) { | 1594 | if (TESTARG_k(i)) { |
1595 | int nparams1 = GETARG_C(i); | 1595 | int nparams1 = GETARG_C(i); |
1596 | luaF_close(L, base, LUA_OK); /* there may be open upvalues */ | ||
1596 | if (nparams1) /* vararg function? */ | 1597 | if (nparams1) /* vararg function? */ |
1597 | ci->func -= ci->u.l.nextraargs + nparams1; | 1598 | ci->func -= ci->u.l.nextraargs + nparams1; |
1598 | luaF_close(L, base, LUA_OK); /* there may be open upvalues */ | ||
1599 | } | 1599 | } |
1600 | luaD_poscall(L, ci, n); | 1600 | luaD_poscall(L, ci, n); |
1601 | return; | 1601 | return; |