diff --git a/src/utils/each.c b/src/utils/each.c index 778435ff..ecbe1883 100644 --- a/src/utils/each.c +++ b/src/utils/each.c @@ -77,7 +77,15 @@ B eachm_fn(B fo, B x, BB2B f) { case t_fillslice: { FillSlice* s = c(FillSlice,x); Arr* p = s->p; - if (p->refc==1 && (p->type==t_fillarr || p->type==t_harr) && ((FillArr*)p)->a == s->a && ptr_eqShape(p, a(x))) { + if (p->refc==1 && (p->type==t_fillarr || p->type==t_harr) && ((FillArr*)p)->a == s->a && PIA(p)==ia) { + ur sr = PRNK(s); + if (sr<=1) { + arr_shErase(p, sr); + } else { + usz* ssh = PSH(s); + if (ssh != PSH(p)) arr_shReplace(p, sr, ptr_inc(shObjS(ssh))); + } + x = taga(ptr_inc(p)); value_free((Value*)s); goto re_reuse;