diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-03-25 14:47:14 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-03-25 14:47:14 -0300 |
commit | 801aaf37b14a1fad5bb49c9a4200d25680152471 (patch) | |
tree | e3cc5cdebac6d503091f4ba16444f8ecfa8dfdb2 /lcode.c | |
parent | 00af2faae71e6388ee61ef18b2c5902a42e9bc27 (diff) | |
download | lua-801aaf37b14a1fad5bb49c9a4200d25680152471.tar.gz lua-801aaf37b14a1fad5bb49c9a4200d25680152471.tar.bz2 lua-801aaf37b14a1fad5bb49c9a4200d25680152471.zip |
simpler implementation for line information
Diffstat (limited to 'lcode.c')
-rw-r--r-- | lcode.c | 27 |
1 files changed, 6 insertions, 21 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lcode.c,v 1.91 2002/03/08 19:10:32 roberto Exp roberto $ | 2 | ** $Id: lcode.c,v 1.92 2002/03/21 20:31:43 roberto Exp roberto $ |
3 | ** Code generator for Lua | 3 | ** Code generator for Lua |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -737,31 +737,16 @@ void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) { | |||
737 | } | 737 | } |
738 | 738 | ||
739 | 739 | ||
740 | static void codelineinfo (FuncState *fs) { | ||
741 | Proto *f = fs->f; | ||
742 | LexState *ls = fs->ls; | ||
743 | if (ls->lastline > fs->lastline) { | ||
744 | if (ls->lastline > fs->lastline+1) { | ||
745 | luaM_growvector(fs->L, f->lineinfo, fs->nlineinfo, f->sizelineinfo, int, | ||
746 | MAX_INT, "line info overflow"); | ||
747 | f->lineinfo[fs->nlineinfo++] = -(ls->lastline - (fs->lastline+1)); | ||
748 | } | ||
749 | luaM_growvector(fs->L, f->lineinfo, fs->nlineinfo, f->sizelineinfo, int, | ||
750 | MAX_INT, "line info overflow"); | ||
751 | f->lineinfo[fs->nlineinfo++] = fs->pc; | ||
752 | fs->lastline = ls->lastline; | ||
753 | } | ||
754 | } | ||
755 | |||
756 | |||
757 | static int luaK_code (FuncState *fs, Instruction i) { | 740 | static int luaK_code (FuncState *fs, Instruction i) { |
758 | Proto *f; | 741 | Proto *f = fs->f; |
759 | codelineinfo(fs); | 742 | int oldsize = f->sizecode; |
760 | f = fs->f; | ||
761 | /* put new instruction in code array */ | 743 | /* put new instruction in code array */ |
762 | luaM_growvector(fs->L, f->code, fs->pc, f->sizecode, Instruction, | 744 | luaM_growvector(fs->L, f->code, fs->pc, f->sizecode, Instruction, |
763 | MAX_INT, "code size overflow"); | 745 | MAX_INT, "code size overflow"); |
764 | f->code[fs->pc] = i; | 746 | f->code[fs->pc] = i; |
747 | if (f->sizecode != oldsize) | ||
748 | luaM_reallocvector(fs->L, f->lineinfo, oldsize, f->sizecode, int); | ||
749 | f->lineinfo[fs->pc] = fs->ls->lastline; | ||
765 | return fs->pc++; | 750 | return fs->pc++; |
766 | } | 751 | } |
767 | 752 | ||