fix pureFn
This commit is contained in:
parent
2202200a6e
commit
d8751e709f
@ -42,7 +42,7 @@ C32Arr* toC32Arr(B x) {
|
||||
B r = m_c32arrc(x);
|
||||
u32* rp = c32arr_ptr(r);
|
||||
usz ia = a(r)->ia;
|
||||
BS2B xgetU = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) rp[i] = o2c(xgetU(x,i));
|
||||
dec(x);
|
||||
return c(C32Arr,r);
|
||||
|
||||
@ -36,7 +36,7 @@ F64Arr* toF64Arr(B x) {
|
||||
B r = m_f64arrc(x);
|
||||
f64* rp = f64arr_ptr(r);
|
||||
usz ia = a(r)->ia;
|
||||
BS2B xgetU = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) rp[i] = o2f(xgetU(x,i));
|
||||
dec(x);
|
||||
return c(F64Arr,r);
|
||||
|
||||
@ -38,7 +38,7 @@ I32Arr* toI32Arr(B x) {
|
||||
B r = m_i32arrc(x);
|
||||
i32* rp = i32arr_ptr(r);
|
||||
usz ia = a(r)->ia;
|
||||
BS2B xgetU = TI(x).get;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) rp[i] = o2i(xgetU(x,i));
|
||||
dec(x);
|
||||
return c(I32Arr,r);
|
||||
|
||||
26
src/md1.c
26
src/md1.c
@ -2,16 +2,22 @@
|
||||
|
||||
|
||||
bool isPureFn(B x) { // doesn't consume
|
||||
if (!isCallable(x)) return true;
|
||||
if (v(x)->flags) return true;
|
||||
B2B dcf = TI(x).decompose;
|
||||
B xd = dcf(inc(x));
|
||||
B* xdp = harr_ptr(xd);
|
||||
i32 t = o2iu(xdp[0]);
|
||||
if (t<2) { dec(xd); return t==0; }
|
||||
usz xdia = a(xd)->ia;
|
||||
for (i32 i = 1; i<xdia; i++) if(!isPureFn(xdp[i])) { dec(xd); return false; }
|
||||
dec(xd); return true;
|
||||
if (isCallable(x)) {
|
||||
if (v(x)->flags) return true;
|
||||
B2B dcf = TI(x).decompose;
|
||||
B xd = dcf(inc(x));
|
||||
B* xdp = harr_ptr(xd);
|
||||
i32 t = o2iu(xdp[0]);
|
||||
if (t<2) { dec(xd); return t==0; }
|
||||
usz xdia = a(xd)->ia;
|
||||
for (i32 i = 1; i<xdia; i++) if(!isPureFn(xdp[i])) { dec(xd); return false; }
|
||||
dec(xd); return true;
|
||||
} else if (isArr(x)) {
|
||||
usz ia = a(x)->ia;
|
||||
BS2B xgetU = TI(x).getU;
|
||||
for (usz i = 0; i < ia; i++) if (!isPureFn(xgetU(x,i))) return false;
|
||||
return true;
|
||||
} else return isNum(x) || isC32(x);
|
||||
}
|
||||
|
||||
B homFil1(B f, B r, B xf) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user