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 | ||
