aboutsummaryrefslogtreecommitdiff
path: root/lcode.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2024-08-17 12:37:04 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2024-08-17 12:37:04 -0300
commit782ef85b22f89d1cd1ab083202f018668d26e4b0 (patch)
tree74eb4ee9e4052febe4703c9fce7df4c013cb69b3 /lcode.c
parent30982bec968fd34694b5be3ecbbc92de78d8eacb (diff)
downloadlua-782ef85b22f89d1cd1ab083202f018668d26e4b0.tar.gz
lua-782ef85b22f89d1cd1ab083202f018668d26e4b0.tar.bz2
lua-782ef85b22f89d1cd1ab083202f018668d26e4b0.zip
Bug: wrong code gen. for indices with comparisons
In function 'luaK_exp2val', used to generate code for indices: Macro 'hasjumps' does not consider the case when the whole expression is a "jump" (a test). In all other of its uses, the surrounding code ensures that the expression cannot be VJMP.
Diffstat (limited to 'lcode.c')
-rw-r--r--lcode.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/lcode.c b/lcode.c
index 87616140..3f78370c 100644
--- a/lcode.c
+++ b/lcode.c
@@ -35,6 +35,7 @@
35#define MAXREGS 255 35#define MAXREGS 255
36 36
37 37
38/* (note that expressions VJMP also have jumps.) */
38#define hasjumps(e) ((e)->t != (e)->f) 39#define hasjumps(e) ((e)->t != (e)->f)
39 40
40 41
@@ -985,7 +986,7 @@ void luaK_exp2anyregup (FuncState *fs, expdesc *e) {
985** or it is a constant. 986** or it is a constant.
986*/ 987*/
987void luaK_exp2val (FuncState *fs, expdesc *e) { 988void luaK_exp2val (FuncState *fs, expdesc *e) {
988 if (hasjumps(e)) 989 if (e->k == VJMP || hasjumps(e))
989 luaK_exp2anyreg(fs, e); 990 luaK_exp2anyreg(fs, e);
990 else 991 else
991 luaK_dischargevars(fs, e); 992 luaK_dischargevars(fs, e);