Use 0/1 macro for Lua 5.2 compatibility.

This commit is contained in:
Mike Pall 2012-09-12 11:20:47 +02:00
parent 039bf85e26
commit 23932a6c8b
13 changed files with 49 additions and 59 deletions

View File

@ -278,16 +278,12 @@ LJLIB_ASM(next)
return FFH_UNREACHABLE; return FFH_UNREACHABLE;
} }
#if defined(LUAJIT_ENABLE_LUA52COMPAT) || LJ_HASFFI #if LJ_52 || LJ_HASFFI
static int ffh_pairs(lua_State *L, MMS mm) static int ffh_pairs(lua_State *L, MMS mm)
{ {
TValue *o = lj_lib_checkany(L, 1); TValue *o = lj_lib_checkany(L, 1);
cTValue *mo = lj_meta_lookup(L, o, mm); cTValue *mo = lj_meta_lookup(L, o, mm);
if ( if ((LJ_52 || tviscdata(o)) && !tvisnil(mo)) {
#if !defined(LUAJIT_ENABLE_LUA52COMPAT)
tviscdata(o) &&
#endif
!tvisnil(mo)) {
L->top = o+1; /* Only keep one argument. */ L->top = o+1; /* Only keep one argument. */
copyTV(L, L->base-1, mo); /* Replace callable. */ copyTV(L, L->base-1, mo); /* Replace callable. */
return FFH_TAILCALL; return FFH_TAILCALL;
@ -542,7 +538,7 @@ LJLIB_CF(coroutine_status)
LJLIB_CF(coroutine_running) LJLIB_CF(coroutine_running)
{ {
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
int ismain = lua_pushthread(L); int ismain = lua_pushthread(L);
setboolV(L->top++, ismain); setboolV(L->top++, ismain);
return 2; return 2;

View File

@ -273,7 +273,7 @@ LJLIB_CF(table_sort)
LUALIB_API int luaopen_table(lua_State *L) LUALIB_API int luaopen_table(lua_State *L)
{ {
LJ_LIB_REG(L, LUA_TABLIBNAME, table); LJ_LIB_REG(L, LUA_TABLIBNAME, table);
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
lua_getglobal(L, "unpack"); lua_getglobal(L, "unpack");
lua_setfield(L, -2, "unpack"); lua_setfield(L, -2, "unpack");
#endif #endif

View File

@ -400,4 +400,11 @@
#define LJ_NO_UNWIND 1 #define LJ_NO_UNWIND 1
#endif #endif
/* Compatibility with Lua 5.1 vs. 5.2. */
#ifdef LUAJIT_ENABLE_LUA52COMPAT
#define LJ_52 1
#else
#define LJ_52 0
#endif
#endif #endif

View File

@ -353,10 +353,7 @@ static void LJ_FASTCALL recff_ipairs_aux(jit_State *J, RecordFFData *rd)
static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd) static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd)
{ {
#ifdef LUAJIT_ENABLE_LUA52COMPAT if (!(LJ_52 && recff_metacall(J, rd, MM_ipairs))) {
if (!recff_metacall(J, rd, MM_ipairs))
#endif
{
TRef tab = J->base[0]; TRef tab = J->base[0];
if (tref_istab(tab)) { if (tref_istab(tab)) {
J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0])); J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0]));

View File

@ -315,19 +315,13 @@ TValue * LJ_FASTCALL lj_meta_len(lua_State *L, cTValue *o)
{ {
cTValue *mo = lj_meta_lookup(L, o, MM_len); cTValue *mo = lj_meta_lookup(L, o, MM_len);
if (tvisnil(mo)) { if (tvisnil(mo)) {
#ifdef LUAJIT_ENABLE_LUA52COMPAT if (LJ_52 && tvistab(o))
if (tvistab(o))
tabref(tabV(o)->metatable)->nomm |= (uint8_t)(1u<<MM_len); tabref(tabV(o)->metatable)->nomm |= (uint8_t)(1u<<MM_len);
else else
#endif
lj_err_optype(L, o, LJ_ERR_OPLEN); lj_err_optype(L, o, LJ_ERR_OPLEN);
return NULL; return NULL;
} }
#ifdef LUAJIT_ENABLE_LUA52COMPAT return mmcall(L, lj_cont_ra, mo, o, LJ_52 ? o : niltv(L));
return mmcall(L, lj_cont_ra, mo, o, o);
#else
return mmcall(L, lj_cont_ra, mo, o, niltv(L));
#endif
} }
/* Helper for equality comparisons. __eq metamethod. */ /* Helper for equality comparisons. __eq metamethod. */

View File

@ -447,7 +447,7 @@ enum {
#define MMDEF_FFI(_) #define MMDEF_FFI(_)
#endif #endif
#if defined(LUAJIT_ENABLE_LUA52COMPAT) || LJ_HASFFI #if LJ_52 || LJ_HASFFI
#define MMDEF_PAIRS(_) _(pairs) _(ipairs) #define MMDEF_PAIRS(_) _(pairs) _(ipairs)
#else #else
#define MMDEF_PAIRS(_) #define MMDEF_PAIRS(_)

View File

@ -2495,7 +2495,7 @@ static int parse_stmt(LexState *ls)
lj_lex_next(ls); lj_lex_next(ls);
parse_break(ls); parse_break(ls);
return 1; /* Must be last. */ return 1; /* Must be last. */
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
case ';': case ';':
lj_lex_next(ls); lj_lex_next(ls);
break; break;

View File

@ -906,17 +906,15 @@ static TRef rec_mm_len(jit_State *J, TRef tr, TValue *tv)
TValue *basev = J->L->base + func; TValue *basev = J->L->base + func;
base[0] = ix.mobj; copyTV(J->L, basev+0, &ix.mobjv); base[0] = ix.mobj; copyTV(J->L, basev+0, &ix.mobjv);
base[1] = tr; copyTV(J->L, basev+1, tv); base[1] = tr; copyTV(J->L, basev+1, tv);
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
base[2] = tr; copyTV(J->L, basev+2, tv); base[2] = tr; copyTV(J->L, basev+2, tv);
#else #else
base[2] = TREF_NIL; setnilV(basev+2); base[2] = TREF_NIL; setnilV(basev+2);
#endif #endif
lj_record_call(J, func, 2); lj_record_call(J, func, 2);
} else { } else {
#ifdef LUAJIT_ENABLE_LUA52COMPAT if (LJ_52 && tref_istab(tr))
if (tref_istab(tr))
return lj_ir_call(J, IRCALL_lj_tab_len, tr); return lj_ir_call(J, IRCALL_lj_tab_len, tr);
#endif
lj_trace_err(J, LJ_TRERR_NOMM); lj_trace_err(J, LJ_TRERR_NOMM);
} }
return 0; /* No result yet. */ return 0; /* No result yet. */
@ -1815,10 +1813,8 @@ void lj_record_ins(jit_State *J)
case BC_LEN: case BC_LEN:
if (tref_isstr(rc)) if (tref_isstr(rc))
rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN); rc = emitir(IRTI(IR_FLOAD), rc, IRFL_STR_LEN);
#ifndef LUAJIT_ENABLE_LUA52COMPAT else if (!LJ_52 && tref_istab(rc))
else if (tref_istab(rc))
rc = lj_ir_call(J, IRCALL_lj_tab_len, rc); rc = lj_ir_call(J, IRCALL_lj_tab_len, rc);
#endif
else else
rc = rec_mm_len(J, rc, rcv); rc = rec_mm_len(J, rc, rcv);
break; break;

View File

@ -793,7 +793,7 @@ static void build_subroutines(BuildCtx *ctx)
| bl extern lj_meta_len // (lua_State *L, TValue *o) | bl extern lj_meta_len // (lua_State *L, TValue *o)
| // Returns NULL (retry) or TValue * (metamethod base). | // Returns NULL (retry) or TValue * (metamethod base).
| .IOS ldr BASE, L->base | .IOS ldr BASE, L->base
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmp CRET1, #0 | cmp CRET1, #0
| bne ->vmeta_binop // Binop call for compatibility. | bne ->vmeta_binop // Binop call for compatibility.
| ldr TAB:CARG1, [BASE, RC] | ldr TAB:CARG1, [BASE, RC]
@ -1085,12 +1085,12 @@ static void build_subroutines(BuildCtx *ctx)
| |
|.ffunc_1 pairs |.ffunc_1 pairs
| checktab CARG2, ->fff_fallback | checktab CARG2, ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| ldr TAB:RB, TAB:CARG1->metatable | ldr TAB:RB, TAB:CARG1->metatable
#endif #endif
| ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0] | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0]
| ldr PC, [BASE, FRAME_PC] | ldr PC, [BASE, FRAME_PC]
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmp TAB:RB, #0 | cmp TAB:RB, #0
| bne ->fff_fallback | bne ->fff_fallback
#endif #endif
@ -1135,12 +1135,12 @@ static void build_subroutines(BuildCtx *ctx)
| |
|.ffunc_1 ipairs |.ffunc_1 ipairs
| checktab CARG2, ->fff_fallback | checktab CARG2, ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| ldr TAB:RB, TAB:CARG1->metatable | ldr TAB:RB, TAB:CARG1->metatable
#endif #endif
| ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0] | ldrd CFUNC:CARG34, CFUNC:CARG3->upvalue[0]
| ldr PC, [BASE, FRAME_PC] | ldr PC, [BASE, FRAME_PC]
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmp TAB:RB, #0 | cmp TAB:RB, #0
| bne ->fff_fallback | bne ->fff_fallback
#endif #endif
@ -2906,7 +2906,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| ins_next3 | ins_next3
|2: |2:
| checktab CARG2, ->vmeta_len | checktab CARG2, ->vmeta_len
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| ldr TAB:CARG3, TAB:CARG1->metatable | ldr TAB:CARG3, TAB:CARG1->metatable
| cmp TAB:CARG3, #0 | cmp TAB:CARG3, #0
| bne >9 | bne >9
@ -2918,7 +2918,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| // Returns uint32_t (but less than 2^31). | // Returns uint32_t (but less than 2^31).
| .IOS mov BASE, RC | .IOS mov BASE, RC
| b <1 | b <1
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
|9: |9:
| ldrb CARG4, TAB:CARG3->nomm | ldrb CARG4, TAB:CARG3->nomm
| tst CARG4, #1<<MM_len | tst CARG4, #1<<MM_len

View File

@ -842,7 +842,7 @@ static void build_subroutines(BuildCtx *ctx)
| |
|->vmeta_len: |->vmeta_len:
| // CARG2 already set by BC_LEN. | // CARG2 already set by BC_LEN.
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| move MULTRES, CARG1 | move MULTRES, CARG1
#endif #endif
| load_got lj_meta_len | load_got lj_meta_len
@ -851,7 +851,7 @@ static void build_subroutines(BuildCtx *ctx)
| call_intern lj_meta_len // (lua_State *L, TValue *o) | call_intern lj_meta_len // (lua_State *L, TValue *o)
|. move CARG1, L |. move CARG1, L
| // Returns NULL (retry) or TValue * (metamethod base). | // Returns NULL (retry) or TValue * (metamethod base).
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| bnez CRET1, ->vmeta_binop // Binop call for compatibility. | bnez CRET1, ->vmeta_binop // Binop call for compatibility.
|. nop |. nop
| b ->BC_LEN_Z | b ->BC_LEN_Z
@ -1159,7 +1159,7 @@ static void build_subroutines(BuildCtx *ctx)
| li AT, LJ_TTAB | li AT, LJ_TTAB
| bne CARG3, AT, ->fff_fallback | bne CARG3, AT, ->fff_fallback
|. lw PC, FRAME_PC(BASE) |. lw PC, FRAME_PC(BASE)
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lw TAB:TMP2, TAB:CARG1->metatable | lw TAB:TMP2, TAB:CARG1->metatable
| ldc1 f0, CFUNC:RB->upvalue[0] | ldc1 f0, CFUNC:RB->upvalue[0]
| bnez TAB:TMP2, ->fff_fallback | bnez TAB:TMP2, ->fff_fallback
@ -1225,7 +1225,7 @@ static void build_subroutines(BuildCtx *ctx)
| li AT, LJ_TTAB | li AT, LJ_TTAB
| bne CARG3, AT, ->fff_fallback | bne CARG3, AT, ->fff_fallback
|. lw PC, FRAME_PC(BASE) |. lw PC, FRAME_PC(BASE)
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lw TAB:TMP2, TAB:CARG1->metatable | lw TAB:TMP2, TAB:CARG1->metatable
| ldc1 f0, CFUNC:RB->upvalue[0] | ldc1 f0, CFUNC:RB->upvalue[0]
| bnez TAB:TMP2, ->fff_fallback | bnez TAB:TMP2, ->fff_fallback
@ -2613,7 +2613,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|2: |2:
| bne TMP0, AT, ->vmeta_len | bne TMP0, AT, ->vmeta_len
|. nop |. nop
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lw TAB:TMP2, TAB:CARG1->metatable | lw TAB:TMP2, TAB:CARG1->metatable
| bnez TAB:TMP2, >9 | bnez TAB:TMP2, >9
|. nop |. nop
@ -2626,7 +2626,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| // Returns uint32_t (but less than 2^31). | // Returns uint32_t (but less than 2^31).
| b <1 | b <1
|. nop |. nop
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
|9: |9:
| lbu TMP0, TAB:TMP2->nomm | lbu TMP0, TAB:TMP2->nomm
| andi TMP0, TMP0, 1<<MM_len | andi TMP0, TMP0, 1<<MM_len

View File

@ -1057,7 +1057,7 @@ static void build_subroutines(BuildCtx *ctx)
| b ->vm_call_dispatch | b ->vm_call_dispatch
| |
|->vmeta_len: |->vmeta_len:
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| mr SAVE0, CARG1 | mr SAVE0, CARG1
#endif #endif
| mr CARG2, RD | mr CARG2, RD
@ -1066,7 +1066,7 @@ static void build_subroutines(BuildCtx *ctx)
| stw PC, SAVE_PC | stw PC, SAVE_PC
| bl extern lj_meta_len // (lua_State *L, TValue *o) | bl extern lj_meta_len // (lua_State *L, TValue *o)
| // Returns NULL (retry) or TValue * (metamethod base). | // Returns NULL (retry) or TValue * (metamethod base).
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmplwi CRET1, 0 | cmplwi CRET1, 0
| bne ->vmeta_binop // Binop call for compatibility. | bne ->vmeta_binop // Binop call for compatibility.
| mr CARG1, SAVE0 | mr CARG1, SAVE0
@ -1364,7 +1364,7 @@ static void build_subroutines(BuildCtx *ctx)
| checktab CARG3 | checktab CARG3
| lwz PC, FRAME_PC(BASE) | lwz PC, FRAME_PC(BASE)
| bne ->fff_fallback | bne ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lwz TAB:TMP2, TAB:CARG1->metatable | lwz TAB:TMP2, TAB:CARG1->metatable
| lfd f0, CFUNC:RB->upvalue[0] | lfd f0, CFUNC:RB->upvalue[0]
| cmplwi TAB:TMP2, 0 | cmplwi TAB:TMP2, 0
@ -1450,7 +1450,7 @@ static void build_subroutines(BuildCtx *ctx)
| checktab CARG3 | checktab CARG3
| lwz PC, FRAME_PC(BASE) | lwz PC, FRAME_PC(BASE)
| bne ->fff_fallback | bne ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lwz TAB:TMP2, TAB:CARG1->metatable | lwz TAB:TMP2, TAB:CARG1->metatable
| lfd f0, CFUNC:RB->upvalue[0] | lfd f0, CFUNC:RB->upvalue[0]
| cmplwi TAB:TMP2, 0 | cmplwi TAB:TMP2, 0
@ -3297,7 +3297,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| ins_next2 | ins_next2
|2: |2:
| checktab TMP0; bne ->vmeta_len | checktab TMP0; bne ->vmeta_len
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lwz TAB:TMP2, TAB:CARG1->metatable | lwz TAB:TMP2, TAB:CARG1->metatable
| cmplwi TAB:TMP2, 0 | cmplwi TAB:TMP2, 0
| bne >9 | bne >9
@ -3307,7 +3307,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| bl extern lj_tab_len // (GCtab *t) | bl extern lj_tab_len // (GCtab *t)
| // Returns uint32_t (but less than 2^31). | // Returns uint32_t (but less than 2^31).
| b <1 | b <1
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
|9: |9:
| lbz TMP0, TAB:TMP2->nomm | lbz TMP0, TAB:TMP2->nomm
| andix. TMP0, TMP0, 1<<MM_len | andix. TMP0, TMP0, 1<<MM_len

View File

@ -811,7 +811,7 @@ static void build_subroutines(BuildCtx *ctx)
| b ->vm_call_dispatch | b ->vm_call_dispatch
| |
|->vmeta_len: |->vmeta_len:
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| mr SAVE0, CARG1 | mr SAVE0, CARG1
#endif #endif
| add CARG2, BASE, RD | add CARG2, BASE, RD
@ -820,7 +820,7 @@ static void build_subroutines(BuildCtx *ctx)
| stw PC, SAVE_PC | stw PC, SAVE_PC
| bl extern lj_meta_len // (lua_State *L, TValue *o) | bl extern lj_meta_len // (lua_State *L, TValue *o)
| // Returns NULL (retry) or TValue * (metamethod base). | // Returns NULL (retry) or TValue * (metamethod base).
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmplwi CRET1, 0 | cmplwi CRET1, 0
| bne ->vmeta_binop // Binop call for compatibility. | bne ->vmeta_binop // Binop call for compatibility.
| mr CARG1, SAVE0 | mr CARG1, SAVE0
@ -1103,7 +1103,7 @@ static void build_subroutines(BuildCtx *ctx)
| checktab TAB:CARG1 | checktab TAB:CARG1
| lwz PC, FRAME_PC(BASE) | lwz PC, FRAME_PC(BASE)
| checkfail ->fff_fallback | checkfail ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lwz TAB:TMP2, TAB:CARG1->metatable | lwz TAB:TMP2, TAB:CARG1->metatable
| evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
| cmplwi TAB:TMP2, 0 | cmplwi TAB:TMP2, 0
@ -1162,7 +1162,7 @@ static void build_subroutines(BuildCtx *ctx)
| checktab TAB:CARG1 | checktab TAB:CARG1
| lwz PC, FRAME_PC(BASE) | lwz PC, FRAME_PC(BASE)
| checkfail ->fff_fallback | checkfail ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lwz TAB:TMP2, TAB:CARG1->metatable | lwz TAB:TMP2, TAB:CARG1->metatable
| evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
| cmplwi TAB:TMP2, 0 | cmplwi TAB:TMP2, 0
@ -2327,7 +2327,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|2: |2:
| checktab CARG1 | checktab CARG1
| checkfail ->vmeta_len | checkfail ->vmeta_len
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| lwz TAB:TMP2, TAB:CARG1->metatable | lwz TAB:TMP2, TAB:CARG1->metatable
| cmplwi TAB:TMP2, 0 | cmplwi TAB:TMP2, 0
| bne >9 | bne >9
@ -2337,7 +2337,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| bl extern lj_tab_len // (GCtab *t) | bl extern lj_tab_len // (GCtab *t)
| // Returns uint32_t (but less than 2^31). | // Returns uint32_t (but less than 2^31).
| b <1 | b <1
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
|9: |9:
| lbz TMP0, TAB:TMP2->nomm | lbz TMP0, TAB:TMP2->nomm
| andi. TMP0, TMP0, 1<<MM_len | andi. TMP0, TMP0, 1<<MM_len

View File

@ -1184,7 +1184,7 @@ static void build_subroutines(BuildCtx *ctx)
| call extern lj_meta_len@8 // (lua_State *L, TValue *o) | call extern lj_meta_len@8 // (lua_State *L, TValue *o)
| // NULL (retry) or TValue * (metamethod) returned in eax (RC). | // NULL (retry) or TValue * (metamethod) returned in eax (RC).
| mov BASE, L:RB->base | mov BASE, L:RB->base
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| test RC, RC | test RC, RC
| jne ->vmeta_binop // Binop call for compatibility. | jne ->vmeta_binop // Binop call for compatibility.
| movzx RD, PC_RD | movzx RD, PC_RD
@ -1600,7 +1600,7 @@ static void build_subroutines(BuildCtx *ctx)
|.ffunc_1 pairs |.ffunc_1 pairs
| mov TAB:RB, [BASE] | mov TAB:RB, [BASE]
| cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmp dword TAB:RB->metatable, 0; jne ->fff_fallback | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback
#endif #endif
| mov CFUNC:RB, [BASE-8] | mov CFUNC:RB, [BASE-8]
@ -1674,7 +1674,7 @@ static void build_subroutines(BuildCtx *ctx)
|.ffunc_1 ipairs |.ffunc_1 ipairs
| mov TAB:RB, [BASE] | mov TAB:RB, [BASE]
| cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| cmp dword TAB:RB->metatable, 0; jne ->fff_fallback | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback
#endif #endif
| mov CFUNC:RB, [BASE-8] | mov CFUNC:RB, [BASE-8]
@ -4315,7 +4315,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
|2: |2:
| checktab RD, ->vmeta_len | checktab RD, ->vmeta_len
| mov TAB:FCARG1, [BASE+RD*8] | mov TAB:FCARG1, [BASE+RD*8]
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
| mov TAB:RB, TAB:FCARG1->metatable | mov TAB:RB, TAB:FCARG1->metatable
| cmp TAB:RB, 0 | cmp TAB:RB, 0
| jnz >9 | jnz >9
@ -4336,7 +4336,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
| mov BASE, RB // Restore BASE. | mov BASE, RB // Restore BASE.
| movzx RA, PC_RA | movzx RA, PC_RA
| jmp <1 | jmp <1
#ifdef LUAJIT_ENABLE_LUA52COMPAT #if LJ_52
|9: // Check for __len. |9: // Check for __len.
| test byte TAB:RB->nomm, 1<<MM_len | test byte TAB:RB->nomm, 1<<MM_len
| jnz <3 | jnz <3