diff --git a/src/core/c32arr.c b/src/core/c32arr.c index e28c6d79..ad6fa7ec 100644 --- a/src/core/c32arr.c +++ b/src/core/c32arr.c @@ -19,14 +19,14 @@ B m_str32(u32* s) { return r; } -static Arr* m_c32slice(B p, u32* ptr) { +static Arr* m_c32slice(Arr* p, u32* ptr) { C32Slice* r = mm_alloc(sizeof(C32Slice), t_c32slice); r->p = p; r->a = ptr; return (Arr*)r; } -static Arr* c32arr_slice (B x, usz s) { return m_c32slice(x , c(C32Arr ,x)->a+s); } -static Arr* c32slice_slice(B x, usz s) { Arr* r = m_c32slice(inc(c(Slice,x)->p), c(C32Slice,x)->a+s); dec(x); return r; } +static Arr* c32arr_slice (B x, usz s) { return m_c32slice(a(x), c(C32Arr,x)->a+s); } +static Arr* c32slice_slice(B x, usz s) { Arr* p=c(Slice,x)->p; ptr_inc(p); Arr* r = m_c32slice(p, c(C32Slice,x)->a+s); dec(x); return r; } static B c32arr_get (B x, usz n) { VTY(x,t_c32arr ); return m_c32(c(C32Arr ,x)->a[n]); } static B c32slice_get(B x, usz n) { VTY(x,t_c32slice); return m_c32(c(C32Slice,x)->a[n]); } diff --git a/src/core/f64arr.c b/src/core/f64arr.c index f28ddb48..f8f076ee 100644 --- a/src/core/f64arr.c +++ b/src/core/f64arr.c @@ -6,14 +6,14 @@ NOINLINE B m_caf64(usz sz, f64* a) { return r; } -static Arr* m_f64slice(B p, f64* ptr) { +static Arr* m_f64slice(Arr* p, f64* ptr) { F64Slice* r = mm_alloc(sizeof(F64Slice), t_f64slice); r->p = p; r->a = ptr; return (Arr*)r; } -static Arr* f64arr_slice (B x, usz s) { return m_f64slice(x , c(F64Arr ,x)->a+s); } -static Arr* f64slice_slice(B x, usz s) { Arr* r = m_f64slice(inc(c(Slice,x)->p), c(F64Slice,x)->a+s); dec(x); return r; } +static Arr* f64arr_slice (B x, usz s) { return m_f64slice(a(x), c(F64Arr ,x)->a+s); } +static Arr* f64slice_slice(B x, usz s) { Arr* p=c(Slice,x)->p; ptr_inc(p); Arr* r = m_f64slice(p, c(F64Slice,x)->a+s); dec(x); return r; } static B f64arr_get (B x, usz n) { VTY(x,t_f64arr ); return m_f64(c(F64Arr ,x)->a[n]); } static B f64slice_get(B x, usz n) { VTY(x,t_f64slice); return m_f64(c(F64Slice,x)->a[n]); } diff --git a/src/core/fillarr.c b/src/core/fillarr.c index 88603177..35dadd4e 100644 --- a/src/core/fillarr.c +++ b/src/core/fillarr.c @@ -31,15 +31,14 @@ B asFill(B x) { // consumes return bi_noFill; } -static Arr* m_fillslice(B p, B* ptr) { +static Arr* m_fillslice(Arr* p, B* ptr) { FillSlice* r = mm_alloc(sizeof(FillSlice), t_fillslice); r->p = p; r->a = ptr; return (Arr*)r; } - -static Arr* fillarr_slice (B x, usz s) { return m_fillslice(x , c(FillArr ,x)->a+s); } -static Arr* fillslice_slice(B x, usz s) { Arr* r = m_fillslice(inc(c(Slice,x)->p), c(FillSlice,x)->a+s); dec(x); return r; } +static Arr* fillarr_slice (B x, usz s) { return m_fillslice(a(x), c(FillArr,x)->a+s); } +static Arr* fillslice_slice(B x, usz s) { Arr* p=c(Slice,x)->p; ptr_inc(p); Arr* r = m_fillslice(p, c(FillSlice,x)->a+s); dec(x); return r; } static B fillarr_get (B x, usz n) { VTY(x,t_fillarr ); return inc(c(FillArr ,x)->a[n]); } static B fillslice_get (B x, usz n) { VTY(x,t_fillslice); return inc(c(FillSlice,x)->a[n]); } @@ -116,7 +115,7 @@ B withFill(B x, B fill) { // consumes both case t_f64arr: case t_f64slice: case t_i32arr: case t_i32slice: if(fill.u == m_i32(0 ).u) return x; break; case t_c32arr: case t_c32slice: if(fill.u == m_c32(' ').u) return x; break; - case t_fillslice: if (fillEqual(c(FillArr,c(Slice,x)->p)->fill, fill)) { dec(fill); return x; } break; + case t_fillslice: if (fillEqual(((FillArr*)c(Slice,x)->p)->fill, fill)) { dec(fill); return x; } break; case t_fillarr: if (fillEqual(c(FillArr,x)->fill, fill)) { dec(fill); return x; } if (reusable(x)) { dec(c(FillArr, x)->fill); diff --git a/src/core/fillarr.h b/src/core/fillarr.h index 09915587..9aa563bf 100644 --- a/src/core/fillarr.h +++ b/src/core/fillarr.h @@ -33,8 +33,8 @@ static B getFillR(B x) { // doesn't consume; can return bi_noFill case el_c32: return m_c32(' '); case el_B:; u8 t = v(x)->type; - if (t==t_fillarr ) return inc(c(FillArr,x )->fill); - if (t==t_fillslice) return inc(c(FillArr,c(Slice,x)->p)->fill); + if (t==t_fillarr ) return inc(c(FillArr,x )->fill); + if (t==t_fillslice) return inc(((FillArr*)c(Slice,x)->p)->fill); return bi_noFill; } } diff --git a/src/core/harr.c b/src/core/harr.c index 46907c32..f0e2080d 100644 --- a/src/core/harr.c +++ b/src/core/harr.c @@ -91,14 +91,14 @@ NOINLINE void harr_pfree(B x, usz am) { // am - item after last written -static Arr* m_hslice(B p, B* ptr) { +static Arr* m_hslice(Arr* p, B* ptr) { HSlice* r = mm_alloc(sizeof(HSlice), t_hslice); r->p = p; r->a = ptr; return (Arr*)r; } -static Arr* harr_slice (B x, usz s) { return m_hslice(x , c(HArr ,x)->a+s); } -static Arr* hslice_slice(B x, usz s) { Arr* r = m_hslice(inc(c(Slice,x)->p), c(HSlice,x)->a+s); dec(x); return r; } +static Arr* harr_slice (B x, usz s) { return m_hslice(a(x), c(HArr,x)->a+s); } +static Arr* hslice_slice(B x, usz s) { Arr* p=c(Slice,x)->p; ptr_inc(p); Arr* r = m_hslice(p, c(HSlice,x)->a+s); dec(x); return r; } static B harr_get (B x, usz n) { VTY(x,t_harr ); return inc(c(HArr ,x)->a[n]); } static B hslice_get (B x, usz n) { VTY(x,t_hslice); return inc(c(HSlice,x)->a[n]); } diff --git a/src/core/i32arr.c b/src/core/i32arr.c index 4f2ccba9..b53f7992 100644 --- a/src/core/i32arr.c +++ b/src/core/i32arr.c @@ -6,14 +6,14 @@ NOINLINE B m_cai32(usz ia, i32* a) { return r; } -static Arr* m_i32slice(B p, i32* ptr) { +static Arr* m_i32slice(Arr* p, i32* ptr) { I32Slice* r = mm_alloc(sizeof(I32Slice), t_i32slice); r->p = p; r->a = ptr; return (Arr*)r; } -static Arr* i32arr_slice (B x, usz s) { return m_i32slice(x , c(I32Arr ,x)->a+s); } -static Arr* i32slice_slice(B x, usz s) { Arr* r = m_i32slice(inc(c(Slice,x)->p), c(I32Slice,x)->a+s); dec(x); return r; } +static Arr* i32arr_slice (B x, usz s) { return m_i32slice(a(x), c(I32Arr,x)->a+s); } +static Arr* i32slice_slice(B x, usz s) { Arr* p=c(Slice,x)->p; ptr_inc(p); Arr* r = m_i32slice(p, c(I32Slice,x)->a+s); dec(x); return r; } static B i32arr_get (B x, usz n) { VTY(x,t_i32arr ); return m_i32(c(I32Arr ,x)->a[n]); } static B i32slice_get(B x, usz n) { VTY(x,t_i32slice); return m_i32(c(I32Slice,x)->a[n]); } diff --git a/src/core/stuff.c b/src/core/stuff.c index 313594fa..75aa6632 100644 --- a/src/core/stuff.c +++ b/src/core/stuff.c @@ -398,10 +398,10 @@ u64 depth(B x) { // doesn't consume return r+1; } void tyarr_freeO(Value* x) { decSh(x); } -void slice_freeO(Value* x) { dec(((Slice*)x)->p); decSh(x); } +void slice_freeO(Value* x) { ptr_dec(((Slice*)x)->p); decSh(x); } void tyarr_freeF(Value* x) { tyarr_freeO(x); mm_free(x); } void slice_freeF(Value* x) { slice_freeO(x); mm_free(x); } -void slice_visit(Value* x) { mm_visit(((Slice*)x)->p); } +void slice_visit(Value* x) { mm_visitP(((Slice*)x)->p); } void slice_print(B x) { arr_print(x); } char* format_type(u8 u) { diff --git a/src/h.h b/src/h.h index fa7ec299..557cebb1 100644 --- a/src/h.h +++ b/src/h.h @@ -344,7 +344,7 @@ static bool q_f64(B x) { return isF64(x) || isI32(x); } typedef struct Slice { struct Arr; - B p; + Arr* p; } Slice; void tyarr_freeO(Value* x); void tyarr_freeF(Value* x); void slice_freeO(Value* x); void slice_freeF(Value* x);