diff options
author | Mike Pall <mike> | 2011-01-17 01:09:43 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2011-01-17 01:09:43 +0100 |
commit | b2ff889c6e2bd637a906b7b81641faf5682f771e (patch) | |
tree | a3e8195dac416c9d1b0acb5e278e4aea8dedfabb /src | |
parent | 335232b0f1c173e91ed3f1cad73ee0f5f47bee03 (diff) | |
download | luajit-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.c | 11 |
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 |