From 048352f587bf6ccfc31e186660d970a4600d26e6 Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 29 Apr 2023 21:15:46 +0300 Subject: [PATCH] =?UTF-8?q?fix=200=CB=9D=CB=98=202=E2=80=BF2=E2=A5=8A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins.h | 3 ++- src/builtins/cells.c | 2 +- src/builtins/fold.c | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/builtins.h b/src/builtins.h index cec707fa..63d4b791 100644 --- a/src/builtins.h +++ b/src/builtins.h @@ -90,8 +90,9 @@ static inline bool isPervasiveDy (B x) { return (u8)(v(x)->flags-1) <= n_ge; } static inline bool isPervasiveMon(B x) { return (u8)(v(x)->flags-1) <= n_stile; } static bool isPervasiveDyExt(B x) { + assert(isFun(x)); if (isPervasiveDy(x)) return true; - if (isFun(x) && TY(x)==t_md1D) { + if (TY(x)==t_md1D) { Md1D* d = c(Md1D, x); if (d->m1->flags-1 == n_swap) return isPervasiveDy(d->f); } diff --git a/src/builtins/cells.c b/src/builtins/cells.c index 1408d87e..2bc6b369 100644 --- a/src/builtins/cells.c +++ b/src/builtins/cells.c @@ -333,7 +333,7 @@ B for_cells_c1(B f, u32 xr, u32 cr, u32 k, B x, u32 chr) { // F⎉cr x, with arr Md1D* fd = c(Md1D,f); u8 rtid = fd->m1->flags-1; if (rtid==n_const) { f=fd->f; goto const_f; } - if ((rtid==n_fold || rtid==n_insert) && TI(x,elType)!=el_B && k==1 && xr==2 && isPervasiveDyExt(fd->f)) { // TODO extend to any rank x with cr==1 + if ((rtid==n_fold || rtid==n_insert) && TI(x,elType)!=el_B && k==1 && xr==2 && isFun(fd->f) && isPervasiveDyExt(fd->f)) { // TODO extend to any rank x with cr==1 usz *sh = SH(x); usz m = sh[1]; if (m == 1) return select_cells(0, x, cam, k, false); if (m <= 64 && m < sh[0]) return fold_rows(fd, x); diff --git a/src/builtins/fold.c b/src/builtins/fold.c index d07419e3..8c45166f 100644 --- a/src/builtins/fold.c +++ b/src/builtins/fold.c @@ -337,9 +337,9 @@ B insert_c1(Md1D* d, B x) { B f = d->f; if (xia==0) { SLOW2("!𝕎˝𝕩", f, x); return m1c1(rt_insert, f, x); } if (isFun(f)) { u8 rtid = v(f)->flags-1; - if (RNK(x)==1 && isPervasiveDyExt(f)) return m_unit(fold_c1(d, x)); + ur xr = RNK(x); + if (xr==1 && isPervasiveDyExt(f)) return m_unit(fold_c1(d, x)); if (rtid == n_join) { - ur xr = RNK(x); if (xr==1) return x; ShArr* rsh; if (xr>2) {