diff --git a/src/builtins/select.c b/src/builtins/select.c index c403e403..89a884ab 100644 --- a/src/builtins/select.c +++ b/src/builtins/select.c @@ -57,9 +57,27 @@ B select_c2(B t, B w, B x) { ur xr = RNK(x); if (isAtm(w)) { if (xr==0) thrM("โŠ: ๐•ฉ cannot be a unit"); - usz csz = arr_csz(x); usz cam = SH(x)[0]; usz wi = WRAP(o2i64(w), cam, thrF("โŠ: Indexing out-of-bounds (๐•จโ‰ก%R, %sโ‰กโ‰ ๐•ฉ)", w, cam)); + if (xr==1) { + B xf = getFillR(x); + B xv = IGet(x, wi); + B rb; + if (isNum(xf) || isC32(xf)) { + rb = m_atomUnit(xv); + } else if (noFill(xf)) { + rb = m_hunit(xv); + } else { + Arr* r = m_fillarrp(1); + arr_shAtm(r); + fillarr_ptr(r)[0] = xv; + fillarr_setFill(r, xf); + rb = taga(r); + } + decG(x); + return rb; + } + usz csz = arr_csz(x); Arr* r = TI(x,slice)(incG(x), wi*csz, csz); usz* sh = arr_shAlloc(r, xr-1); if (sh) shcpy(sh, SH(x)+1, xr-1);