use getU more
This commit is contained in:
parent
76dbabb03d
commit
271479c511
@ -60,10 +60,10 @@ bool c32arr_canStore(B x) { return isC32(x); }
|
||||
|
||||
bool eqStr(B w, u32* x) {
|
||||
if (!isArr(w) || rnk(w)!=1) return false;
|
||||
BS2B wget = TI(w).get;
|
||||
BS2B wgetU = TI(w).getU;
|
||||
u64 i = 0;
|
||||
while (x[i]) {
|
||||
B c = wget(w, i);
|
||||
B c = wgetU(w, i);
|
||||
if (!isC32(c) || x[i]!=(u32)c.u) return false;
|
||||
i++;
|
||||
}
|
||||
|
||||
2
src/h.h
2
src/h.h
@ -316,7 +316,7 @@ B m_i32(i32 n) { return m_f64(n); }
|
||||
B m_error() { return tag(4, TAG_TAG); }
|
||||
B m_usz(usz n) { return n==(i32)n? m_i32(n) : m_f64(n); }
|
||||
|
||||
i32 o2i (B x) { if ((i32)x.f!=x.f) thrM("Expected integer"); return (i32)x.f; }
|
||||
i32 o2i (B x) { if ((i32)x.f!=x.f) thrM("Expected integer"); return (i32)x.f; } // i have no clue whether these consume or not, but it doesn't matter
|
||||
usz o2s (B x) { if ((usz)x.f!=x.f) thrM("Expected integer"); return (usz)x.f; }
|
||||
i64 o2i64 (B x) { if ((i64)x.f!=x.f) thrM("Expected integer"); return (i64)x.f; }
|
||||
f64 o2f (B x) { if (!isNum(x)) thrM("Expected integer"); return x.f; }
|
||||
|
||||
@ -38,8 +38,8 @@ I32Arr* toI32Arr(B x) {
|
||||
B r = m_i32arrc(x);
|
||||
i32* rp = i32arr_ptr(r);
|
||||
usz ia = a(r)->ia;
|
||||
BS2B xget = TI(x).get;
|
||||
for (usz i = 0; i < ia; i++) rp[i] = o2i(xget(x,i));
|
||||
BS2B xgetU = TI(x).get;
|
||||
for (usz i = 0; i < ia; i++) rp[i] = o2i(xgetU(x,i));
|
||||
dec(x);
|
||||
return c(I32Arr,r);
|
||||
}
|
||||
|
||||
@ -19,15 +19,14 @@ B tbl_c2(B d, B w, B x) { B f = c(Md1D,d)->f;
|
||||
memcpy(rsh+wr, a(x)->sh, xr*sizeof(usz));
|
||||
}
|
||||
|
||||
BS2B wget = TI(w).get;
|
||||
BS2B wgetU = TI(w).getU;
|
||||
BS2B xget = TI(x).get;
|
||||
usz ri = 0;
|
||||
for (usz wi = 0; wi < wia; wi++) {
|
||||
B cw = wget(w,wi);
|
||||
B cw = wgetU(w,wi);
|
||||
for (usz xi = 0; xi < xia; xi++) {
|
||||
r.a[ri++] = c2(f, inc(cw), xget(x,xi));
|
||||
}
|
||||
dec(cw);
|
||||
}
|
||||
dec(w); dec(x);
|
||||
return r.b;
|
||||
|
||||
15
src/stuff.c
15
src/stuff.c
@ -74,9 +74,9 @@ void printRaw(B x) {
|
||||
else err("bad printRaw argument: atom arguments should be either numerical or characters");
|
||||
} else {
|
||||
usz ia = a(x)->ia;
|
||||
BS2B xget = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
B c = xget(x,i);
|
||||
B c = xgetU(x,i);
|
||||
if (c.u==0 || noFill(c)) { printf(" "); continue; }
|
||||
if (!isC32(c)) err("bad printRaw argument: expected all character items");
|
||||
printUTF8((u32)c.u);
|
||||
@ -92,14 +92,9 @@ bool equal(B w, B x) { // doesn't consume
|
||||
if (!wa) return o2iu(eq_c2(bi_N, inc(w), inc(x)))?1:0;
|
||||
if (!eqShape(w,x)) return false;
|
||||
usz ia = a(x)->ia;
|
||||
BS2B xget = TI(x).get;
|
||||
BS2B wget = TI(w).get;
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
B wc=wget(w,i); B xc=xget(x,i); // getdec
|
||||
bool eq=equal(wc,xc);
|
||||
decR(wc); decR(xc);
|
||||
if(!eq) return false;
|
||||
}
|
||||
BS2B xgetU = TI(x).getU;
|
||||
BS2B wgetU = TI(w).getU;
|
||||
for (usz i = 0; i < ia; i++) if(!equal(wgetU(w,i),xgetU(x,i))) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
22
src/sysfn.c
22
src/sysfn.c
@ -50,16 +50,16 @@ B fill_c2(B t, B w, B x) { // TODO not set fill for typed arrays
|
||||
B grLen_c1(B t, B x) {
|
||||
i64 ria = -1;
|
||||
usz ia = a(x)->ia;
|
||||
BS2B xget = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
i64 c = o2i64(xget(x, i));
|
||||
i64 c = o2i64(xgetU(x, i));
|
||||
if (c>ria) ria = c;
|
||||
}
|
||||
ria++;
|
||||
HArr_p r = m_harrv(ria);
|
||||
for (usz i = 0; i < ria; i++) r.a[i] = m_f64(0);
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
i64 n = o2i64(xget(x, i));
|
||||
i64 n = o2i64(xgetU(x, i));
|
||||
if (n>=0) r.a[n].f++;
|
||||
}
|
||||
dec(x);
|
||||
@ -68,16 +68,16 @@ B grLen_c1(B t, B x) {
|
||||
B grLen_c2(B t, B w, B x) {
|
||||
i64 ria = o2i64(w)-1;
|
||||
usz ia = a(x)->ia;
|
||||
BS2B xget = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
i64 c = o2i64(xget(x, i));
|
||||
i64 c = o2i64(xgetU(x, i));
|
||||
if (c>ria) ria = c;
|
||||
}
|
||||
ria++;
|
||||
HArr_p r = m_harrv(ria);
|
||||
for (usz i = 0; i < ria; i++) r.a[i] = m_f64(0);
|
||||
for (usz i = 0; i < ia; i++) {
|
||||
i64 n = o2i64(xget(x, i));
|
||||
i64 n = o2i64(xgetU(x, i));
|
||||
if (n>=0) r.a[n].f++;
|
||||
}
|
||||
dec(x);
|
||||
@ -89,15 +89,15 @@ B grOrd_c2(B t, B w, B x) {
|
||||
usz xia = a(x)->ia;
|
||||
if (wia==0) { dec(w); dec(x); return c1(bi_ud, m_i32(0)); }
|
||||
if (xia==0) { dec(w); return x; }
|
||||
BS2B wget = TI(w).get;
|
||||
BS2B xget = TI(x).get;
|
||||
BS2B wgetU = TI(w).getU;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
usz tmp[wia];
|
||||
tmp[0] = 0;
|
||||
for (int i = 1; i < wia; i++) tmp[i] = tmp[i-1]+o2s(wget(w,i-1));
|
||||
usz ria = tmp[wia-1]+o2s(wget(w,wia-1));
|
||||
for (int i = 1; i < wia; i++) tmp[i] = tmp[i-1]+o2s(wgetU(w,i-1));
|
||||
usz ria = tmp[wia-1]+o2s(wgetU(w,wia-1));
|
||||
HArr_p r = m_harrv(ria);
|
||||
for (usz i = 0; i < xia; i++) {
|
||||
i64 c = o2i64(xget(x,i));
|
||||
i64 c = o2i64(xgetU(x,i));
|
||||
if (c>=0) r.a[tmp[c]++] = m_usz(i);
|
||||
}
|
||||
dec(w);
|
||||
|
||||
6
src/vm.c
6
src/vm.c
@ -222,11 +222,9 @@ void v_set(Scope* sc, B s, B x, bool upd) { // frees s, doesn't consume x
|
||||
if (!eqShape(s, x)) err("spread assignment: mismatched shape");
|
||||
usz ia = a(x)->ia;
|
||||
B* sp = harr_ptr(s);
|
||||
BS2B xget = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (u64 i = 0; i < ia; i++) {
|
||||
B c = xget(x,i);
|
||||
v_set(sc, sp[i], c, upd);
|
||||
decR(c); // should never free actually
|
||||
v_set(sc, sp[i], xgetU(x,i), upd);
|
||||
}
|
||||
dec(s);
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user