From 614e78d1f66a126a69e1ec15481185e20e342fb7 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Fri, 19 Oct 2012 17:03:41 +0200 Subject: [PATCH] Fix recording of equality comparisons with __eq metamethods. --- src/lj_record.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/lj_record.c b/src/lj_record.c index ea391bf1..8f42c4af 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -1808,12 +1808,10 @@ void lj_record_ins(jit_State *J) int diff; rec_comp_prep(J); diff = lj_record_objcmp(J, ra, rc, rav, rcv); - if (diff == 1 && (tref_istab(ra) || tref_isudata(ra))) { - /* Only check __eq if different, but the same type (table or udata). */ + if (diff == 2 || !(tref_istab(ra) || tref_isudata(ra))) + rec_comp_fixup(J, J->pc, ((int)op & 1) == !diff); + else if (diff == 1) /* Only check __eq if different, but same type. */ rec_mm_equal(J, &ix, (int)op); - break; - } - rec_comp_fixup(J, J->pc, ((int)op & 1) == !diff); } break;