remove of unecessary luaD_checkstack. (In some cases, C should

ensure stack space; in others, Lua can use the extra slots for
temporary values.)
This commit is contained in:
Roberto Ierusalimschy 2012-08-16 14:34:28 -03:00
parent c1a2a646c8
commit a3e1c40d6d
5 changed files with 19 additions and 23 deletions

View File

@ -1,5 +1,5 @@
/*
** $Id: lcode.c,v 2.60 2011/08/30 16:26:41 roberto Exp roberto $
** $Id: lcode.c,v 2.61 2012/08/14 18:12:34 roberto Exp roberto $
** Code generator for Lua
** See Copyright Notice in lua.h
*/
@ -330,10 +330,9 @@ int luaK_numberK (FuncState *fs, lua_Number r) {
setnvalue(&o, r);
if (r == 0 || luai_numisnan(NULL, r)) { /* handle -0 and NaN */
/* use raw representation as key to avoid numeric problems */
setsvalue(L, L->top, luaS_newlstr(L, (char *)&r, sizeof(r)));
incr_top(L);
n = addk(fs, L->top - 1, &o);
L->top--;
setsvalue(L, L->top++, luaS_newlstr(L, (char *)&r, sizeof(r)));
n = addk(fs, L->top - 1, &o);
L->top--;
}
else
n = addk(fs, &o, &o); /* regular case */

View File

@ -1,5 +1,5 @@
/*
** $Id: ldebug.c,v 2.88 2011/11/30 12:43:51 roberto Exp roberto $
** $Id: ldebug.c,v 2.89 2012/01/20 22:05:50 roberto Exp roberto $
** Debug Interface
** See Copyright Notice in lua.h
*/
@ -196,7 +196,7 @@ static void funcinfo (lua_Debug *ar, Closure *cl) {
static void collectvalidlines (lua_State *L, Closure *f) {
if (noLuaClosure(f)) {
setnilvalue(L->top);
incr_top(L);
api_incr_top(L);
}
else {
int i;
@ -204,7 +204,7 @@ static void collectvalidlines (lua_State *L, Closure *f) {
int *lineinfo = f->l.p->lineinfo;
Table *t = luaH_new(L); /* new table to store active lines */
sethvalue(L, L->top, t); /* push it on stack */
incr_top(L);
api_incr_top(L);
setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */
for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */
luaH_setint(L, t, lineinfo[i], &v); /* table[line] = true */
@ -285,7 +285,7 @@ LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar) {
status = auxgetinfo(L, what, ar, cl, ci);
if (strchr(what, 'f')) {
setobjs2s(L, L->top, func);
incr_top(L);
api_incr_top(L);
}
if (strchr(what, 'L'))
collectvalidlines(L, cl);
@ -563,7 +563,7 @@ l_noret luaG_errormsg (lua_State *L) {
if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR);
setobjs2s(L, L->top, L->top - 1); /* move argument */
setobjs2s(L, L->top - 1, errfunc); /* push function */
incr_top(L);
L->top++;
luaD_call(L, L->top - 2, 1, 0); /* call it */
}
luaD_throw(L, LUA_ERRRUN);

View File

@ -1,5 +1,5 @@
/*
** $Id: lobject.c,v 2.54 2011/11/30 12:44:26 roberto Exp roberto $
** $Id: lobject.c,v 2.55 2011/11/30 19:30:16 roberto Exp roberto $
** Some generic functions over Lua objects
** See Copyright Notice in lua.h
*/
@ -171,8 +171,7 @@ int luaO_str2d (const char *s, size_t len, lua_Number *result) {
static void pushstr (lua_State *L, const char *str, size_t l) {
setsvalue2s(L, L->top, luaS_newlstr(L, str, l));
incr_top(L);
setsvalue2s(L, L->top++, luaS_newlstr(L, str, l));
}
@ -182,8 +181,8 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
for (;;) {
const char *e = strchr(fmt, '%');
if (e == NULL) break;
setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt));
incr_top(L);
luaD_checkstack(L, 2); /* fmt + item */
pushstr(L, fmt, e - fmt);
switch (*(e+1)) {
case 's': {
const char *s = va_arg(argp, char *);
@ -198,13 +197,11 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
break;
}
case 'd': {
setnvalue(L->top, cast_num(va_arg(argp, int)));
incr_top(L);
setnvalue(L->top++, cast_num(va_arg(argp, int)));
break;
}
case 'f': {
setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber)));
incr_top(L);
setnvalue(L->top++, cast_num(va_arg(argp, l_uacNumber)));
break;
}
case 'p': {
@ -226,6 +223,7 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
n += 2;
fmt = e+2;
}
luaD_checkstack(L, 1);
pushstr(L, fmt, strlen(fmt));
if (n > 0) luaV_concat(L, n + 1);
return svalue(L->top - 1);

View File

@ -1,5 +1,5 @@
/*
** $Id: ltests.c,v 2.131 2012/07/02 15:38:36 roberto Exp roberto $
** $Id: ltests.c,v 2.132 2012/07/04 15:52:38 roberto Exp roberto $
** Internal Module for Debugging of the Lua Implementation
** See Copyright Notice in lua.h
*/
@ -753,7 +753,7 @@ static int string_query (lua_State *L) {
int n = 0;
for (ts = tb->hash[s]; ts; ts = gch(ts)->next) {
setsvalue2s(L, L->top, rawgco2ts(ts));
incr_top(L);
api_incr_top(L);
n++;
}
return n;

3
lvm.c
View File

@ -1,5 +1,5 @@
/*
** $Id: lvm.c,v 2.152 2012/06/08 15:14:04 roberto Exp roberto $
** $Id: lvm.c,v 2.153 2012/08/14 18:12:34 roberto Exp roberto $
** Lua virtual machine
** See Copyright Notice in lua.h
*/
@ -98,7 +98,6 @@ static void callTM (lua_State *L, const TValue *f, const TValue *p1,
setobj2s(L, L->top++, p2); /* 2nd argument */
if (!hasres) /* no result? 'p3' is third argument */
setobj2s(L, L->top++, p3); /* 3rd argument */
luaD_checkstack(L, 0);
/* metamethod may yield only when called from Lua code */
luaD_call(L, L->top - (4 - hasres), hasres, isLua(L->ci));
if (hasres) { /* if has result, move it to its place */