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 | |
| 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.
| -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 |
