diff options
| -rw-r--r-- | lparser.c | 14 |
1 files changed, 9 insertions, 5 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lparser.c,v 2.148 2015/10/28 17:28:40 roberto Exp roberto $ | 2 | ** $Id: lparser.c,v 2.149 2015/11/02 16:09:30 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 | */ |
| @@ -164,7 +164,8 @@ static int registerlocalvar (LexState *ls, TString *varname) { | |||
| 164 | int oldsize = f->sizelocvars; | 164 | int oldsize = f->sizelocvars; |
| 165 | luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, | 165 | luaM_growvector(ls->L, f->locvars, fs->nlocvars, f->sizelocvars, |
| 166 | LocVar, SHRT_MAX, "local variables"); | 166 | LocVar, SHRT_MAX, "local variables"); |
| 167 | while (oldsize < f->sizelocvars) f->locvars[oldsize++].varname = NULL; | 167 | while (oldsize < f->sizelocvars) |
| 168 | f->locvars[oldsize++].varname = NULL; | ||
| 168 | f->locvars[fs->nlocvars].varname = varname; | 169 | f->locvars[fs->nlocvars].varname = varname; |
| 169 | luaC_objbarrier(ls->L, f, varname); | 170 | luaC_objbarrier(ls->L, f, varname); |
| 170 | return fs->nlocvars++; | 171 | return fs->nlocvars++; |
| @@ -230,7 +231,8 @@ static int newupvalue (FuncState *fs, TString *name, expdesc *v) { | |||
| 230 | checklimit(fs, fs->nups + 1, MAXUPVAL, "upvalues"); | 231 | checklimit(fs, fs->nups + 1, MAXUPVAL, "upvalues"); |
| 231 | luaM_growvector(fs->ls->L, f->upvalues, fs->nups, f->sizeupvalues, | 232 | luaM_growvector(fs->ls->L, f->upvalues, fs->nups, f->sizeupvalues, |
| 232 | Upvaldesc, MAXUPVAL, "upvalues"); | 233 | Upvaldesc, MAXUPVAL, "upvalues"); |
| 233 | while (oldsize < f->sizeupvalues) f->upvalues[oldsize++].name = NULL; | 234 | while (oldsize < f->sizeupvalues) |
| 235 | f->upvalues[oldsize++].name = NULL; | ||
| 234 | f->upvalues[fs->nups].instack = (v->k == VLOCAL); | 236 | f->upvalues[fs->nups].instack = (v->k == VLOCAL); |
| 235 | f->upvalues[fs->nups].idx = cast_byte(v->u.info); | 237 | f->upvalues[fs->nups].idx = cast_byte(v->u.info); |
| 236 | f->upvalues[fs->nups].name = name; | 238 | f->upvalues[fs->nups].name = name; |
| @@ -255,7 +257,8 @@ static int searchvar (FuncState *fs, TString *n) { | |||
| 255 | */ | 257 | */ |
| 256 | static void markupval (FuncState *fs, int level) { | 258 | static void markupval (FuncState *fs, int level) { |
| 257 | BlockCnt *bl = fs->bl; | 259 | BlockCnt *bl = fs->bl; |
| 258 | while (bl->nactvar > level) bl = bl->previous; | 260 | while (bl->nactvar > level) |
| 261 | bl = bl->previous; | ||
| 259 | bl->upval = 1; | 262 | bl->upval = 1; |
| 260 | } | 263 | } |
| 261 | 264 | ||
| @@ -499,7 +502,8 @@ static Proto *addprototype (LexState *ls) { | |||
| 499 | if (fs->np >= f->sizep) { | 502 | if (fs->np >= f->sizep) { |
| 500 | int oldsize = f->sizep; | 503 | int oldsize = f->sizep; |
| 501 | luaM_growvector(L, f->p, fs->np, f->sizep, Proto *, MAXARG_Bx, "functions"); | 504 | luaM_growvector(L, f->p, fs->np, f->sizep, Proto *, MAXARG_Bx, "functions"); |
| 502 | while (oldsize < f->sizep) f->p[oldsize++] = NULL; | 505 | while (oldsize < f->sizep) |
| 506 | f->p[oldsize++] = NULL; | ||
| 503 | } | 507 | } |
| 504 | f->p[fs->np++] = clp = luaF_newproto(L); | 508 | f->p[fs->np++] = clp = luaF_newproto(L); |
| 505 | luaC_objbarrier(L, f, clp); | 509 | luaC_objbarrier(L, f, clp); |
