use reflexive match for (2‿3⥊0÷0)⌾(0‿0⊸⊏) 2‿3⥊1 fix

This commit is contained in:
dzaima 2025-05-22 23:57:58 +03:00
parent d1855f14e9
commit b0877bfad9

View File

@ -509,8 +509,7 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu
case el_c16: rep = toC16Any(rep); ra = reuse? a(REUSE(x)) : cpyC16Arr(x); goto do_u16;
case el_i32: rep = toI32Any(rep); ra = reuse? a(REUSE(x)) : cpyI32Arr(x); goto do_u32;
case el_c32: rep = toC32Any(rep); ra = reuse? a(REUSE(x)) : cpyC32Arr(x); goto do_u32;
case el_f64: if (csz!=1) { reuse = false; goto generic; }
rep = toF64Any(rep); ra = reuse? a(REUSE(x)) : cpyF64Arr(x); goto do_f64;
case el_f64: rep = toF64Any(rep); ra = reuse? a(REUSE(x)) : cpyF64Arr(x); goto do_f64;
case el_bit: { ra = reuse? a(REUSE(x)) : cpyBitArr(x);
TyArr* na = toBitArr(rep); rep = taga(na);
u64* np = bitarrv_ptr(na);
@ -532,7 +531,6 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu
goto dec_ret_ra;
}
case el_B: {
generic:;
ra = reuse? a(REUSE(x)) : cpyHArr(x);
B* rp = harrv_ptr(ra);
SGet(rep)
@ -581,7 +579,7 @@ B select_replace(u32 chr, B w, B x, B rep, usz wia, usz cam, usz csz) { // consu
u8 cwidth = csz * elWidth(re);
u8* rp = (u8*) tyarrv_ptr((TyArr*)ra);
u8* np = tyany_ptr(rep);
MatchFnObj eq = MATCH_GET(re,re);
MatchFnObj eq = MATCHR_GET(re,re);
for (usz i = 0; i < wia; i++) {
READ_W(cw, i);
EQ1(!MATCH_CALL(eq, rp + cw*cwidth, np + i*cwidth, csz));