LJLIB_CF(ffi_meta___len) LJLIB_REC(cdata_arith MM_len)
{
- return lj_carith_len(L);
+ return ffi_arith(L);
}
LJLIB_CF(ffi_meta___lt) LJLIB_REC(cdata_arith MM_lt)
{
CTState *cts = ctype_cts(L);
CDArith ca;
- if (carith_checkarg(L, cts, &ca)) {
+ if (carith_checkarg(L, cts, &ca) && mm != MM_len && mm != MM_concat) {
if (carith_int64(L, cts, &ca, mm) || carith_ptr(L, cts, &ca, mm)) {
copyTV(L, &G(L)->tmptv2, L->top-1); /* Remember for trace recorder. */
return 1;
return lj_carith_meta(L, cts, &ca, mm);
}
-/* No built-in functionality for length of cdata. */
-int lj_carith_len(lua_State *L)
-{
- CTState *cts = ctype_cts(L);
- CDArith ca;
- carith_checkarg(L, cts, &ca);
- return lj_carith_meta(L, cts, &ca, MM_len);
-}
-
/* -- 64 bit integer arithmetic helpers ----------------------------------- */
#if LJ_32 && LJ_HASJIT
#if LJ_HASFFI
LJ_FUNC int lj_carith_op(lua_State *L, MMS mm);
-LJ_FUNC int lj_carith_len(lua_State *L);
#if LJ_32 && LJ_HASJIT
LJ_FUNC int64_t lj_carith_mul64(int64_t x, int64_t k);
}
{
TRef tr;
- if (!(tr = crec_arith_int64(J, sp, s, (MMS)rd->data)) &&
- !(tr = crec_arith_ptr(J, sp, s, (MMS)rd->data)) &&
+ MMS mm = (MMS)rd->data;
+ if ((mm == MM_len || mm == MM_concat ||
+ (!(tr = crec_arith_int64(J, sp, s, mm)) &&
+ !(tr = crec_arith_ptr(J, sp, s, mm)))) &&
!(tr = crec_arith_meta(J, sp, s, cts, rd)))
return;
J->base[0] = tr;