|
@@ -1,5 +1,5 @@
|
|
/*
|
|
/*
|
|
-** $Id: lapi.c,v 2.255 2015/09/09 13:45:50 roberto Exp roberto $
|
|
|
|
|
|
+** $Id: lapi.c,v 2.256 2015/10/06 16:10:22 roberto Exp roberto $
|
|
** Lua API
|
|
** Lua API
|
|
** See Copyright Notice in lua.h
|
|
** See Copyright Notice in lua.h
|
|
*/
|
|
*/
|
|
@@ -121,11 +121,11 @@ LUA_API void lua_xmove (lua_State *from, lua_State *to, int n) {
|
|
lua_lock(to);
|
|
lua_lock(to);
|
|
api_checknelems(from, n);
|
|
api_checknelems(from, n);
|
|
api_check(from, G(from) == G(to), "moving among independent states");
|
|
api_check(from, G(from) == G(to), "moving among independent states");
|
|
- api_check(from, to->ci->top - to->top >= n, "not enough elements to move");
|
|
|
|
|
|
+ api_check(from, to->ci->top - to->top >= n, "stack overflow");
|
|
from->top -= n;
|
|
from->top -= n;
|
|
for (i = 0; i < n; i++) {
|
|
for (i = 0; i < n; i++) {
|
|
setobj2s(to, to->top, from->top + i);
|
|
setobj2s(to, to->top, from->top + i);
|
|
- api_incr_top(to);
|
|
|
|
|
|
+ to->top++; /* stack already checked by previous 'api_check' */
|
|
}
|
|
}
|
|
lua_unlock(to);
|
|
lua_unlock(to);
|
|
}
|
|
}
|
|
@@ -918,10 +918,10 @@ LUA_API void lua_callk (lua_State *L, int nargs, int nresults,
|
|
if (k != NULL && L->nny == 0) { /* need to prepare continuation? */
|
|
if (k != NULL && L->nny == 0) { /* need to prepare continuation? */
|
|
L->ci->u.c.k = k; /* save continuation */
|
|
L->ci->u.c.k = k; /* save continuation */
|
|
L->ci->u.c.ctx = ctx; /* save context */
|
|
L->ci->u.c.ctx = ctx; /* save context */
|
|
- luaD_call(L, func, nresults, 1); /* do the call */
|
|
|
|
|
|
+ luaD_call(L, func, nresults); /* do the call */
|
|
}
|
|
}
|
|
else /* no continuation or no yieldable */
|
|
else /* no continuation or no yieldable */
|
|
- luaD_call(L, func, nresults, 0); /* just do the call */
|
|
|
|
|
|
+ luaD_callnoyield(L, func, nresults); /* just do the call */
|
|
adjustresults(L, nresults);
|
|
adjustresults(L, nresults);
|
|
lua_unlock(L);
|
|
lua_unlock(L);
|
|
}
|
|
}
|
|
@@ -939,7 +939,7 @@ struct CallS { /* data to 'f_call' */
|
|
|
|
|
|
static void f_call (lua_State *L, void *ud) {
|
|
static void f_call (lua_State *L, void *ud) {
|
|
struct CallS *c = cast(struct CallS *, ud);
|
|
struct CallS *c = cast(struct CallS *, ud);
|
|
- luaD_call(L, c->func, c->nresults, 0);
|
|
|
|
|
|
+ luaD_callnoyield(L, c->func, c->nresults);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -977,7 +977,7 @@ LUA_API int lua_pcallk (lua_State *L, int nargs, int nresults, int errfunc,
|
|
L->errfunc = func;
|
|
L->errfunc = func;
|
|
setoah(ci->callstatus, L->allowhook); /* save value of 'allowhook' */
|
|
setoah(ci->callstatus, L->allowhook); /* save value of 'allowhook' */
|
|
ci->callstatus |= CIST_YPCALL; /* function can do error recovery */
|
|
ci->callstatus |= CIST_YPCALL; /* function can do error recovery */
|
|
- luaD_call(L, c.func, nresults, 1); /* do the call */
|
|
|
|
|
|
+ luaD_call(L, c.func, nresults); /* do the call */
|
|
ci->callstatus &= ~CIST_YPCALL;
|
|
ci->callstatus &= ~CIST_YPCALL;
|
|
L->errfunc = ci->u.c.old_errfunc;
|
|
L->errfunc = ci->u.c.old_errfunc;
|
|
status = LUA_OK; /* if it is here, there were no errors */
|
|
status = LUA_OK; /* if it is here, there were no errors */
|