aboutsummaryrefslogtreecommitdiff
path: root/lparser.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2003-09-29 13:41:35 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2003-09-29 13:41:35 -0300
commit5d4bf35ec9f240fc82cd4e94a395c652b2ab004c (patch)
tree2cdee5ef31b38d6dca37dd871fcb8d21755fcc6b /lparser.c
parent6063c5c61f55d15ea4abb1eed05f597deaf4a9c3 (diff)
downloadlua-5d4bf35ec9f240fc82cd4e94a395c652b2ab004c.tar.gz
lua-5d4bf35ec9f240fc82cd4e94a395c652b2ab004c.tar.bz2
lua-5d4bf35ec9f240fc82cd4e94a395c652b2ab004c.zip
bug: syntax `local function' does not increment stack size
Diffstat (limited to 'lparser.c')
-rw-r--r--lparser.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/lparser.c b/lparser.c
index c551047a..a73fab43 100644
--- a/lparser.c
+++ b/lparser.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lparser.c,v 1.217 2003/08/27 21:01:44 roberto Exp roberto $ 2** $Id: lparser.c,v 1.218 2003/09/05 14:00:27 roberto Exp roberto $
3** Lua Parser 3** Lua Parser
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -1167,11 +1167,13 @@ static void ifstat (LexState *ls, int line) {
1167 1167
1168static void localfunc (LexState *ls) { 1168static void localfunc (LexState *ls) {
1169 expdesc v, b; 1169 expdesc v, b;
1170 FuncState *fs = ls->fs;
1170 new_localvar(ls, str_checkname(ls), 0); 1171 new_localvar(ls, str_checkname(ls), 0);
1171 init_exp(&v, VLOCAL, ls->fs->freereg++); 1172 init_exp(&v, VLOCAL, fs->freereg);
1173 luaK_reserveregs(fs, 1);
1172 adjustlocalvars(ls, 1); 1174 adjustlocalvars(ls, 1);
1173 body(ls, &b, 0, ls->linenumber); 1175 body(ls, &b, 0, ls->linenumber);
1174 luaK_storevar(ls->fs, &v, &b); 1176 luaK_storevar(fs, &v, &b);
1175} 1177}
1176 1178
1177 1179
@@ -1346,7 +1348,8 @@ static void chunk (LexState *ls) {
1346 while (!islast && !block_follow(ls->t.token)) { 1348 while (!islast && !block_follow(ls->t.token)) {
1347 islast = statement(ls); 1349 islast = statement(ls);
1348 testnext(ls, ';'); 1350 testnext(ls, ';');
1349 lua_assert(ls->fs->freereg >= ls->fs->nactvar); 1351 lua_assert(ls->fs->f->maxstacksize >= ls->fs->freereg &&
1352 ls->fs->freereg >= ls->fs->nactvar);
1350 ls->fs->freereg = ls->fs->nactvar; /* free registers */ 1353 ls->fs->freereg = ls->fs->nactvar; /* free registers */
1351 } 1354 }
1352 leavelevel(ls); 1355 leavelevel(ls);