OP_LOADFALSE broken in two instructions

This commit is contained in:
Roberto Ierusalimschy
2020-02-11 11:12:33 -03:00
parent 28ef7061bb
commit 9b7987a9d1
6 changed files with 14 additions and 6 deletions

View File

@@ -872,9 +872,9 @@ static void discharge2anyreg (FuncState *fs, expdesc *e) {
}
static int code_loadbool (FuncState *fs, int A, OpCode op, int jump) {
static int code_loadbool (FuncState *fs, int A, OpCode op) {
luaK_getlabel(fs); /* those instructions may be jump targets */
return luaK_codeABC(fs, op, A, jump, 0);
return luaK_codeABC(fs, op, A, 0, 0);
}
@@ -908,8 +908,8 @@ static void exp2reg (FuncState *fs, expdesc *e, int reg) {
int p_t = NO_JUMP; /* position of an eventual LOAD true */
if (need_value(fs, e->t) || need_value(fs, e->f)) {
int fj = (e->k == VJMP) ? NO_JUMP : luaK_jump(fs);
p_f = code_loadbool(fs, reg, OP_LOADFALSE, 1); /* skip next inst. */
p_t = code_loadbool(fs, reg, OP_LOADTRUE, 0);
p_f = code_loadbool(fs, reg, OP_LFALSESKIP); /* skip next inst. */
p_t = code_loadbool(fs, reg, OP_LOADTRUE);
/* jump around these booleans if 'e' is not a test */
luaK_patchtohere(fs, fj);
}