make arr_shVec return its argument
This commit is contained in:
parent
638891bde1
commit
025043b84e
@ -62,8 +62,7 @@ B tbl_c2(Md1D* d, B w, B x) { B f = d->f;
|
|||||||
if (!EACH_FILLS && isFun(f) && isPervasiveDy(f) && TI(w,arrD1)) {
|
if (!EACH_FILLS && isFun(f) && isPervasiveDy(f) && TI(w,arrD1)) {
|
||||||
BBB2B fc2 = c(Fun,f)->c2;
|
BBB2B fc2 = c(Fun,f)->c2;
|
||||||
if (TI(x,arrD1) && xia<80 && wia>130) {
|
if (TI(x,arrD1) && xia<80 && wia>130) {
|
||||||
Arr* wd = TI(w,slice)(inc(w), 0, wia);
|
Arr* wd = arr_shVec(TI(w,slice)(inc(w), 0, wia));
|
||||||
arr_shVec(wd);
|
|
||||||
r = fc2(f, slash_c2(f, m_i32(xia), taga(wd)), shape_c2(f, m_f64(ria), inc(x)));
|
r = fc2(f, slash_c2(f, m_i32(xia), taga(wd)), shape_c2(f, m_f64(ria), inc(x)));
|
||||||
} else {
|
} else {
|
||||||
SGet(w)
|
SGet(w)
|
||||||
|
|||||||
@ -35,7 +35,7 @@ B m_vec1(B a) {
|
|||||||
else if (LIKELY(c<U16_MAX)) { u16* rp; B r = m_c16arrv(&rp, 1); rp[0] = c; return r; }
|
else if (LIKELY(c<U16_MAX)) { u16* rp; B r = m_c16arrv(&rp, 1); rp[0] = c; return r; }
|
||||||
else { u32* rp; B r = m_c32arrv(&rp, 1); rp[0] = c; return r; }
|
else { u32* rp; B r = m_c32arrv(&rp, 1); rp[0] = c; return r; }
|
||||||
}
|
}
|
||||||
Arr* ra = m_fillarrp(1); arr_shVec(ra);
|
Arr* ra = arr_shVec(m_fillarrp(1));
|
||||||
fillarr_ptr(ra)[0] = a;
|
fillarr_ptr(ra)[0] = a;
|
||||||
fillarr_setFill(ra, m_f64(0));
|
fillarr_setFill(ra, m_f64(0));
|
||||||
fillarr_setFill(ra, asFill(inc(a)));
|
fillarr_setFill(ra, asFill(inc(a)));
|
||||||
@ -67,7 +67,7 @@ FORCE_INLINE B m_vec2Base(B a, B b, bool fills) {
|
|||||||
if (noFill(bf)) { dec(af); goto noFills; }
|
if (noFill(bf)) { dec(af); goto noFills; }
|
||||||
if (!fillEqual(af,bf)) { dec(bf); dec(af); goto noFills; }
|
if (!fillEqual(af,bf)) { dec(bf); dec(af); goto noFills; }
|
||||||
dec(bf);
|
dec(bf);
|
||||||
Arr* ra = m_fillarrp(2); arr_shVec(ra);
|
Arr* ra = arr_shVec(m_fillarrp(2));
|
||||||
fillarr_setFill(ra, af);
|
fillarr_setFill(ra, af);
|
||||||
fillarr_ptr(ra)[0] = a;
|
fillarr_ptr(ra)[0] = a;
|
||||||
fillarr_ptr(ra)[1] = b;
|
fillarr_ptr(ra)[1] = b;
|
||||||
@ -95,8 +95,7 @@ B shape_c1(B t, B x) {
|
|||||||
decSh(v(x)); arr_shVec(a(x));
|
decSh(v(x)); arr_shVec(a(x));
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
Arr* r = TI(x,slice)(x, 0, ia); arr_shVec(r);
|
return taga(arr_shVec(TI(x,slice)(x, 0, ia)));
|
||||||
return taga(r);
|
|
||||||
}
|
}
|
||||||
static B truncReshape(B x, usz xia, usz nia, ur nr, ShArr* sh) { // consumes all
|
static B truncReshape(B x, usz xia, usz nia, ur nr, ShArr* sh) { // consumes all
|
||||||
B r; Arr* ra;
|
B r; Arr* ra;
|
||||||
@ -173,9 +172,7 @@ B shape_c2(B t, B w, B x) {
|
|||||||
nia = uszMul(nia, item);
|
nia = uszMul(nia, item);
|
||||||
if (fill) {
|
if (fill) {
|
||||||
if (!isArr(x)) x = m_atomUnit(x);
|
if (!isArr(x)) x = m_atomUnit(x);
|
||||||
Arr* a = take_impl(nia, x);
|
x = taga(arr_shVec(take_impl(nia, x)));
|
||||||
arr_shVec(a);
|
|
||||||
x = taga(a);
|
|
||||||
xia = nia;
|
xia = nia;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -558,8 +555,7 @@ B slash_c2(B t, B w, B x) {
|
|||||||
i32 wv = o2i(w);
|
i32 wv = o2i(w);
|
||||||
if (wv<=0) {
|
if (wv<=0) {
|
||||||
if (wv<0) thrM("/: 𝕨 cannot be negative");
|
if (wv<0) thrM("/: 𝕨 cannot be negative");
|
||||||
Arr* r = TI(x,slice)(x, 0, 0); arr_shVec(r);
|
return taga(arr_shVec(TI(x,slice)(x, 0, 0)));
|
||||||
return taga(r);
|
|
||||||
}
|
}
|
||||||
if (TI(x,elType)==el_i32) {
|
if (TI(x,elType)==el_i32) {
|
||||||
i32* xp = i32any_ptr(x);
|
i32* xp = i32any_ptr(x);
|
||||||
@ -675,9 +671,9 @@ B slash_im(B t, B x) {
|
|||||||
|
|
||||||
static B slicev(B x, usz s, usz ia) {
|
static B slicev(B x, usz s, usz ia) {
|
||||||
usz xia = a(x)->ia; assert(s+ia <= xia);
|
usz xia = a(x)->ia; assert(s+ia <= xia);
|
||||||
Arr* r = TI(x,slice)(x, s, ia); arr_shVec(r);
|
return taga(arr_shVec(TI(x,slice)(x, s, ia)));
|
||||||
return taga(r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern B rt_take, rt_drop;
|
extern B rt_take, rt_drop;
|
||||||
B take_c1(B t, B x) { return c1(rt_take, x); }
|
B take_c1(B t, B x) { return c1(rt_take, x); }
|
||||||
B drop_c1(B t, B x) { return c1(rt_drop, x); }
|
B drop_c1(B t, B x) { return c1(rt_drop, x); }
|
||||||
@ -970,12 +966,12 @@ B group_c2(B t, B w, B x) {
|
|||||||
len[n]++; // overallocation makes this safe after n<-1 check
|
len[n]++; // overallocation makes this safe after n<-1 check
|
||||||
}
|
}
|
||||||
|
|
||||||
Arr* r = m_fillarrp(ria); fillarr_setFill(r, m_f64(0)); arr_shVec(r);
|
Arr* r = arr_shVec(m_fillarrp(ria)); fillarr_setFill(r, m_f64(0));
|
||||||
B* rp = fillarr_ptr(r);
|
B* rp = fillarr_ptr(r);
|
||||||
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
|
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
|
||||||
B xf = getFillQ(x);
|
B xf = getFillQ(x);
|
||||||
|
|
||||||
Arr* rf = m_fillarrp(0); fillarr_setFill(rf, m_f64(0)); arr_shVec(rf);
|
Arr* rf = arr_shVec(m_fillarrp(0)); fillarr_setFill(rf, m_f64(0));
|
||||||
fillarr_setFill(r, taga(rf));
|
fillarr_setFill(r, taga(rf));
|
||||||
u8 xe = TI(x,elType);
|
u8 xe = TI(x,elType);
|
||||||
switch (xe) { default: UD;
|
switch (xe) { default: UD;
|
||||||
@ -1035,7 +1031,7 @@ B group_c2(B t, B w, B x) {
|
|||||||
for (usz i = 0; i < ria; i++) len[i] = pos[i] = 0;
|
for (usz i = 0; i < ria; i++) len[i] = pos[i] = 0;
|
||||||
for (usz i = 0; i < xia; i++) len[o2i64u(GetU(w, i))]++;
|
for (usz i = 0; i < xia; i++) len[o2i64u(GetU(w, i))]++;
|
||||||
|
|
||||||
Arr* r = m_fillarrp(ria); fillarr_setFill(r, m_f64(0)); arr_shVec(r);
|
Arr* r = arr_shVec(m_fillarrp(ria)); fillarr_setFill(r, m_f64(0));
|
||||||
B* rp = fillarr_ptr(r);
|
B* rp = fillarr_ptr(r);
|
||||||
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
|
for (usz i = 0; i < ria; i++) rp[i] = m_f64(0); // don't break if allocation errors
|
||||||
B xf = getFillQ(x);
|
B xf = getFillQ(x);
|
||||||
|
|||||||
@ -67,9 +67,8 @@ static void fillarr_setFill(Arr* x, B fill) { assert(x->type==t_fillarr); ((Fill
|
|||||||
static B* fillarr_ptr(Arr* x) { assert(x->type==t_fillarr); return ((FillArr*)x)->a; }
|
static B* fillarr_ptr(Arr* x) { assert(x->type==t_fillarr); return ((FillArr*)x)->a; }
|
||||||
|
|
||||||
static B m_emptyFVec(B f) { // consumes f
|
static B m_emptyFVec(B f) { // consumes f
|
||||||
Arr* r = m_fillarrp(0);
|
Arr* r = arr_shVec(m_fillarrp(0));
|
||||||
fillarr_setFill(r, f);
|
fillarr_setFill(r, f);
|
||||||
arr_shVec(r);
|
|
||||||
return taga(r);
|
return taga(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,8 +12,7 @@ B toCells(B x) {
|
|||||||
usz p = 0;
|
usz p = 0;
|
||||||
if (rnk(x)==2) {
|
if (rnk(x)==2) {
|
||||||
for (usz i = 0; i < cam; i++) {
|
for (usz i = 0; i < cam; i++) {
|
||||||
Arr* s = slice(inc(x), p, csz); arr_shVec(s);
|
HARR_ADD(r, i, taga(arr_shVec(slice(inc(x), p, csz))));
|
||||||
HARR_ADD(r, i, taga(s));
|
|
||||||
p+= csz;
|
p+= csz;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -46,9 +46,10 @@ static ShArr* m_shArr(ur r) {
|
|||||||
return ((ShArr*)mm_alloc(fsizeof(ShArr, a, usz, r), t_shape));
|
return ((ShArr*)mm_alloc(fsizeof(ShArr, a, usz, r), t_shape));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void arr_shVec(Arr* x) {
|
static Arr* arr_shVec(Arr* x) {
|
||||||
sprnk(x, 1);
|
sprnk(x, 1);
|
||||||
x->sh = &x->ia;
|
x->sh = &x->ia;
|
||||||
|
return x;
|
||||||
}
|
}
|
||||||
static usz* arr_shAlloc(Arr* x, ur r) { // sets rank, allocates & returns shape (or null if r<2)
|
static usz* arr_shAlloc(Arr* x, ur r) { // sets rank, allocates & returns shape (or null if r<2)
|
||||||
if (r>1) {
|
if (r>1) {
|
||||||
|
|||||||
@ -80,7 +80,7 @@ void tyarr_init() {
|
|||||||
{ u64* tmp; bi_emptyIVec = m_bitarrv(&tmp, 0); gc_add(bi_emptyIVec); }
|
{ u64* tmp; bi_emptyIVec = m_bitarrv(&tmp, 0); gc_add(bi_emptyIVec); }
|
||||||
{ u8* tmp; bi_emptyCVec = m_c8arrv (&tmp, 0); gc_add(bi_emptyCVec); }
|
{ u8* tmp; bi_emptyCVec = m_c8arrv (&tmp, 0); gc_add(bi_emptyCVec); }
|
||||||
|
|
||||||
Arr* emptySVec = m_fillarrp(0); arr_shVec(emptySVec);
|
Arr* emptySVec = arr_shVec(m_fillarrp(0));
|
||||||
fillarr_setFill(emptySVec, emptyCVec());
|
fillarr_setFill(emptySVec, emptyCVec());
|
||||||
bi_emptySVec = taga(emptySVec); gc_add(bi_emptySVec);
|
bi_emptySVec = taga(emptySVec); gc_add(bi_emptySVec);
|
||||||
}
|
}
|
||||||
1
src/h.h
1
src/h.h
@ -577,6 +577,7 @@ static inline B incBy(B x, i64 am) { // you most likely don't want am to be nega
|
|||||||
if (isVal(VALIDATE(x))) v(x)->refc+= am;
|
if (isVal(VALIDATE(x))) v(x)->refc+= am;
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
static inline B incByG(B x, i64 am) { v(x)->refc+= am; return x; }
|
||||||
#define ptr_inc(X) ({ AUTO x_ = (X); VALIDATEP((Value*)x_)->refc++; x_; })
|
#define ptr_inc(X) ({ AUTO x_ = (X); VALIDATEP((Value*)x_)->refc++; x_; })
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -123,10 +123,7 @@ B path_dir(B path) {
|
|||||||
if (pia==0) thrM("Empty file path");
|
if (pia==0) thrM("Empty file path");
|
||||||
guaranteeStr(path);
|
guaranteeStr(path);
|
||||||
for (i64 i = (i64)pia-1; i >= 0; i--) {
|
for (i64 i = (i64)pia-1; i >= 0; i--) {
|
||||||
if (o2cu(GetU(path, i))=='/') {
|
if (o2cu(GetU(path, i))=='/') return taga(arr_shVec(TI(path,slice)(path, 0, i+1)));
|
||||||
Arr* r = TI(path,slice)(path, 0, i+1); arr_shVec(r);
|
|
||||||
return taga(r);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
dec(path);
|
dec(path);
|
||||||
u32* rp; B r = m_c32arrv(&rp, 2); rp[0] = '.'; rp[1] = '/';
|
u32* rp; B r = m_c32arrv(&rp, 2); rp[0] = '.'; rp[1] = '/';
|
||||||
@ -141,8 +138,7 @@ B path_name(B path) {
|
|||||||
for (i64 i = (i64)pia-1; i >= 0; i--) {
|
for (i64 i = (i64)pia-1; i >= 0; i--) {
|
||||||
if (o2cu(GetU(path, i))=='/') {
|
if (o2cu(GetU(path, i))=='/') {
|
||||||
if (i == pia-1) thrF("File path ended with a slash: '%R'", path);
|
if (i == pia-1) thrF("File path ended with a slash: '%R'", path);
|
||||||
Arr* r = TI(path,slice)(path, i+1, pia - (i+1)); arr_shVec(r);
|
return taga(arr_shVec(TI(path,slice)(path, i+1, pia - (i+1))));
|
||||||
return taga(r);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
@ -275,10 +271,7 @@ B mmap_file(B path) {
|
|||||||
holder->a = data;
|
holder->a = data;
|
||||||
holder->size = len;
|
holder->size = len;
|
||||||
arr_shVec((Arr*)holder);
|
arr_shVec((Arr*)holder);
|
||||||
|
return taga(arr_shVec(mmapH_slice(taga(holder), 0, len)));
|
||||||
Arr* r = mmapH_slice(taga(holder), 0, len);
|
|
||||||
arr_shVec(r);
|
|
||||||
return taga(r);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
B mmapH_get(Arr* a, usz pos) { thrM("Reading mmapH directly"); }
|
B mmapH_get(Arr* a, usz pos) { thrM("Reading mmapH directly"); }
|
||||||
|
|||||||
5
src/vm.c
5
src/vm.c
@ -1211,8 +1211,7 @@ NOINLINE B vm_fmtPoint(B src, B prepend, B path, usz cs, usz ce) { // consumes p
|
|||||||
SGetU(s)
|
SGetU(s)
|
||||||
while (padStart>0 && o2cu(GetU(s,padStart-1))!='\n') padStart--;
|
while (padStart>0 && o2cu(GetU(s,padStart-1))!='\n') padStart--;
|
||||||
|
|
||||||
Arr* slice = TI(src,slice)(inc(src),srcS, srcE-srcS); arr_shVec(slice);
|
AJOIN(taga(arr_shVec(TI(src,slice)(inc(src),srcS, srcE-srcS))));
|
||||||
AJOIN(taga(slice));
|
|
||||||
cs-= srcS;
|
cs-= srcS;
|
||||||
ce-= srcS;
|
ce-= srcS;
|
||||||
ACHR('\n');
|
ACHR('\n');
|
||||||
@ -1442,7 +1441,7 @@ void profiler_displayResults() {
|
|||||||
u32 c = o2cu(GetU(src, i));
|
u32 c = o2cu(GetU(src, i));
|
||||||
curr+= m[i];
|
curr+= m[i];
|
||||||
if (c=='\n' || i==sia-1) {
|
if (c=='\n' || i==sia-1) {
|
||||||
Arr* sl = TI(src,slice)(inc(src), pi, i-pi+(c=='\n'?0:1)); arr_shVec(sl);
|
Arr* sl = arr_shVec(TI(src,slice)(inc(src), pi, i-pi+(c=='\n'?0:1)));
|
||||||
if (curr==0) printf(" │");
|
if (curr==0) printf(" │");
|
||||||
else printf("%6d│", curr);
|
else printf("%6d│", curr);
|
||||||
printRaw(taga(sl));
|
printRaw(taga(sl));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user