improving loop counter variable types
This commit is contained in:
parent
68c2332fef
commit
99896fbace
@ -204,18 +204,25 @@ B slash_c1(B t, B x) {
|
|||||||
if(s<0) thrM("/: Argument must consist of natural numbers");
|
if(s<0) thrM("/: Argument must consist of natural numbers");
|
||||||
usz xia = a(x)->ia;
|
usz xia = a(x)->ia;
|
||||||
if (RARE(xia>=I32_MAX)) return slash_c1R(x, s);
|
if (RARE(xia>=I32_MAX)) return slash_c1R(x, s);
|
||||||
i32* rp; B r = m_i32arrv(&rp, s); usz ri = 0;
|
i32* rp; B r = m_i32arrv(&rp, s);
|
||||||
if (TI(x,elType)==el_i32) {
|
if (TI(x,elType)==el_i32) {
|
||||||
i32* xp = i32any_ptr(x);
|
i32* xp = i32any_ptr(x);
|
||||||
|
while (xia>0 && !xp[xia-1]) xia--;
|
||||||
for (i32 i = 0; i < xia; i++) {
|
for (i32 i = 0; i < xia; i++) {
|
||||||
if (RARE(xp[i])<0) thrF("/: Argument must consist of natural numbers (contained %i)", xp[i]);
|
i32 c = xp[i];
|
||||||
for (usz j = 0; j < xp[i]; j++) rp[ri++] = i;
|
if (LIKELY(c==0 || c==1)) {
|
||||||
|
*rp = i;
|
||||||
|
rp+= c;
|
||||||
|
} else {
|
||||||
|
if (RARE(c)<0) thrF("/: Argument must consist of natural numbers (contained %i)", c);
|
||||||
|
for (i32 j = 0; j < c; j++) *rp++ = i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
BS2B xgetU = TI(x,getU);
|
BS2B xgetU = TI(x,getU);
|
||||||
for (i32 i = 0; i < xia; i++) {
|
for (u64 i = 0; i < xia; i++) {
|
||||||
usz c = o2s(xgetU(x, i));
|
usz c = o2s(xgetU(x, i));
|
||||||
for (usz j = 0; j < c; j++) rp[ri++] = i;
|
for (u64 j = 0; j < c; j++) *rp++ = i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dec(x);
|
dec(x);
|
||||||
@ -256,7 +263,7 @@ B slash_c2(B t, B w, B x) {
|
|||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
i32 cw = wp[i];
|
i32 cw = wp[i];
|
||||||
i32 cx = xp[i];
|
i32 cx = xp[i];
|
||||||
for (usz j = 0; j < cw; j++) *rp++ = cx;
|
for (i64 j = 0; j < cw; j++) *rp++ = cx;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(w); dec(x);
|
||||||
@ -267,7 +274,7 @@ B slash_c2(B t, B w, B x) {
|
|||||||
for (usz i = 0; i < wia; i++) {
|
for (usz i = 0; i < wia; i++) {
|
||||||
i32 cw = wp[i];
|
i32 cw = wp[i];
|
||||||
f64 cx = xp[i];
|
f64 cx = xp[i];
|
||||||
for (usz j = 0; j < cw; j++) *rp++ = cx;
|
for (i64 j = 0; j < cw; j++) *rp++ = cx;
|
||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(w); dec(x);
|
||||||
return r;
|
return r;
|
||||||
@ -278,7 +285,7 @@ B slash_c2(B t, B w, B x) {
|
|||||||
i32 cw = wp[i];
|
i32 cw = wp[i];
|
||||||
if (cw==0) continue;
|
if (cw==0) continue;
|
||||||
B cx = xgetU(x, i);
|
B cx = xgetU(x, i);
|
||||||
for (usz j = 0; j < cw; j++) r.a[ri++] = inc(cx);
|
for (i64 j = 0; j < cw; j++) r.a[ri++] = inc(cx);
|
||||||
}
|
}
|
||||||
dec(w); dec(x);
|
dec(w); dec(x);
|
||||||
return withFill(harr_fv(r), xf);
|
return withFill(harr_fv(r), xf);
|
||||||
|
|||||||
@ -22,7 +22,7 @@ B toCells(B x) {
|
|||||||
usz cr = rnk(x)-1;
|
usz cr = rnk(x)-1;
|
||||||
ShArr* csh = m_shArr(cr);
|
ShArr* csh = m_shArr(cr);
|
||||||
usz* xsh = a(x)->sh;
|
usz* xsh = a(x)->sh;
|
||||||
for (i32 i = 0; i < cr; i++) csh->a[i] = xsh[i+1];
|
for (u64 i = 0; i < cr; i++) csh->a[i] = xsh[i+1];
|
||||||
for (; i < cam; i++) {
|
for (; i < cam; i++) {
|
||||||
Arr* s = slice(inc(x), p);
|
Arr* s = slice(inc(x), p);
|
||||||
arr_shSetI(s, csz, cr, csh);
|
arr_shSetI(s, csz, cr, csh);
|
||||||
|
|||||||
@ -319,7 +319,7 @@ NOINLINE bool atomEqualR(B w, B x) {
|
|||||||
if (o2i(wdp[0])<=1) { dec(wd);dec(xd); return false; }
|
if (o2i(wdp[0])<=1) { dec(wd);dec(xd); return false; }
|
||||||
usz wia = a(wd)->ia;
|
usz wia = a(wd)->ia;
|
||||||
if (wia!=a(xd)->ia) { dec(wd);dec(xd); return false; }
|
if (wia!=a(xd)->ia) { dec(wd);dec(xd); return false; }
|
||||||
for (i32 i = 0; i<wia; i++) if(!equal(wdp[i], xdp[i]))
|
for (u64 i = 0; i<wia; i++) if(!equal(wdp[i], xdp[i]))
|
||||||
{ dec(wd);dec(xd); return false; }
|
{ dec(wd);dec(xd); return false; }
|
||||||
dec(wd);dec(xd); return true;
|
dec(wd);dec(xd); return true;
|
||||||
}
|
}
|
||||||
@ -366,7 +366,7 @@ bool atomEEqual(B w, B x) { // doesn't consume (not that that matters really cur
|
|||||||
if (o2i(wdp[0])<=1) { dec(wd);dec(xd); return false; }
|
if (o2i(wdp[0])<=1) { dec(wd);dec(xd); return false; }
|
||||||
usz wia = a(wd)->ia;
|
usz wia = a(wd)->ia;
|
||||||
if (wia!=a(xd)->ia) { dec(wd);dec(xd); return false; }
|
if (wia!=a(xd)->ia) { dec(wd);dec(xd); return false; }
|
||||||
for (i32 i = 0; i<wia; i++) if(!eequal(wdp[i], xdp[i]))
|
for (u64 i = 0; i<wia; i++) if(!eequal(wdp[i], xdp[i]))
|
||||||
{ dec(wd);dec(xd); return false; }
|
{ dec(wd);dec(xd); return false; }
|
||||||
dec(wd);dec(xd); return true;
|
dec(wd);dec(xd); return true;
|
||||||
}
|
}
|
||||||
@ -432,7 +432,7 @@ bool isPureFn(B x) { // doesn't consume
|
|||||||
i32 t = o2iu(xdp[0]);
|
i32 t = o2iu(xdp[0]);
|
||||||
if (t<2) { dec(xd); return t==0; }
|
if (t<2) { dec(xd); return t==0; }
|
||||||
usz xdia = a(xd)->ia;
|
usz xdia = a(xd)->ia;
|
||||||
for (i32 i = 1; i<xdia; i++) if(!isPureFn(xdp[i])) { dec(xd); return false; }
|
for (u64 i = 1; i<xdia; i++) if(!isPureFn(xdp[i])) { dec(xd); return false; }
|
||||||
dec(xd); return true;
|
dec(xd); return true;
|
||||||
} else if (isArr(x)) {
|
} else if (isArr(x)) {
|
||||||
usz ia = a(x)->ia;
|
usz ia = a(x)->ia;
|
||||||
|
|||||||
@ -148,13 +148,13 @@ NOINLINE Block* bqn_compSc(B str, B path, B args, Scope* sc, bool repl) { // con
|
|||||||
i32 depth = repl? -1 : 0;
|
i32 depth = repl? -1 : 0;
|
||||||
Scope* csc = sc;
|
Scope* csc = sc;
|
||||||
while (csc) {
|
while (csc) {
|
||||||
for (i32 i = 0; i < csc->varAm; i++) {
|
for (u64 i = 0; i < csc->varAm; i++) {
|
||||||
i32 nameID = csc->body->varIDs[i];
|
i32 nameID = csc->body->varIDs[i];
|
||||||
B nl = csc->body->nsDesc->nameList;
|
B nl = csc->body->nsDesc->nameList;
|
||||||
vName = vec_add(vName, TI(nl,get)(nl, nameID));
|
vName = vec_add(vName, TI(nl,get)(nl, nameID));
|
||||||
vDepth = vec_add(vDepth, m_i32(depth));
|
vDepth = vec_add(vDepth, m_i32(depth));
|
||||||
}
|
}
|
||||||
if (csc->ext) for (i32 i = 0; i < csc->ext->varAm; i++) {
|
if (csc->ext) for (u64 i = 0; i < csc->ext->varAm; i++) {
|
||||||
vName = vec_add(vName, inc(csc->ext->vars[i+csc->ext->varAm]));
|
vName = vec_add(vName, inc(csc->ext->vars[i+csc->ext->varAm]));
|
||||||
vDepth = vec_add(vDepth, m_i32(depth));
|
vDepth = vec_add(vDepth, m_i32(depth));
|
||||||
}
|
}
|
||||||
@ -205,7 +205,7 @@ static inline void load_init() { // very last init function
|
|||||||
/* ⚇⍟⎊ */ 0,1,1
|
/* ⚇⍟⎊ */ 0,1,1
|
||||||
};
|
};
|
||||||
assert(sizeof(fruntime)/sizeof(B) == rtLen);
|
assert(sizeof(fruntime)/sizeof(B) == rtLen);
|
||||||
for (i32 i = 0; i < rtLen; i++) inc(fruntime[i]);
|
for (u64 i = 0; i < rtLen; i++) inc(fruntime[i]);
|
||||||
B frtObj = m_caB(rtLen, fruntime);
|
B frtObj = m_caB(rtLen, fruntime);
|
||||||
|
|
||||||
#ifndef NO_RT
|
#ifndef NO_RT
|
||||||
@ -375,7 +375,7 @@ static B empty_getU(B x, usz n) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline void base_init() { // very first init function
|
static inline void base_init() { // very first init function
|
||||||
for (i32 i = 0; i < t_COUNT; i++) {
|
for (u64 i = 0; i < t_COUNT; i++) {
|
||||||
TIi(i,free) = def_free;
|
TIi(i,free) = def_free;
|
||||||
TIi(i,visit) = def_visit;
|
TIi(i,visit) = def_visit;
|
||||||
TIi(i,get) = def_get;
|
TIi(i,get) = def_get;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user