diff options
Diffstat (limited to 'lparser.c')
-rw-r--r-- | lparser.c | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lparser.c,v 1.134 2001/02/14 17:38:45 roberto Exp roberto $ | 2 | ** $Id: lparser.c,v 1.135 2001/02/20 18:15:33 roberto Exp roberto $ |
3 | ** LL(1) Parser and code generator for Lua | 3 | ** LL(1) Parser and code generator for Lua |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -219,14 +219,14 @@ static void singlevar (LexState *ls, TString *n, expdesc *var) { | |||
219 | static int indexupvalue (LexState *ls, expdesc *v) { | 219 | static int indexupvalue (LexState *ls, expdesc *v) { |
220 | FuncState *fs = ls->fs; | 220 | FuncState *fs = ls->fs; |
221 | int i; | 221 | int i; |
222 | for (i=0; i<fs->nupvalues; i++) { | 222 | for (i=0; i<fs->f->nupvalues; i++) { |
223 | if (fs->upvalues[i].k == v->k && fs->upvalues[i].u.index == v->u.index) | 223 | if (fs->upvalues[i].k == v->k && fs->upvalues[i].u.index == v->u.index) |
224 | return i; | 224 | return i; |
225 | } | 225 | } |
226 | /* new one */ | 226 | /* new one */ |
227 | luaX_checklimit(ls, fs->nupvalues+1, MAXUPVALUES, "upvalues"); | 227 | luaX_checklimit(ls, fs->f->nupvalues+1, MAXUPVALUES, "upvalues"); |
228 | fs->upvalues[fs->nupvalues] = *v; | 228 | fs->upvalues[fs->f->nupvalues] = *v; |
229 | return fs->nupvalues++; | 229 | return fs->f->nupvalues++; |
230 | } | 230 | } |
231 | 231 | ||
232 | 232 | ||
@@ -297,12 +297,12 @@ static void pushclosure (LexState *ls, FuncState *func) { | |||
297 | FuncState *fs = ls->fs; | 297 | FuncState *fs = ls->fs; |
298 | Proto *f = fs->f; | 298 | Proto *f = fs->f; |
299 | int i; | 299 | int i; |
300 | for (i=0; i<func->nupvalues; i++) | 300 | for (i=0; i<func->f->nupvalues; i++) |
301 | luaK_tostack(ls, &func->upvalues[i], 1); | 301 | luaK_tostack(ls, &func->upvalues[i], 1); |
302 | luaM_growvector(ls->L, f->kproto, fs->nkproto, f->sizekproto, Proto *, | 302 | luaM_growvector(ls->L, f->kproto, fs->nkproto, f->sizekproto, Proto *, |
303 | MAXARG_A, "constant table overflow"); | 303 | MAXARG_A, "constant table overflow"); |
304 | f->kproto[fs->nkproto++] = func->f; | 304 | f->kproto[fs->nkproto++] = func->f; |
305 | luaK_code2(fs, OP_CLOSURE, fs->nkproto-1, func->nupvalues); | 305 | luaK_code2(fs, OP_CLOSURE, fs->nkproto-1, func->f->nupvalues); |
306 | } | 306 | } |
307 | 307 | ||
308 | 308 | ||
@@ -323,7 +323,6 @@ static void open_func (LexState *ls, FuncState *fs) { | |||
323 | fs->nlineinfo = 0; | 323 | fs->nlineinfo = 0; |
324 | fs->nlocvars = 0; | 324 | fs->nlocvars = 0; |
325 | fs->nactloc = 0; | 325 | fs->nactloc = 0; |
326 | fs->nupvalues = 0; | ||
327 | fs->lastline = 0; | 326 | fs->lastline = 0; |
328 | fs->bl = NULL; | 327 | fs->bl = NULL; |
329 | f->code = NULL; | 328 | f->code = NULL; |
@@ -370,7 +369,7 @@ Proto *luaY_parser (lua_State *L, ZIO *z) { | |||
370 | check_condition(&lexstate, (lexstate.t.token == TK_EOS), "<eof> expected"); | 369 | check_condition(&lexstate, (lexstate.t.token == TK_EOS), "<eof> expected"); |
371 | close_func(&lexstate); | 370 | close_func(&lexstate); |
372 | lua_assert(funcstate.prev == NULL); | 371 | lua_assert(funcstate.prev == NULL); |
373 | lua_assert(funcstate.nupvalues == 0); | 372 | lua_assert(funcstate.f->nupvalues == 0); |
374 | return funcstate.f; | 373 | return funcstate.f; |
375 | } | 374 | } |
376 | 375 | ||