diff options
author | Mike Pall <mike> | 2012-10-19 17:03:41 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-10-19 17:03:41 +0200 |
commit | 614e78d1f66a126a69e1ec15481185e20e342fb7 (patch) | |
tree | b5a6a83e0ab9bd2720a48fa55b48b3959cc264d5 /src | |
parent | f1fe96e7efa8d0e84a297c5ea9d58fe06f7a260f (diff) | |
download | luajit-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.c | 8 |
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 | ||