Merge branch 'master' into v2.1

This commit is contained in:
Mike Pall 2020-05-08 14:00:07 +02:00
commit d5e12d5174
4 changed files with 6 additions and 14 deletions

View File

@ -194,7 +194,7 @@ LJLIB_CF(ffi_meta___eq) LJLIB_REC(cdata_arith MM_eq)
LJLIB_CF(ffi_meta___len) LJLIB_REC(cdata_arith MM_len) 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) LJLIB_CF(ffi_meta___lt) LJLIB_REC(cdata_arith MM_lt)

View File

@ -265,7 +265,7 @@ int lj_carith_op(lua_State *L, MMS mm)
{ {
CTState *cts = ctype_cts(L); CTState *cts = ctype_cts(L);
CDArith ca; 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)) { 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. */ copyTV(L, &G(L)->tmptv2, L->top-1); /* Remember for trace recorder. */
return 1; return 1;
@ -274,15 +274,6 @@ int lj_carith_op(lua_State *L, MMS mm)
return lj_carith_meta(L, cts, &ca, mm); 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 bit operations helpers --------------------------------------- */ /* -- 64 bit bit operations helpers --------------------------------------- */
#if LJ_64 #if LJ_64

View File

@ -11,7 +11,6 @@
#if LJ_HASFFI #if LJ_HASFFI
LJ_FUNC int lj_carith_op(lua_State *L, MMS mm); LJ_FUNC int lj_carith_op(lua_State *L, MMS mm);
LJ_FUNC int lj_carith_len(lua_State *L);
#if LJ_32 #if LJ_32
LJ_FUNC uint64_t lj_carith_shl64(uint64_t x, int32_t sh); LJ_FUNC uint64_t lj_carith_shl64(uint64_t x, int32_t sh);

View File

@ -1530,8 +1530,10 @@ void LJ_FASTCALL recff_cdata_arith(jit_State *J, RecordFFData *rd)
} }
{ {
TRef tr; TRef tr;
if (!(tr = crec_arith_int64(J, sp, s, (MMS)rd->data)) && MMS mm = (MMS)rd->data;
!(tr = crec_arith_ptr(J, sp, s, (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))) !(tr = crec_arith_meta(J, sp, s, cts, rd)))
return; return;
J->base[0] = tr; J->base[0] = tr;