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 *); |