From 44dc6024255a845e70dca74c611aa87b2824377d Mon Sep 17 00:00:00 2001 From: dzaima Date: Mon, 20 Dec 2021 00:52:53 +0200 Subject: [PATCH] =?UTF-8?q?native=20rank>2=20=E2=8D=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/md1.c | 2 +- src/builtins/sfns.c | 71 +++++++++++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 29 deletions(-) diff --git a/src/builtins/md1.c b/src/builtins/md1.c index 13e71c38..b4f74d56 100644 --- a/src/builtins/md1.c +++ b/src/builtins/md1.c @@ -345,7 +345,7 @@ B cell_c1(Md1D* d, B x) { B f = d->f; B r = c1(f, x); return isAtm(r)? m_atomUnit(r) : r; } - if (f.u==bi_lt.u && a(x)->ia!=0 && rnk(x)>1) return toCells(x); + if (Q_BI(f,lt) && a(x)->ia!=0 && rnk(x)>1) return toCells(x); usz cr = rnk(x)-1; usz cam = a(x)->sh[0]; usz csz = arr_csz(x); diff --git a/src/builtins/sfns.c b/src/builtins/sfns.c index 1759db0a..8f149f63 100644 --- a/src/builtins/sfns.c +++ b/src/builtins/sfns.c @@ -1183,37 +1183,52 @@ B reverse_uc1(B t, B o, B x) { extern B rt_transp; B transp_c1(B t, B x) { if (RARE(isAtm(x))) return m_atomUnit(x); - if (rnk(x)==1) return x; - if (rnk(x)==2) { - usz ia = a(x)->ia; - usz h = a(x)->sh[0]; - usz w = a(x)->sh[1]; - Arr* r; - switch(TI(x,elType)) { default: UD; - case el_i8: { i8* xp=i8any_ptr (x); i8* rp; r=m_i8arrp (&rp,ia); for(usz y=0;ya; } // TODO extract this to an inline function - - HArr_p p = m_harrUp(ia); - for(usz y=0;yia; + usz* xsh = a(x)->sh; + usz h = xsh[0]; + usz w = xsh[1]; + for (usz i = 2; RARE(i < xr); i++) w*= a(x)->sh[i]; + + Arr* r; + usz xi = 0; + switch(TI(x,elType)) { default: UD; + case el_i8: { i8* xp=i8any_ptr (x); i8* rp; r=m_i8arrp (&rp,ia); for(usz y=0;ya; } // TODO extract this to an inline function + + HArr_p p = m_harrUp(ia); + for(usz y=0;y