diff --git a/src/builtins/selfsearch.c b/src/builtins/selfsearch.c index 8a77794f..5eb430ca 100644 --- a/src/builtins/selfsearch.c +++ b/src/builtins/selfsearch.c @@ -9,9 +9,10 @@ B memberOf_c1(B t, B x) { if (n==0) { decG(x); return emptyIVec(); } if (RNK(x)>1) x = toCells(x); u8 xe = TI(x,elType); + if (elChr(xe)) xe -= el_c8-el_i8; #define BRUTE(T) \ - i##T* xp = i##T##any_ptr(x); \ + i##T* xp = tyany_ptr(x); \ u64* rp; B r = m_bitarrv(&rp, n); bitp_set(rp, 0, 1); \ for (usz i=1; i8 && n3*n?tn:3*n)+(2*rx+1)*sizeof(usz))); @@ -95,9 +96,10 @@ B count_c1(B t, B x) { if (n>(usz)I32_MAX+1) thrM("⊒: Argument length >2⋆31 not supported"); if (RNK(x)>1) x = toCells(x); u8 xe = TI(x,elType); + if (elChr(xe)) xe -= el_c8-el_i8; #define BRUTE(T) \ - i##T* xp = i##T##any_ptr(x); \ + i##T* xp = tyany_ptr(x); \ i8* rp; B r = m_i8arrv(&rp, n); rp[0]=0; \ for (usz i=1; i8 && nn?tn:n)+(2*rx+1)*sizeof(usz))); @@ -186,9 +188,10 @@ B indexOf_c1(B t, B x) { if (n>(usz)I32_MAX+1) thrM("⊐: Argument length >2⋆31 not supported"); if (RNK(x)>1) x = toCells(x); u8 xe = TI(x,elType); + if (elChr(xe)) xe -= el_c8-el_i8; #define BRUTE(T) \ - i##T* xp = i##T##any_ptr(x); \ + i##T* xp = tyany_ptr(x); \ i8* rp; B r = m_i8arrv(&rp, n); rp[0]=0; \ TALLOC(i##T, uniq, n); uniq[0]=xp[0]; \ for (usz i=1, u=1; i8 && n