mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
FFI: Don't swap operands for cdata __eq metamethod call.
This commit is contained in:
parent
335232b0f1
commit
b2ff889c6e
@ -309,13 +309,10 @@ TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins)
|
|||||||
int op = (int)bc_op(ins) & ~1;
|
int op = (int)bc_op(ins) & ~1;
|
||||||
TValue tv;
|
TValue tv;
|
||||||
cTValue *mo, *o2, *o1 = &L->base[bc_a(ins)];
|
cTValue *mo, *o2, *o1 = &L->base[bc_a(ins)];
|
||||||
|
cTValue *o1mm = o1;
|
||||||
if (op == BC_ISEQV) {
|
if (op == BC_ISEQV) {
|
||||||
cTValue *o = &L->base[bc_d(ins)];
|
o2 = &L->base[bc_d(ins)];
|
||||||
if (tviscdata(o1)) {
|
if (!tviscdata(o1mm)) o1mm = o2;
|
||||||
o2 = o;
|
|
||||||
} else {
|
|
||||||
o2 = o1; o1 = o;
|
|
||||||
}
|
|
||||||
} else if (op == BC_ISEQS) {
|
} else if (op == BC_ISEQS) {
|
||||||
setstrV(L, &tv, gco2str(proto_kgc(curr_proto(L), ~(ptrdiff_t)bc_d(ins))));
|
setstrV(L, &tv, gco2str(proto_kgc(curr_proto(L), ~(ptrdiff_t)bc_d(ins))));
|
||||||
o2 = &tv;
|
o2 = &tv;
|
||||||
@ -326,7 +323,7 @@ TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins)
|
|||||||
setitype(&tv, ~bc_d(ins));
|
setitype(&tv, ~bc_d(ins));
|
||||||
o2 = &tv;
|
o2 = &tv;
|
||||||
}
|
}
|
||||||
mo = lj_meta_lookup(L, o1, MM_eq);
|
mo = lj_meta_lookup(L, o1mm, MM_eq);
|
||||||
if (LJ_LIKELY(!tvisnil(mo)))
|
if (LJ_LIKELY(!tvisnil(mo)))
|
||||||
return mmcall(L, cont, mo, o1, o2);
|
return mmcall(L, cont, mo, o1, o2);
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user