diff --git a/src/builtins/select.c b/src/builtins/select.c index 6e98ea7e..24604316 100644 --- a/src/builtins/select.c +++ b/src/builtins/select.c @@ -475,8 +475,9 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu MAKE_MUT(r, cam*csz); mut_init_copy(r, x, re); NOGC_E; - MUTG_INIT(r); SGet(rep) + MUTG_INIT(r); if (csz==1) { + SGet(rep) for (usz i = 0; i < wia; i++) { READ_W(cw, i); B cn = Get(rep, i); @@ -485,9 +486,10 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu mut_setG(r, cw, cn); } } else { + SGetU(rep) for (usz i = 0; i < wia; i++) { READ_W(cw, i); - EQ(for (usz j = 0; j < csz; j++), !compatible(mut_getU(r, cw*csz + j), Get(rep, i*csz + j))); + EQ(for (usz j = 0; j < csz; j++), !compatible(mut_getU(r, cw*csz + j), GetU(rep, i*csz + j))); for (usz j = 0; j < csz; j++) mut_rm(r, cw*csz + j); mut_copyG(r, cw*csz, rep, i*csz, csz); } @@ -533,8 +535,8 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu case el_B: { ra = reuse? a(REUSE(x)) : cpyHArr(x); B* rp = harrv_ptr(ra); - SGet(rep) if (csz==1) { + SGet(rep) for (usz i = 0; i < wia; i++) { READ_W(cw, i); B cn = Get(rep, i); @@ -543,9 +545,10 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu rp[cw] = cn; } } else { + SGetU(rep) for (usz i = 0; i < wia; i++) { READ_W(cw, i); - EQ(for (usz j = 0; j < csz; j++), !compatible(Get(rep, i*csz + j), rp[cw*csz + j])); + EQ(for (usz j = 0; j < csz; j++), !compatible(GetU(rep, i*csz + j), rp[cw*csz + j])); for (usz j = 0; j < csz; j++) dec(rp[cw*csz + j]); COPY_TO(rp, el_B, cw*csz, rep, i*csz, csz); } diff --git a/test/cases/under.bqn b/test/cases/under.bqn index fbac8b3f..9c461ede 100644 --- a/test/cases/under.bqn +++ b/test/cases/under.bqn @@ -115,6 +115,10 @@ n←500 ⋄ a←↕n ⋄ i←(-n)+↕2×n ⋄ r←⌽(2×n)⥊a ⋄ ! (⌽a) ≡ %USE eqvar ⋄ (<⟨⟩) {•internal.Keep⌾(𝕨⊸⊏) 𝕩}_eqvar¨ ⟨0‿1, "ab"‿"cd"⟩ %% ⟨0‿1, "ab"‿"cd"⟩ %USE eqvar ⋄ ⟨0÷0,0÷0⟩ {𝕨⌾(0‿0⊸⊏) 𝕩}_eqvar 3⥊0 %% ⟨0÷0,0,0⟩ %USE eqvar ⋄ %USE nz ⋄ 0‿0 {(0 InsNZ 2⥊0)⌾(𝕨⊸⊏)𝕩}_eqvar 3⥊3 %% 0‿3‿3 +%USE eqvar ⋄ "CD" {𝕨¨⌾(2‿3‿2‿3‿4⊸⊏) 𝕩}_eqvar 10⥊<"ab" %% "ab"‿"ab"‿"CD"‿"CD"‿"CD"‿"ab"‿"ab"‿"ab"‿"ab"‿"ab" +%USE eqvar ⋄ "CD" {𝕨¨⌾(2‿3‿2‿1⊸⊏) 𝕩}_eqvar 5‿2⥊<"ab" %% ≍˜˘ "ab"‿"CD"‿"CD"‿"CD"‿"ab" +%USE eqvar ⋄ 2‿3‿2‿1 {( 32⊸+⊸≍˘ "AB"‿"CD"‿"AB"‿"EF")⌾(𝕨⊸⊏) 𝕩}_eqvar 5‿2⥊<"?" %% 5‿2⥊⟨"?","?","ef","EF","ab","AB","cd","CD","?","?"⟩ +%USE eqvar ⋄ 2‿3‿2‿1 {{𝕊: 32⊸+⊸≍˘ "AB"‿"CD"‿"AB"‿"EF"}⌾(𝕨⊸⊏) 𝕩}_eqvar 5‿2⥊<"?" %% 5‿2⥊⟨"?","?","ef","EF","ab","AB","cd","CD","?","?"⟩ # ⥊