From e200bbc5f9c6bdec22c1c9073fd7fb3f2c2a3799 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 29 Apr 2023 17:00:35 +0300 Subject: [PATCH] =?UTF-8?q?move=20=E2=86=95list=20to=20its=20own=20functio?= =?UTF-8?q?n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/fns.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/builtins/fns.c b/src/builtins/fns.c index 63fea127..026fdb3a 100644 --- a/src/builtins/fns.c +++ b/src/builtins/fns.c @@ -52,19 +52,7 @@ static B* ud_rec(B* p, usz d, usz r, i32* pos, usz* sh) { } return p; } -Arr* bitUD[3]; -B bit2x[2]; // ⟨0‿1 ⋄ 1‿0⟩ -B ud_c1(B t, B x) { - if (isAtm(x)) { - usz xu = o2s(x); - if (LIKELY(xu<=I8_MAX+1)) { - if (RARE(xu<=2)) return taga(ptr_inc(bitUD[xu])); - i8* rp; B r = m_i8arrv(&rp, xu); - NOUNROLL for (usz i = 0; i < xu; i++) rp[i] = i; - return r; - } - return intRange(0, xu); - } +NOINLINE B list_range(B x) { SGetU(x) usz xia = IA(x); if (RNK(x)!=1) thrF("↕: Argument must be either an integer or integer list (had rank %i)", RNK(x)); @@ -99,6 +87,20 @@ B ud_c1(B t, B x) { return taga(r); } +Arr* bitUD[3]; +B bit2x[2]; // ⟨0‿1 ⋄ 1‿0⟩ +B ud_c1(B t, B x) { + if (!isAtm(x)) return list_range(x); + usz xu = o2s(x); + if (LIKELY(xu<=I8_MAX+1)) { + if (RARE(xu<=2)) return taga(ptr_inc(bitUD[xu])); + i8* rp; B r = m_i8arrv(&rp, xu); + NOUNROLL for (usz i = 0; i < xu; i++) rp[i] = i; + return r; + } + return intRange(0, xu); +} + B slash_c2(B t, B w, B x); B ud_c2(B t, B w, B x) {