diff --git a/src/builtins/cells.c b/src/builtins/cells.c index fa086e79..67b98d02 100644 --- a/src/builtins/cells.c +++ b/src/builtins/cells.c @@ -420,7 +420,7 @@ B rank_c1(Md2D* d, B x) { B f = d->f; B g = d->g; } -static NOINLINE B rank2_empty(B f, B w, ur wk, B x, ur xk) { // TODO pass chr around everywhere +static NOINLINE B rank2_empty(B f, B w, ur wk, B x, ur xk, u32 chr) { B fa = wk>xk?w:x; ur k = wk>xk?wk:xk; usz* sh = SH(fa); @@ -428,8 +428,8 @@ static NOINLINE B rank2_empty(B f, B w, ur wk, B x, ur xk) { // TODO pass chr ar if (!sho) { s0=sh[0]; sh=&s0; } else { s=ptr_inc(shObj(fa)); } if (!DO_CELL_CATCH || !isPureFn(f)) { dec(w); dec(x); goto empty; } B r; - if (wk) w = to_fill_cell(w, wk, U'โމ'); - if (xk) x = to_fill_cell(x, xk, U'โމ'); + if (wk) w = to_fill_cell(w, wk, chr); + if (xk) x = to_fill_cell(x, xk, chr); if (CATCH) { SET_FILL_ERRORED; freeThrown(); @@ -444,10 +444,10 @@ static NOINLINE B rank2_empty(B f, B w, ur wk, B x, ur xk) { // TODO pass chr ar return r; } -NOINLINE B for_cells_AS(B f, B w, B x, ur wcr, ur wr) { +NOINLINE B for_cells_AS(B f, B w, B x, ur wcr, ur wr, u32 chr) { ur wk = wr-wcr; assert(wk>0 && wcr1) shcpy(rsh, wsh, wk); decG(w); return bqn_merge(HARR_O(r).b); } -NOINLINE B for_cells_SA(B f, B w, B x, ur xcr, ur xr) { +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); @@ -480,7 +480,7 @@ NOINLINE B for_cells_SA(B f, B w, B x, ur xcr, ur xr) { if (xk>1) shcpy(rsh, xsh, xk); decG(x); return bqn_merge(HARR_O(r).b); } -NOINLINE B for_cells_AA(B f, B w, B x, ur wcr, ur xcr) { +NOINLINE B for_cells_AA(B f, B w, B x, ur wcr, ur xcr, u32 chr) { assert(isArr(w) && isArr(x)); ur wr = RNK(w); ur wk = wr-wcr; usz* wsh = SH(w); ur xr = RNK(x); ur xk = xr-xcr; usz* xsh = SH(x); @@ -491,12 +491,12 @@ NOINLINE B for_cells_AA(B f, B w, B x, ur wcr, ur xcr) { usz cam = 1; for (usz i = 0; i < k; i++) { usz wl = wsh[i], xl = xsh[i]; - if (wl != xl) thrF("โމ: Argument frames don't agree (%H โ‰ก โ‰ข๐•จ, %H โ‰ก โ‰ข๐•ฉ, common frame of %i axes)", w, x, k); + if (wl != xl) thrF("%c: Argument frames don't agree (%H โ‰ก โ‰ข๐•จ, %H โ‰ก โ‰ข๐•ฉ, common frame of %i axes)", chr, w, x, k); cam*= wsh[i]; } usz ext = shProd(zsh, k, zk); cam*= ext; - if (cam==0) return rank2_empty(f, w, wk, x, xk); + if (cam==0) return rank2_empty(f, w, wk, x, xk, chr); if (isFun(f) && wk==1 && xk==1) { u8 rtid = v(f)->flags-1; if (rtid==n_feq || rtid==n_fne) { @@ -565,17 +565,17 @@ B rank_c2(Md2D* d, B w, B x) { B f = d->f; B g = d->g; if (isAtm(x)) goto r0X; else { xr = RNK(x); if ((xcr=cell_rank(xr,xf)) == xr) goto r0X; else goto neither; } r0Wt:if(isAtm(x)) goto r0WX; else { xr = RNK(x); if ((xcr=cell_rank(xr,xf)) == xr) goto r0WX; else goto r0W; } - neither: return for_cells_AA(f, w, x, wcr, xcr); - r0X: return for_cells_AS(f, w, x, wcr, wr); - r0W: return for_cells_SA(f, w, x, xcr, xr); + neither: return for_cells_AA(f, w, x, wcr, xcr, U'โމ'); + r0X: return for_cells_AS(f, w, x, wcr, wr, U'โމ'); + r0W: return for_cells_SA(f, w, x, xcr, xr, U'โމ'); r0WX: return c2wrap(f, w, x); } B cell_c2(Md1D* d, B w, B x) { B f = d->f; ur wr, xr; if (isAtm(w) || (wr=RNK(w))==0) { if (isAtm(x) || (xr=RNK(x))==0) return c2wrap(f, w, x); - return for_cells_SA(f, w, x, xr-1, xr); + return for_cells_SA(f, w, x, xr-1, xr, U'ห˜'); } - if (isAtm(x) || (xr=RNK(x))==0) return for_cells_AS(f, w, x, wr-1, wr); - return for_cells_AA(f, w, x, wr-1, xr-1); + if (isAtm(x) || (xr=RNK(x))==0) return for_cells_AS(f, w, x, wr-1, wr, U'ห˜'); + return for_cells_AA(f, w, x, wr-1, xr-1, U'ห˜'); }