aboutsummaryrefslogtreecommitdiff
path: root/lcode.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-02-02 14:43:55 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-02-02 14:43:55 -0300
commite500892e18e994781760819e33098322728796e8 (patch)
tree0a954761f83effd9aaf4c650e7dfe6e0564e37e7 /lcode.c
parent949187b049ce329c93d6639b91e244f2b208c807 (diff)
downloadlua-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.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lcode.c b/lcode.c
index 9741d7cd..31f23f47 100644
--- a/lcode.c
+++ b/lcode.c
@@ -328,13 +328,13 @@ void luaK_patchtohere (FuncState *fs, int list) {
328static void savelineinfo (FuncState *fs, Proto *f, int line) { 328static 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");