aboutsummaryrefslogtreecommitdiff
path: root/lparser.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2017-06-27 08:35:31 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2017-06-27 08:35:31 -0300
commitb42430fd3a6200eaaf4020be90c4d47f7e251b67 (patch)
treec47c23ac9d461b79554986769375019dc6dc469c /lparser.c
parent60a7492d249860d20098ac2f0b9d863606c38450 (diff)
downloadlua-b42430fd3a6200eaaf4020be90c4d47f7e251b67.tar.gz
lua-b42430fd3a6200eaaf4020be90c4d47f7e251b67.tar.bz2
lua-b42430fd3a6200eaaf4020be90c4d47f7e251b67.zip
'lineinfo' in prototypes saved as differences instead of absolute
values, so that the array can use bytes instead of ints, reducing its size. (A new array 'abslineinfo' is used when line differences do not fit in a byte.)
Diffstat (limited to 'lparser.c')
-rw-r--r--lparser.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/lparser.c b/lparser.c
index 37f84cce..5e244e24 100644
--- a/lparser.c
+++ b/lparser.c
@@ -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
529static void open_func (LexState *ls, FuncState *fs, BlockCnt *bl) { 529static 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 *);