diff --git a/src/builtins/select.c b/src/builtins/select.c index 1c9d5f0c..6d297c9f 100644 --- a/src/builtins/select.c +++ b/src/builtins/select.c @@ -493,7 +493,7 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu } case el_B: { ra = reuse? a(REUSE(x)) : cpyHArr(x); - B* rp = harrP_parts((HArr*)ra).a; + B* rp = harrv_ptr(ra); SGet(rep) if (csz==1) { for (usz i = 0; i < wia; i++) { diff --git a/src/core/arrFns.h b/src/core/arrFns.h index 01857975..5ea83e4d 100644 --- a/src/core/arrFns.h +++ b/src/core/arrFns.h @@ -3,14 +3,14 @@ static B* arr_bptr(B x) { assert(isArr(x)); if (TY(x)==t_harr) return harr_ptr(x); if (TY(x)==t_fillarr) return fillarr_ptr(a(x)); - if (TY(x)==t_hslice) return c(HSlice,x)->a; + if (TY(x)==t_hslice) return hslice_ptr(x); if (TY(x)==t_fillslice) return c(FillSlice,x)->a; return NULL; } static B* arrV_bptr(Arr* x) { - if (PTY(x)==t_harr) return ((HArr*)x)->a; + if (PTY(x)==t_harr) return harrv_ptr(x); if (PTY(x)==t_fillarr) return fillarr_ptr(x); - if (PTY(x)==t_hslice) return ((HSlice*)x)->a; + if (PTY(x)==t_hslice) return hslicev_ptr(x); if (PTY(x)==t_fillslice) return ((FillSlice*)x)->a; return NULL; } diff --git a/src/core/harr.c b/src/core/harr.c index 1b00a10a..4b251c41 100644 --- a/src/core/harr.c +++ b/src/core/harr.c @@ -28,19 +28,19 @@ static Arr* m_hslice(Arr* p, B* ptr, usz ia) { static Arr* harr_slice (B x, usz s, usz ia) { return m_hslice(a(x), c(HArr,x)->a+s, ia); } static Arr* hslice_slice(B x, usz s, usz ia) { Arr* p = ptr_inc(c(Slice,x)->p); Arr* r = m_hslice(p, c(HSlice,x)->a+s, ia); decG(x); return r; } -static B harr_get (Arr* x, usz n) { assert(PTY(x)==t_harr ); return inc(((HArr* )x)->a[n]); } -static B hslice_get (Arr* x, usz n) { assert(PTY(x)==t_hslice); return inc(((HSlice*)x)->a[n]); } -static B harr_getU (Arr* x, usz n) { assert(PTY(x)==t_harr ); return ((HArr* )x)->a[n] ; } -static B hslice_getU(Arr* x, usz n) { assert(PTY(x)==t_hslice); return ((HSlice*)x)->a[n] ; } +static B harr_get (Arr* x, usz n) { assert(PTY(x)==t_harr ); return inc(harrv_ptr (x)[n]); } +static B hslice_get (Arr* x, usz n) { assert(PTY(x)==t_hslice); return inc(hslicev_ptr(x)[n]); } +static B harr_getU (Arr* x, usz n) { assert(PTY(x)==t_harr ); return harrv_ptr (x)[n] ; } +static B hslice_getU(Arr* x, usz n) { assert(PTY(x)==t_hslice); return hslicev_ptr(x)[n] ; } DEF_FREE(harr) { decSh(x); - B* p = ((HArr*)x)->a; // don't use harr_ptr so type isn't checked + B* p = ((HArr*)x)->a; // don't use harrv_ptr so type isn't checked usz ia = PIA((Arr*)x); for (usz i = 0; i < ia; i++) dec(p[i]); } static void harr_visit(Value* x) { VISIT_SHAPE(x); - usz ia = PIA((Arr*)x); B* p = ((HArr*)x)->a; + usz ia = PIA((Arr*)x); B* p = harrv_ptr(x); for (usz i = 0; i < ia; i++) mm_visit(p[i]); } static bool harr_canStore(B x) { return true; } @@ -48,7 +48,7 @@ static bool harr_canStore(B x) { return true; } DEF_FREE(harrP) { assert(PTY(x)==t_harrPartial|PTY(x)==t_freed); - B* p = ((HArr*)x)->a; + B* p = ((HArr*)x)->a; // don't use harrv_ptr so type isn't checked usz am = PIA((HArr*)x); for (usz i = 0; i < am; i++) dec(p[i]); } @@ -58,7 +58,7 @@ void harr_abandon_impl(HArr* p) { assert(PTY(p) == t_harrPartial); mm_free((Value*) p); } static void harrP_visit(Value* x) { assert(PTY(x) == t_harrPartial); - B* p = ((HArr*)x)->a; + B* p = harrv_ptr(x); usz am = PIA((HArr*)x); for (usz i = 0; i < am; i++) mm_visit(p[i]); } @@ -78,7 +78,7 @@ static void harrP_print(FILE* f, B x) { #if DEBUG static void harr_freeT(Value* x) { - B* p = ((HArr*)x)->a; + B* p = harrv_ptr(x); usz ia = PIA((Arr*)x); for (usz i = 0; i < ia; i++) assert(!isVal(p[i])); tyarr_freeF(x); diff --git a/src/utils/each.c b/src/utils/each.c index e75af64a..d701b48c 100644 --- a/src/utils/each.c +++ b/src/utils/each.c @@ -82,7 +82,7 @@ B eachm_fn(B fo, B x, FC1 f) { case t_fillslice: { FillSlice* s = c(FillSlice,x); Arr* p = s->p; - if (p->refc==1 && ((p->type==t_fillarr && ((FillArr*)p)->a==s->a) || (p->type==t_harr && ((HArr*)p)->a==s->a)) && PIA(p)==ia) { + if (p->refc==1 && ((p->type==t_fillarr && ((FillArr*)p)->a==s->a) || (p->type==t_harr && harrv_ptr(p)==s->a)) && PIA(p)==ia) { ur sr = PRNK(s); if (sr<=1) { arr_shErase(p, sr); diff --git a/src/utils/mut.c b/src/utils/mut.c index d7694cfb..b2754b94 100644 --- a/src/utils/mut.c +++ b/src/utils/mut.c @@ -40,7 +40,7 @@ NOINLINE Mut make_mut_init(u64 ia, u8 el) { #endif static void* arr_ptr(Arr* t, u8 el) { - return el==el_B? (void*)((HArr*)t)->a : tyarrv_ptr((TyArr*)t); + return el==el_B? (void*)harrv_ptr(t) : tyarrv_ptr((TyArr*)t); } INIT_GLOBAL u8 reuseElType[t_COUNT]; @@ -126,7 +126,7 @@ NOINLINE JoinFillslice fillslice_getJoin(B w, usz ria) { if (p->refc!=1) goto no; if (p->type!=t_fillarr && p->type!=t_harr) goto no; - void* rp = p->type==t_fillarr? fillarr_ptr(p) : ((HArr*)p)->a; + void* rp = p->type==t_fillarr? fillarr_ptr(p) : harrv_ptr(p); if (rp != s->a) goto no; if (PIA(p)!=wia) goto no; usz wsz = mm_sizeUsable((Value*)p);