diff --git a/src/core/arrFns.h b/src/core/arrFns.h index 4c7062b1..da2a6c72 100644 --- a/src/core/arrFns.h +++ b/src/core/arrFns.h @@ -14,11 +14,11 @@ static B* arrV_bptr(Arr* x) { if (PTY(x)==t_fillslice) return ((FillSlice*)x)->a; return NULL; } -static void* tyarr_ptr(B x) { assert(IS_ARR(TY(x))); return c(TyArr,x)->a; } -static void* tyslice_ptr(B x) { assert(IS_SLICE(TY(x))); return c(TySlice,x)->a; } -static void* tyany_ptr(B x) { assert(IS_ARR(TY(x)) || IS_SLICE(TY(x))); - u8 t = TY(x); - return IS_SLICE(t)? c(TySlice,x)->a : c(TyArr,x)->a; +static void* tyarr_ptr(B x) { assert(IS_ANY_ARR(TY(x)) && !IS_SLICE(TY(x))); return c(TyArr,x)->a; } +static void* tyslice_ptr(B x) { assert(IS_ANY_ARR(TY(x)) && IS_SLICE(TY(x))); return c(TySlice,x)->a; } +static void* tyany_ptr(B x) { + assert(IS_ANY_ARR(TY(x))); + return IS_SLICE(TY(x))? c(TySlice,x)->a : c(TyArr,x)->a; } #define M_TYARR(WM, OVER, MID, RV, PRE) { PRE \ diff --git a/src/h.h b/src/h.h index e2ba4a65..3313ff77 100644 --- a/src/h.h +++ b/src/h.h @@ -293,8 +293,8 @@ enum Type { #undef F t_COUNT }; -#define IS_SLICE(T) ((T)>=t_hslice & (T)<=t_f64slice) -#define IS_ARR(T) ((T)>=t_harr & (T)<=t_bitarr) +#define IS_ANY_ARR(T) ((T)>=t_hslice & (T)<=t_bitarr) +#define IS_SLICE(T) ((T)<=t_f64slice) #define TO_SLICE(T) ((T) + t_hslice - t_harr) // Assumes T!=t_bitarr enum ElType { // a⌈b shall return the type that can store both, if possible