From f90bc248b3c3c18941a96038b2a7517ad571d8b1 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 8 Aug 2000 15:26:05 -0300 Subject: new structure for line information --- lcode.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'lcode.c') diff --git a/lcode.c b/lcode.c index fd7c6683..2a47daee 100644 --- a/lcode.c +++ b/lcode.c @@ -1,5 +1,5 @@ /* -** $Id: lcode.c,v 1.41 2000/06/30 14:35:17 roberto Exp roberto $ +** $Id: lcode.c,v 1.42 2000/08/04 19:38:35 roberto Exp roberto $ ** Code generator for Lua ** See Copyright Notice in lua.h */ @@ -413,6 +413,19 @@ void luaK_posfix (LexState *ls, int op, expdesc *v1, expdesc *v2) { } +static void codelineinfo (FuncState *fs) { + LexState *ls = fs->ls; + if (ls->lastline > fs->lastline) { + luaM_growvector(fs->L, fs->f->lineinfo, fs->nlineinfo, 2, int, + "line info overflow", MAX_INT); + if (ls->lastline > fs->lastline+1) + fs->f->lineinfo[fs->nlineinfo++] = -(ls->lastline - (fs->lastline+1)); + fs->f->lineinfo[fs->nlineinfo++] = fs->pc; + fs->lastline = ls->lastline; + } +} + + int luaK_code0 (FuncState *fs, OpCode o) { return luaK_code2(fs, o, 0, 0); } @@ -618,12 +631,8 @@ int luaK_code2 (FuncState *fs, OpCode o, int arg1, int arg2) { case iS: i = CREATE_S(o, arg1); break; case iAB: i = CREATE_AB(o, arg1, arg2); break; } - if (fs->debug) { - LexState *ls = fs->ls; - luaM_growvector(fs->L, fs->f->lines, fs->pc, 1, int, - "code size overflow", MAX_INT); - fs->f->lines[fs->pc] = ls->lastline; - } + if (fs->debug) + codelineinfo(fs); /* put new instruction in code array */ luaM_growvector(fs->L, fs->f->code, fs->pc, 1, Instruction, "code size overflow", MAX_INT); -- cgit v1.2.3-55-g6feb