diff options
Diffstat (limited to 'lparser.c')
| -rw-r--r-- | lparser.c | 13 |
1 files changed, 9 insertions, 4 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lparser.c,v 2.158 2017/04/29 18:09:17 roberto Exp roberto $ | 2 | ** $Id: lparser.c,v 2.159 2017/05/13 12:57:20 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 | */ |
| @@ -527,22 +527,24 @@ static void codeclosure (LexState *ls, expdesc *v) { | |||
| 527 | 527 | ||
| 528 | 528 | ||
| 529 | static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) { | 529 | static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) { |
| 530 | Proto *f; | 530 | Proto *f = fs->f; |
| 531 | fs->prev = ls->fs; /* linked list of funcstates */ | 531 | fs->prev = ls->fs; /* linked list of funcstates */ |
| 532 | fs->ls = ls; | 532 | fs->ls = ls; |
| 533 | ls->fs = fs; | 533 | ls->fs = fs; |
| 534 | fs->pc = 0; | 534 | fs->pc = 0; |
| 535 | fs->previousline = f->linedefined; | ||
| 536 | fs->iwthabs = 0; | ||
| 535 | fs->lasttarget = 0; | 537 | fs->lasttarget = 0; |
| 536 | fs->jpc = NO_JUMP; | 538 | fs->jpc = NO_JUMP; |
| 537 | fs->freereg = 0; | 539 | fs->freereg = 0; |
| 538 | fs->nk = 0; | 540 | fs->nk = 0; |
| 541 | fs->nabslineinfo = 0; | ||
| 539 | fs->np = 0; | 542 | fs->np = 0; |
| 540 | fs->nups = 0; | 543 | fs->nups = 0; |
| 541 | fs->nlocvars = 0; | 544 | fs->nlocvars = 0; |
| 542 | fs->nactvar = 0; | 545 | fs->nactvar = 0; |
| 543 | fs->firstlocal = ls->dyd->actvar.n; | 546 | fs->firstlocal = ls->dyd->actvar.n; |
| 544 | fs->bl = NULL; | 547 | fs->bl = NULL; |
| 545 | f = fs->f; | ||
| 546 | f->source = ls->source; | 548 | f->source = ls->source; |
| 547 | f->maxstacksize = 2; /* registers 0/1 are always valid */ | 549 | f->maxstacksize = 2; /* registers 0/1 are always valid */ |
| 548 | enterblock(fs, bl, 0); | 550 | enterblock(fs, bl, 0); |
| @@ -557,8 +559,11 @@ static void close_func (LexState *ls) { | |||
| 557 | leaveblock(fs); | 559 | leaveblock(fs); |
| 558 | luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); | 560 | luaM_reallocvector(L, f->code, f->sizecode, fs->pc, Instruction); |
| 559 | f->sizecode = fs->pc; | 561 | f->sizecode = fs->pc; |
| 560 | luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, int); | 562 | luaM_reallocvector(L, f->lineinfo, f->sizelineinfo, fs->pc, ls_byte); |
| 561 | f->sizelineinfo = fs->pc; | 563 | f->sizelineinfo = fs->pc; |
| 564 | luaM_reallocvector(L, f->abslineinfo, f->sizeabslineinfo, | ||
| 565 | fs->nabslineinfo, AbsLineInfo); | ||
| 566 | f->sizeabslineinfo = fs->nabslineinfo; | ||
| 562 | luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); | 567 | luaM_reallocvector(L, f->k, f->sizek, fs->nk, TValue); |
| 563 | f->sizek = fs->nk; | 568 | f->sizek = fs->nk; |
| 564 | luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); | 569 | luaM_reallocvector(L, f->p, f->sizep, fs->np, Proto *); |
