diff --git a/src/builtins/fold.c b/src/builtins/fold.c index 85cbe08b..ff8f35e8 100644 --- a/src/builtins/fold.c +++ b/src/builtins/fold.c @@ -278,3 +278,34 @@ B fold_c2(Md1D* d, B w, B x) { B f = d->f; decG(x); return c; } + +u64 usum(B x) { // doesn't consume; will error on non-integers, or elements <0, or if sum overflows u64 + assert(isArr(x)); + u64 r = 0; + usz xia = IA(x); + u8 xe = TI(x,elType); + if (xe==el_bit) return bit_sum(bitarr_ptr(x), xia); + else if (xe==el_i8 ) { i8* p = i8any_ptr (x); i8 m=0; for (usz i = 0; i < xia; ) { usz b=1<< 8; i16 s=0; for (usz e = xia-i