diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index 29e98da1..492e0c7c 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -18,45 +18,40 @@ static Arr* take_impl(usz ria, B x) { // consumes x; returns vā†‘ā„Šš•© without } } -B shape_c1(B t, B x) { - if (isAtm(x)) { - unit: - if (isF64(x)) { - i32 i = (i32)x.f; - if (i == x.f) { - i32* rp; B r = m_i32arrv(&rp, 1); - rp[0] = i; - return r; - } else { - f64* rp; B r = m_f64arrv(&rp, 1); - rp[0] = x.f; - return r; - } - } - if (isC32(x)) { - u32* rp; B r = m_c32arrv(&rp, 1); - rp[0] = o2cu(x); - return r; - } - Arr* ra = m_fillarrp(1); arr_shVec(ra); - fillarr_setFill(ra, asFill(inc(x))); - fillarr_ptr(ra)[0] = x; - return taga(ra); - } else { - usz ia = a(x)->ia; - if (ia==1 && TI(x,elType)ia; + if (ia==1 && TI(x,elType)ia : 1; @@ -177,15 +172,10 @@ B shape_c2(B t, B w, B x) { unit: if (isF64(x)) { decA(xf); i32 n = (i32)x.f; - if (n == x.f) { - i32* rp; Arr* r = m_i32arrp(&rp, nia); arr_shSetU(r, nr, sh); - for (u64 i = 0; i < nia; i++) rp[i] = n; - return taga(r); - } else { - f64* rp; Arr* r = m_f64arrp(&rp, nia); arr_shSetU(r, nr, sh); - for (u64 i = 0; i < nia; i++) rp[i] = x.f; - return taga(r); - } + if (RARE(n!=x.f)) { f64* rp; Arr* r = m_f64arrp(&rp,nia); arr_shSetU(r,nr,sh); for (u64 i=0; i