From 0a30c7b4e6b2be7aace51083ac25d29846b0fb9a Mon Sep 17 00:00:00 2001 From: dzaima Date: Sat, 29 Apr 2023 21:05:55 +0300 Subject: [PATCH] =?UTF-8?q?more=20generic=20n=E2=8A=B8=E2=86=91=E2=8E=89k?= =?UTF-8?q?=20&=20n=E2=8A=B8=E2=86=93=E2=8E=89k=20&=20n=E2=8A=B8=E2=8D=89?= =?UTF-8?q?=E2=8E=89k?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/builtins/cells.c | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/builtins/cells.c b/src/builtins/cells.c index a3319e4a..1408d87e 100644 --- a/src/builtins/cells.c +++ b/src/builtins/cells.c @@ -460,18 +460,27 @@ NOINLINE B for_cells_SA(B f, B w, B x, ur xcr, ur xr, u32 chr) { ur xk = xr-xcr; assert(xk>0 && xcrflags-1; - if (rtid==n_select && isF64(w) && xr==2) return select_cells(WRAP(o2i64(w), SH(x)[1], thrF("āŠ: Indexing out-of-bounds (š•Øā‰”%R, %sā‰”ā‰ š•©)", w, cam)), x, cam, 1, false); - if (rtid==n_pick && TI(x,arrD1) && xr==2 && isF64(w)) return select_cells(WRAP(o2i64(w), SH(x)[1], thrF("āŠ‘: Indexing out-of-bounds (š•Øā‰”%R, %sā‰”ā‰ š•©)", w, cam)), x, cam, 1, true); - if ((rtid==n_shifta || rtid==n_shiftb) && xr==2 && isAtm(w)) { + if (rtid==n_select && xk==1 && isF64(w) && xr==2) return select_cells(WRAP(o2i64(w), SH(x)[1], thrF("āŠ: Indexing out-of-bounds (š•Øā‰”%R, %sā‰”ā‰ š•©)", w, cam)), x, cam, 1, false); + if (rtid==n_pick && xk==1 && TI(x,arrD1) && xr==2 && isF64(w)) return select_cells(WRAP(o2i64(w), SH(x)[1], thrF("āŠ‘: Indexing out-of-bounds (š•Øā‰”%R, %sā‰”ā‰ š•©)", w, cam)), x, cam, 1, true); + if ((rtid==n_shifta || rtid==n_shiftb) && xk==1 && xr==2 && isAtm(w)) { if (isArr(w)) { B w0=w; w = IGet(w,0); decG(w0); } return shift_cells(w, x, SH(x)[0], SH(x)[1], el_or(TI(x,elType), selfElType(w)), rtid); } - if (rtid==n_take && xr>1 && isF64(w)) return takedrop_highrank(1, m_hvec2(m_f64(SH(x)[0]), w), x); - if (rtid==n_drop && xr>1 && isF64(w)) return takedrop_highrank(0, m_hvec2(m_f64(0), w), x); - if (rtid==n_transp && q_usz(w)) { usz a=o2sG(w); if (aflags-1; if (rtid==n_feq || rtid==n_fne) { Arr* r = match_cells(rtid!=n_feq, w, x, wr, xr, wk, cam); - if (r!=NULL) { - usz* rsh = arr_shAlloc(r, zk); - if (rsh) shcpy(rsh, zsh, zk); - decG(w); decG(x); return taga(r); - } + if (r==NULL) goto generic; + usz* rsh = arr_shAlloc(r, zk); + if (rsh) shcpy(rsh, zsh, zk); + decG(w); decG(x); return taga(r); } } } + generic:; M_APD_SH(r, zk, zsh); S_KSLICES(w, wsh, wk, xkM? cam0 : cam, 1) usz wp = 0;