diff --git a/src/builtins/select.c b/src/builtins/select.c index 16ba3ca5..e64a3722 100644 --- a/src/builtins/select.c +++ b/src/builtins/select.c @@ -394,16 +394,16 @@ B select_c2(B t, B w, B x) { CFRes f = cf_get(1, csz<=xn) { badw=c; goto bad1; } cf_call(f, rm->a, ri, xp, c*f.mul); ri+= f.mul; } // TODO something better - case el_i8: for (; ia, ri, xp, c*f.mul); ri+= f.mul; } - case el_i16: for (; ia, ri, xp, c*f.mul); ri+= f.mul; } - case el_i32: for (; ia, ri, xp, c*f.mul); ri+= f.mul; } + case el_bit: for (; i= xn) { goto bad1; } cf_call(f, rm->a, ri, xp, c*f.mul); ri+= f.mul; } break; // TODO something better + case el_i8: { i8* w0=wp; for (i8* wc=w0; wca, ri, xp, c*f.mul); ri+= f.mul; } } break; + case el_i16: { i16* w0=wp; for (i16* wc=w0; wca, ri, xp, c*f.mul); ri+= f.mul; } } break; + case el_i32: { i32* w0=wp; for (i32* wc=w0; wca, ri, xp, c*f.mul); ri+= f.mul; } } break; } assert(!isVal(xf)); @@ -412,7 +412,7 @@ B select_c2(B t, B w, B x) { MUTG_INIT(rm); for (; i < wia; i++) { B cw = GetU(w, i); // assumed number from previous squeeze - if (!q_i64(cw)) { bad_cw: badw=o2fG(cw); goto bad1; } + if (!q_i64(cw)) { bad_cw: goto bad1; } usz c = WRAP(o2i64G(cw), xn, goto bad_cw; ); mut_copyG(rm, i*csz, x, csz*c, csz); } @@ -422,7 +422,7 @@ B select_c2(B t, B w, B x) { bad1:; mut_pfree(rm, i*csz); - if (!q_fi64(badw)) expI_f64(badw); + f64 badw = o2i64(IGetU(w,i)); thrF("๐•จโŠ๐•ฉ: Indexing out-of-bounds (%fโˆŠ๐•จ, %sโ‰กโ‰ ๐•ฉ)", badw, xn); }