diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-02-02 14:43:55 -0300 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2021-02-02 14:43:55 -0300 |
| commit | e500892e18e994781760819e33098322728796e8 (patch) | |
| tree | 0a954761f83effd9aaf4c650e7dfe6e0564e37e7 /lcode.c | |
| parent | 949187b049ce329c93d6639b91e244f2b208c807 (diff) | |
| download | lua-e500892e18e994781760819e33098322728796e8.tar.gz lua-e500892e18e994781760819e33098322728796e8.tar.bz2 lua-e500892e18e994781760819e33098322728796e8.zip | |
Optimization/simplification of 'getbaseline'
By producing absolute line information at regular intervals, a simple
division can compute the correct entry for a given instruction.
Diffstat (limited to 'lcode.c')
| -rw-r--r-- | lcode.c | 4 |
1 files changed, 2 insertions, 2 deletions
| @@ -328,13 +328,13 @@ void luaK_patchtohere (FuncState *fs, int list) { | |||
| 328 | static void savelineinfo (FuncState *fs, Proto *f, int line) { | 328 | static void savelineinfo (FuncState *fs, Proto *f, int line) { |
| 329 | int linedif = line - fs->previousline; | 329 | int linedif = line - fs->previousline; |
| 330 | int pc = fs->pc - 1; /* last instruction coded */ | 330 | int pc = fs->pc - 1; /* last instruction coded */ |
| 331 | if (abs(linedif) >= LIMLINEDIFF || fs->iwthabs++ > MAXIWTHABS) { | 331 | if (abs(linedif) >= LIMLINEDIFF || fs->iwthabs++ >= MAXIWTHABS) { |
| 332 | luaM_growvector(fs->ls->L, f->abslineinfo, fs->nabslineinfo, | 332 | luaM_growvector(fs->ls->L, f->abslineinfo, fs->nabslineinfo, |
| 333 | f->sizeabslineinfo, AbsLineInfo, MAX_INT, "lines"); | 333 | f->sizeabslineinfo, AbsLineInfo, MAX_INT, "lines"); |
| 334 | f->abslineinfo[fs->nabslineinfo].pc = pc; | 334 | f->abslineinfo[fs->nabslineinfo].pc = pc; |
| 335 | f->abslineinfo[fs->nabslineinfo++].line = line; | 335 | f->abslineinfo[fs->nabslineinfo++].line = line; |
| 336 | linedif = ABSLINEINFO; /* signal that there is absolute information */ | 336 | linedif = ABSLINEINFO; /* signal that there is absolute information */ |
| 337 | fs->iwthabs = 0; /* restart counter */ | 337 | fs->iwthabs = 1; /* restart counter */ |
| 338 | } | 338 | } |
| 339 | luaM_growvector(fs->ls->L, f->lineinfo, pc, f->sizelineinfo, ls_byte, | 339 | luaM_growvector(fs->ls->L, f->lineinfo, pc, f->sizelineinfo, ls_byte, |
| 340 | MAX_INT, "opcodes"); | 340 | MAX_INT, "opcodes"); |
