diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2003-02-11 08:46:24 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2003-02-11 08:46:24 -0200 |
| commit | 7a40cdbda0a171da223094208dd3c6e3eca13922 (patch) | |
| tree | c95840411ac26e11b0683d4a5fc88402c1d0a70a /lparser.c | |
| parent | 3cdeacbbfba9308dd2dcc995a9bcc510bfcead31 (diff) | |
| download | lua-7a40cdbda0a171da223094208dd3c6e3eca13922.tar.gz lua-7a40cdbda0a171da223094208dd3c6e3eca13922.tar.bz2 lua-7a40cdbda0a171da223094208dd3c6e3eca13922.zip | |
different variables for number of upvalues and size of upvalue array
(makes code clearer)
Diffstat (limited to 'lparser.c')
| -rw-r--r-- | lparser.c | 27 |
1 files changed, 12 insertions, 15 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lparser.c,v 1.202 2002/12/11 12:34:22 roberto Exp roberto $ | 2 | ** $Id: lparser.c,v 1.203 2002/12/19 11:11:55 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 | */ |
| @@ -181,19 +181,20 @@ static void create_local (LexState *ls, const char *name) { | |||
| 181 | 181 | ||
| 182 | static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { | 182 | static int indexupvalue (FuncState *fs, TString *name, expdesc *v) { |
| 183 | int i; | 183 | int i; |
| 184 | for (i=0; i<fs->nu; i++) { | 184 | Proto *f = fs->f; |
| 185 | for (i=0; i<f->nups; i++) { | ||
| 185 | if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->info) { | 186 | if (fs->upvalues[i].k == v->k && fs->upvalues[i].info == v->info) { |
| 186 | lua_assert(fs->f->upvalues[i] == name); | 187 | lua_assert(fs->f->upvalues[i] == name); |
| 187 | return i; | 188 | return i; |
| 188 | } | 189 | } |
| 189 | } | 190 | } |
| 190 | /* new one */ | 191 | /* new one */ |
| 191 | luaX_checklimit(fs->ls, fs->nu + 1, MAXUPVALUES, "upvalues"); | 192 | luaX_checklimit(fs->ls, f->nups + 1, MAXUPVALUES, "upvalues"); |
| 192 | luaM_growvector(fs->L, fs->f->upvalues, fs->nu, fs->f->nupvalues, | 193 | luaM_growvector(fs->L, fs->f->upvalues, f->nups, fs->f->sizeupvalues, |
| 193 | TString *, MAX_INT, ""); | 194 | TString *, MAX_INT, ""); |
| 194 | fs->f->upvalues[fs->nu] = name; | 195 | fs->f->upvalues[f->nups] = name; |
| 195 | fs->upvalues[fs->nu] = *v; | 196 | fs->upvalues[f->nups] = *v; |
| 196 | return fs->nu++; | 197 | return f->nups++; |
| 197 | } | 198 | } |
| 198 | 199 | ||
| 199 | 200 | ||
| @@ -307,7 +308,7 @@ static void pushclosure (LexState *ls, FuncState *func, expdesc *v) { | |||
| 307 | MAXARG_Bx, "constant table overflow"); | 308 | MAXARG_Bx, "constant table overflow"); |
| 308 | f->p[fs->np++] = func->f; | 309 | f->p[fs->np++] = func->f; |
| 309 | init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); | 310 | init_exp(v, VRELOCABLE, luaK_codeABx(fs, OP_CLOSURE, 0, fs->np-1)); |
| 310 | for (i=0; i<func->nu; i++) { | 311 | for (i=0; i<func->f->nups; i++) { |
| 311 | OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; | 312 | OpCode o = (func->upvalues[i].k == VLOCAL) ? OP_MOVE : OP_GETUPVAL; |
| 312 | luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); | 313 | luaK_codeABC(fs, o, 0, func->upvalues[i].info, 0); |
| 313 | } | 314 | } |
| @@ -326,17 +327,13 @@ static void open_func (LexState *ls, FuncState *fs) { | |||
| 326 | fs->jpc = NO_JUMP; | 327 | fs->jpc = NO_JUMP; |
| 327 | fs->freereg = 0; | 328 | fs->freereg = 0; |
| 328 | fs->nk = 0; | 329 | fs->nk = 0; |
| 329 | fs->nu = 0; | ||
| 330 | fs->h = luaH_new(ls->L, 0, 0); | 330 | fs->h = luaH_new(ls->L, 0, 0); |
| 331 | fs->np = 0; | 331 | fs->np = 0; |
| 332 | fs->nlocvars = 0; | 332 | fs->nlocvars = 0; |
| 333 | fs->nactvar = 0; | 333 | fs->nactvar = 0; |
| 334 | fs->bl = NULL; | 334 | fs->bl = NULL; |
| 335 | f->code = NULL; | ||
| 336 | f->source = ls->source; | 335 | f->source = ls->source; |
| 337 | f->maxstacksize = 2; /* registers 0/1 are always valid */ | 336 | f->maxstacksize = 2; /* registers 0/1 are always valid */ |
| 338 | f->numparams = 0; /* default for main chunk */ | ||
| 339 | f->is_vararg = 0; /* default for main chunk */ | ||
| 340 | } | 337 | } |
| 341 | 338 | ||
| 342 | 339 | ||
| @@ -356,8 +353,8 @@ static void close_func (LexState *ls) { | |||
| 356 | f->sizep = fs->np; | 353 | f->sizep = fs->np; |
| 357 | luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); | 354 | luaM_reallocvector(L, f->locvars, f->sizelocvars, fs->nlocvars, LocVar); |
| 358 | f->sizelocvars = fs->nlocvars; | 355 | f->sizelocvars = fs->nlocvars; |
| 359 | luaM_reallocvector(L, f->upvalues, f->nupvalues, fs->nu, TString *); | 356 | luaM_reallocvector(L, f->upvalues, f->sizeupvalues, f->nups, TString *); |
| 360 | f->nupvalues = fs->nu; | 357 | f->sizeupvalues = f->nups; |
| 361 | lua_assert(luaG_checkcode(f)); | 358 | lua_assert(luaG_checkcode(f)); |
| 362 | lua_assert(fs->bl == NULL); | 359 | lua_assert(fs->bl == NULL); |
| 363 | ls->fs = fs->prev; | 360 | ls->fs = fs->prev; |
| @@ -376,7 +373,7 @@ Proto *luaY_parser (lua_State *L, ZIO *z, Mbuffer *buff) { | |||
| 376 | check_condition(&lexstate, (lexstate.t.token == TK_EOS), "<eof> expected"); | 373 | check_condition(&lexstate, (lexstate.t.token == TK_EOS), "<eof> expected"); |
| 377 | close_func(&lexstate); | 374 | close_func(&lexstate); |
| 378 | lua_assert(funcstate.prev == NULL); | 375 | lua_assert(funcstate.prev == NULL); |
| 379 | lua_assert(funcstate.nu == 0); | 376 | lua_assert(funcstate.f->nups == 0); |
| 380 | lua_assert(lexstate.nestlevel == 0); | 377 | lua_assert(lexstate.nestlevel == 0); |
| 381 | return funcstate.f; | 378 | return funcstate.f; |
| 382 | } | 379 | } |
