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 | } |