diff --git a/src/c32arr.c b/src/c32arr.c index c3eb5822..7834bf68 100644 --- a/src/c32arr.c +++ b/src/c32arr.c @@ -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); diff --git a/src/f64arr.c b/src/f64arr.c index 49f39a2f..1a6673fb 100644 --- a/src/f64arr.c +++ b/src/f64arr.c @@ -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); diff --git a/src/i32arr.c b/src/i32arr.c index 61364c12..0304ae0d 100644 --- a/src/i32arr.c +++ b/src/i32arr.c @@ -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); diff --git a/src/md1.c b/src/md1.c index 38ec2409..f0918f14 100644 --- a/src/md1.c +++ b/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; iflags) 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; iia; + 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) {