mirror of https://github.com/rusefi/lua.git
more specific test to avoid calling luaF_close when function returns
This commit is contained in:
parent
f94cd2201c
commit
4376c9bc5f
6
lvm.c
6
lvm.c
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
** $Id: lvm.c,v 2.75 2008/08/13 17:02:42 roberto Exp roberto $
|
** $Id: lvm.c,v 2.76 2008/08/26 13:27:42 roberto Exp roberto $
|
||||||
** Lua virtual machine
|
** Lua virtual machine
|
||||||
** See Copyright Notice in lua.h
|
** See Copyright Notice in lua.h
|
||||||
*/
|
*/
|
||||||
|
@ -622,7 +622,7 @@ void luaV_execute (lua_State *L) {
|
||||||
int aux;
|
int aux;
|
||||||
StkId func = ci->func;
|
StkId func = ci->func;
|
||||||
StkId pfunc = (ci+1)->func; /* previous function index */
|
StkId pfunc = (ci+1)->func; /* previous function index */
|
||||||
if (L->openupval) luaF_close(L, ci->base);
|
if (cl->p->sizep > 0) luaF_close(L, ci->base);
|
||||||
L->base = ci->base = ci->func + ((ci+1)->base - pfunc);
|
L->base = ci->base = ci->func + ((ci+1)->base - pfunc);
|
||||||
for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */
|
for (aux = 0; pfunc+aux < L->top; aux++) /* move frame down */
|
||||||
setobjs2s(L, func+aux, pfunc+aux);
|
setobjs2s(L, func+aux, pfunc+aux);
|
||||||
|
@ -637,7 +637,7 @@ void luaV_execute (lua_State *L) {
|
||||||
case OP_RETURN: {
|
case OP_RETURN: {
|
||||||
int b = GETARG_B(i);
|
int b = GETARG_B(i);
|
||||||
if (b != 0) L->top = ra+b-1;
|
if (b != 0) L->top = ra+b-1;
|
||||||
if (L->openupval) luaF_close(L, base);
|
if (cl->p->sizep > 0) luaF_close(L, base);
|
||||||
b = luaD_poscall(L, ra);
|
b = luaD_poscall(L, ra);
|
||||||
if (!((L->ci + 1)->callstatus & CIST_REENTRY))
|
if (!((L->ci + 1)->callstatus & CIST_REENTRY))
|
||||||
return; /* external invocation: return */
|
return; /* external invocation: return */
|
||||||
|
|
Loading…
Reference in New Issue