aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2012-08-16 14:34:28 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2012-08-16 14:34:28 -0300
commita3e1c40d6d6fb81db9d8b58aee69466f715aab5c (patch)
treeea11a028d8d92772ad97879c7bc5bbe50318bbea
parentc1a2a646c81000b03a243cbdeba9c4bd6dd7b474 (diff)
downloadlua-a3e1c40d6d6fb81db9d8b58aee69466f715aab5c.tar.gz
lua-a3e1c40d6d6fb81db9d8b58aee69466f715aab5c.tar.bz2
lua-a3e1c40d6d6fb81db9d8b58aee69466f715aab5c.zip
remove of unecessary luaD_checkstack. (In some cases, C should
ensure stack space; in others, Lua can use the extra slots for temporary values.)
-rw-r--r--lcode.c9
-rw-r--r--ldebug.c10
-rw-r--r--lobject.c16
-rw-r--r--ltests.c4
-rw-r--r--lvm.c3
5 files changed, 19 insertions, 23 deletions
diff --git a/lcode.c b/lcode.c
index 3c39d0ce..16f5702a 100644
--- a/lcode.c
+++ b/lcode.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lcode.c,v 2.60 2011/08/30 16:26:41 roberto Exp roberto $ 2** $Id: lcode.c,v 2.61 2012/08/14 18:12:34 roberto Exp roberto $
3** Code generator for Lua 3** Code generator for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -330,10 +330,9 @@ int luaK_numberK (FuncState *fs, lua_Number r) {
330 setnvalue(&o, r); 330 setnvalue(&o, r);
331 if (r == 0 || luai_numisnan(NULL, r)) { /* handle -0 and NaN */ 331 if (r == 0 || luai_numisnan(NULL, r)) { /* handle -0 and NaN */
332 /* use raw representation as key to avoid numeric problems */ 332 /* use raw representation as key to avoid numeric problems */
333 setsvalue(L, L->top, luaS_newlstr(L, (char *)&r, sizeof(r))); 333 setsvalue(L, L->top++, luaS_newlstr(L, (char *)&r, sizeof(r)));
334 incr_top(L); 334 n = addk(fs, L->top - 1, &o);
335 n = addk(fs, L->top - 1, &o); 335 L->top--;
336 L->top--;
337 } 336 }
338 else 337 else
339 n = addk(fs, &o, &o); /* regular case */ 338 n = addk(fs, &o, &o); /* regular case */
diff --git a/ldebug.c b/ldebug.c
index 431acc1f..5624be1d 100644
--- a/ldebug.c
+++ b/ldebug.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldebug.c,v 2.88 2011/11/30 12:43:51 roberto Exp roberto $ 2** $Id: ldebug.c,v 2.89 2012/01/20 22:05:50 roberto Exp roberto $
3** Debug Interface 3** Debug Interface
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -196,7 +196,7 @@ static void funcinfo (lua_Debug *ar, Closure *cl) {
196static void collectvalidlines (lua_State *L, Closure *f) { 196static void collectvalidlines (lua_State *L, Closure *f) {
197 if (noLuaClosure(f)) { 197 if (noLuaClosure(f)) {
198 setnilvalue(L->top); 198 setnilvalue(L->top);
199 incr_top(L); 199 api_incr_top(L);
200 } 200 }
201 else { 201 else {
202 int i; 202 int i;
@@ -204,7 +204,7 @@ static void collectvalidlines (lua_State *L, Closure *f) {
204 int *lineinfo = f->l.p->lineinfo; 204 int *lineinfo = f->l.p->lineinfo;
205 Table *t = luaH_new(L); /* new table to store active lines */ 205 Table *t = luaH_new(L); /* new table to store active lines */
206 sethvalue(L, L->top, t); /* push it on stack */ 206 sethvalue(L, L->top, t); /* push it on stack */
207 incr_top(L); 207 api_incr_top(L);
208 setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */ 208 setbvalue(&v, 1); /* boolean 'true' to be the value of all indices */
209 for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */ 209 for (i = 0; i < f->l.p->sizelineinfo; i++) /* for all lines with code */
210 luaH_setint(L, t, lineinfo[i], &v); /* table[line] = true */ 210 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) {
285 status = auxgetinfo(L, what, ar, cl, ci); 285 status = auxgetinfo(L, what, ar, cl, ci);
286 if (strchr(what, 'f')) { 286 if (strchr(what, 'f')) {
287 setobjs2s(L, L->top, func); 287 setobjs2s(L, L->top, func);
288 incr_top(L); 288 api_incr_top(L);
289 } 289 }
290 if (strchr(what, 'L')) 290 if (strchr(what, 'L'))
291 collectvalidlines(L, cl); 291 collectvalidlines(L, cl);
@@ -563,7 +563,7 @@ l_noret luaG_errormsg (lua_State *L) {
563 if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR); 563 if (!ttisfunction(errfunc)) luaD_throw(L, LUA_ERRERR);
564 setobjs2s(L, L->top, L->top - 1); /* move argument */ 564 setobjs2s(L, L->top, L->top - 1); /* move argument */
565 setobjs2s(L, L->top - 1, errfunc); /* push function */ 565 setobjs2s(L, L->top - 1, errfunc); /* push function */
566 incr_top(L); 566 L->top++;
567 luaD_call(L, L->top - 2, 1, 0); /* call it */ 567 luaD_call(L, L->top - 2, 1, 0); /* call it */
568 } 568 }
569 luaD_throw(L, LUA_ERRRUN); 569 luaD_throw(L, LUA_ERRRUN);
diff --git a/lobject.c b/lobject.c
index 86b3097e..11be7ad9 100644
--- a/lobject.c
+++ b/lobject.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lobject.c,v 2.54 2011/11/30 12:44:26 roberto Exp roberto $ 2** $Id: lobject.c,v 2.55 2011/11/30 19:30:16 roberto Exp roberto $
3** Some generic functions over Lua objects 3** Some generic functions over Lua objects
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -171,8 +171,7 @@ int luaO_str2d (const char *s, size_t len, lua_Number *result) {
171 171
172 172
173static void pushstr (lua_State *L, const char *str, size_t l) { 173static void pushstr (lua_State *L, const char *str, size_t l) {
174 setsvalue2s(L, L->top, luaS_newlstr(L, str, l)); 174 setsvalue2s(L, L->top++, luaS_newlstr(L, str, l));
175 incr_top(L);
176} 175}
177 176
178 177
@@ -182,8 +181,8 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
182 for (;;) { 181 for (;;) {
183 const char *e = strchr(fmt, '%'); 182 const char *e = strchr(fmt, '%');
184 if (e == NULL) break; 183 if (e == NULL) break;
185 setsvalue2s(L, L->top, luaS_newlstr(L, fmt, e-fmt)); 184 luaD_checkstack(L, 2); /* fmt + item */
186 incr_top(L); 185 pushstr(L, fmt, e - fmt);
187 switch (*(e+1)) { 186 switch (*(e+1)) {
188 case 's': { 187 case 's': {
189 const char *s = va_arg(argp, char *); 188 const char *s = va_arg(argp, char *);
@@ -198,13 +197,11 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
198 break; 197 break;
199 } 198 }
200 case 'd': { 199 case 'd': {
201 setnvalue(L->top, cast_num(va_arg(argp, int))); 200 setnvalue(L->top++, cast_num(va_arg(argp, int)));
202 incr_top(L);
203 break; 201 break;
204 } 202 }
205 case 'f': { 203 case 'f': {
206 setnvalue(L->top, cast_num(va_arg(argp, l_uacNumber))); 204 setnvalue(L->top++, cast_num(va_arg(argp, l_uacNumber)));
207 incr_top(L);
208 break; 205 break;
209 } 206 }
210 case 'p': { 207 case 'p': {
@@ -226,6 +223,7 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
226 n += 2; 223 n += 2;
227 fmt = e+2; 224 fmt = e+2;
228 } 225 }
226 luaD_checkstack(L, 1);
229 pushstr(L, fmt, strlen(fmt)); 227 pushstr(L, fmt, strlen(fmt));
230 if (n > 0) luaV_concat(L, n + 1); 228 if (n > 0) luaV_concat(L, n + 1);
231 return svalue(L->top - 1); 229 return svalue(L->top - 1);
diff --git a/ltests.c b/ltests.c
index 610af463..1bbeac1c 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltests.c,v 2.131 2012/07/02 15:38:36 roberto Exp roberto $ 2** $Id: ltests.c,v 2.132 2012/07/04 15:52:38 roberto Exp roberto $
3** Internal Module for Debugging of the Lua Implementation 3** Internal Module for Debugging of the Lua Implementation
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -753,7 +753,7 @@ static int string_query (lua_State *L) {
753 int n = 0; 753 int n = 0;
754 for (ts = tb->hash[s]; ts; ts = gch(ts)->next) { 754 for (ts = tb->hash[s]; ts; ts = gch(ts)->next) {
755 setsvalue2s(L, L->top, rawgco2ts(ts)); 755 setsvalue2s(L, L->top, rawgco2ts(ts));
756 incr_top(L); 756 api_incr_top(L);
757 n++; 757 n++;
758 } 758 }
759 return n; 759 return n;
diff --git a/lvm.c b/lvm.c
index 8657ebbe..db8c93ba 100644
--- a/lvm.c
+++ b/lvm.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lvm.c,v 2.152 2012/06/08 15:14:04 roberto Exp roberto $ 2** $Id: lvm.c,v 2.153 2012/08/14 18:12:34 roberto Exp roberto $
3** Lua virtual machine 3** Lua virtual machine
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -98,7 +98,6 @@ static void callTM (lua_State *L, const TValue *f, const TValue *p1,
98 setobj2s(L, L->top++, p2); /* 2nd argument */ 98 setobj2s(L, L->top++, p2); /* 2nd argument */
99 if (!hasres) /* no result? 'p3' is third argument */ 99 if (!hasres) /* no result? 'p3' is third argument */
100 setobj2s(L, L->top++, p3); /* 3rd argument */ 100 setobj2s(L, L->top++, p3); /* 3rd argument */
101 luaD_checkstack(L, 0);
102 /* metamethod may yield only when called from Lua code */ 101 /* metamethod may yield only when called from Lua code */
103 luaD_call(L, L->top - (4 - hasres), hasres, isLua(L->ci)); 102 luaD_call(L, L->top - (4 - hasres), hasres, isLua(L->ci));
104 if (hasres) { /* if has result, move it to its place */ 103 if (hasres) { /* if has result, move it to its place */