aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2012-10-19 17:03:41 +0200
committerMike Pall <mike>2012-10-19 17:03:41 +0200
commit614e78d1f66a126a69e1ec15481185e20e342fb7 (patch)
treeb5a6a83e0ab9bd2720a48fa55b48b3959cc264d5 /src
parentf1fe96e7efa8d0e84a297c5ea9d58fe06f7a260f (diff)
downloadluajit-614e78d1f66a126a69e1ec15481185e20e342fb7.tar.gz
luajit-614e78d1f66a126a69e1ec15481185e20e342fb7.tar.bz2
luajit-614e78d1f66a126a69e1ec15481185e20e342fb7.zip
Fix recording of equality comparisons with __eq metamethods.
Diffstat (limited to 'src')
-rw-r--r--src/lj_record.c8
1 files 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)
1808 int diff; 1808 int diff;
1809 rec_comp_prep(J); 1809 rec_comp_prep(J);
1810 diff = lj_record_objcmp(J, ra, rc, rav, rcv); 1810 diff = lj_record_objcmp(J, ra, rc, rav, rcv);
1811 if (diff == 1 && (tref_istab(ra) || tref_isudata(ra))) { 1811 if (diff == 2 || !(tref_istab(ra) || tref_isudata(ra)))
1812 /* Only check __eq if different, but the same type (table or udata). */ 1812 rec_comp_fixup(J, J->pc, ((int)op & 1) == !diff);
1813 else if (diff == 1) /* Only check __eq if different, but same type. */
1813 rec_mm_equal(J, &ix, (int)op); 1814 rec_mm_equal(J, &ix, (int)op);
1814 break;
1815 }
1816 rec_comp_fixup(J, J->pc, ((int)op & 1) == !diff);
1817 } 1815 }
1818 break; 1816 break;
1819 1817