store object pointer in slice
This commit is contained in:
parent
be10e0d509
commit
8d7a31c8e9
@ -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]); }
|
||||
|
||||
@ -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]); }
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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]); }
|
||||
|
||||
@ -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]); }
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user