diff --git a/src/core/harr.h b/src/core/harr.h index 1b8137ec..3d48faf9 100644 --- a/src/core/harr.h +++ b/src/core/harr.h @@ -108,8 +108,12 @@ static B m_hunit(B x) { // consumes return r.b; } -static B* harr_ptr(B x) { VTY(x,t_harr); return c(HArr,x)->a; } -static B* hany_ptr(B x) { return TY(x)==t_hslice? c(HSlice,x)->a : harr_ptr(x); } +static B* harrv_ptr(void* x) { u8 t = PTY((Value*)x); assert(t==t_harr || t==t_harrPartial); return ((HArr*)x)->a; } +static B* hslicev_ptr(void* x) { VTY(taga(x),t_hslice); return ((HSlice*)x)->a; } +static B* hanyv_ptr(void* x) { return PTY((Value*)x)==t_hslice? hslicev_ptr(x) : harrv_ptr(x); } +static B* harr_ptr(B x) { return harrv_ptr(a(x)); } +static B* hslice_ptr(B x) { return hslicev_ptr(a(x)); } +static B* hany_ptr(B x) { return hanyv_ptr(a(x)); } Arr* cpyHArr(B x); // consumes static HArr* toHArr(B x) { return TY(x)==t_harr? c(HArr,x) : (HArr*) cpyHArr(x); }