aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2011-01-17 01:09:43 +0100
committerMike Pall <mike>2011-01-17 01:09:43 +0100
commitb2ff889c6e2bd637a906b7b81641faf5682f771e (patch)
treea3e8195dac416c9d1b0acb5e278e4aea8dedfabb /src
parent335232b0f1c173e91ed3f1cad73ee0f5f47bee03 (diff)
downloadluajit-b2ff889c6e2bd637a906b7b81641faf5682f771e.tar.gz
luajit-b2ff889c6e2bd637a906b7b81641faf5682f771e.tar.bz2
luajit-b2ff889c6e2bd637a906b7b81641faf5682f771e.zip
FFI: Don't swap operands for cdata __eq metamethod call.
Diffstat (limited to 'src')
-rw-r--r--src/lj_meta.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/lj_meta.c b/src/lj_meta.c
index ce851a22..0df1de08 100644
--- a/src/lj_meta.c
+++ b/src/lj_meta.c
@@ -309,13 +309,10 @@ TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins)
309 int op = (int)bc_op(ins) & ~1; 309 int op = (int)bc_op(ins) & ~1;
310 TValue tv; 310 TValue tv;
311 cTValue *mo, *o2, *o1 = &L->base[bc_a(ins)]; 311 cTValue *mo, *o2, *o1 = &L->base[bc_a(ins)];
312 cTValue *o1mm = o1;
312 if (op == BC_ISEQV) { 313 if (op == BC_ISEQV) {
313 cTValue *o = &L->base[bc_d(ins)]; 314 o2 = &L->base[bc_d(ins)];
314 if (tviscdata(o1)) { 315 if (!tviscdata(o1mm)) o1mm = o2;
315 o2 = o;
316 } else {
317 o2 = o1; o1 = o;
318 }
319 } else if (op == BC_ISEQS) { 316 } else if (op == BC_ISEQS) {
320 setstrV(L, &tv, gco2str(proto_kgc(curr_proto(L), ~(ptrdiff_t)bc_d(ins)))); 317 setstrV(L, &tv, gco2str(proto_kgc(curr_proto(L), ~(ptrdiff_t)bc_d(ins))));
321 o2 = &tv; 318 o2 = &tv;
@@ -326,7 +323,7 @@ TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins)
326 setitype(&tv, ~bc_d(ins)); 323 setitype(&tv, ~bc_d(ins));
327 o2 = &tv; 324 o2 = &tv;
328 } 325 }
329 mo = lj_meta_lookup(L, o1, MM_eq); 326 mo = lj_meta_lookup(L, o1mm, MM_eq);
330 if (LJ_LIKELY(!tvisnil(mo))) 327 if (LJ_LIKELY(!tvisnil(mo)))
331 return mmcall(L, cont, mo, o1, o2); 328 return mmcall(L, cont, mo, o1, o2);
332 else 329 else