diff options
Diffstat (limited to '')
| -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 | ||
