Fixed wrong error message in 'return math.seed(0)'

Bug introduced in commit 28d829c8: OP_TAILCALL might raise an
error without saving 'pc'. (This commit also fixes a detail in
'testes/uf8.lua'.)
This commit is contained in:
Roberto Ierusalimschy
2019-04-04 16:31:24 -03:00
parent 5ca1075b71
commit 8004798b03
3 changed files with 11 additions and 5 deletions

10
lvm.c
View File

@@ -1556,20 +1556,22 @@ void luaV_execute (lua_State *L, CallInfo *ci) {
L->top = ra + b;
else /* previous instruction set top */
b = cast_int(L->top - ra);
savepc(ci); /* some calls here can raise errors */
if (TESTARG_k(i)) {
int nparams1 = GETARG_C(i);
if (nparams1) /* vararg function? */
delta = ci->u.l.nextraargs + nparams1;
/* close upvalues from current call */
luaF_close(L, base, LUA_OK);
updatestack(ci);
/* close upvalues from current call; the compiler ensures
that there are no to-be-closed variables here */
luaF_close(L, base, NOCLOSINGMETH);
}
if (!ttisfunction(s2v(ra))) { /* not a function? */
luaD_tryfuncTM(L, ra); /* try '__call' metamethod */
b++; /* there is now one extra argument */
}
if (!ttisLclosure(s2v(ra))) { /* C function? */
ProtectNT(luaD_call(L, ra, LUA_MULTRET)); /* call it */
luaD_call(L, ra, LUA_MULTRET); /* call it */
updatetrap(ci);
updatestack(ci); /* stack may have been relocated */
ci->func -= delta;
luaD_poscall(L, ci, cast_int(L->top - ra));