diff --git a/src/md1.c b/src/md1.c index c88dae7f..1be07e1a 100644 --- a/src/md1.c +++ b/src/md1.c @@ -107,6 +107,31 @@ B scan_c1(B d, B x) { B f = c(Md1D,d)->f; ur xr = rnk(x); usz ia = a(x)->ia; if (ia==0) return x; + if (xr==1 && TI(x).elType==el_i32 && isFun(f) && v(f)->flags) { + u8 rtid = v(f)->flags-1; + i32* xp = i32any_ptr(x); + if (rtid==0) { + i32* rp; B r = m_i32arrv(&rp, ia); + i64 c = 0; + for (usz i = 0; i < ia; i++) { + rp[i] = c+= xp[i]; + if (c>I32_MAX) goto base; + } + dec(x); + return r; + } + if (rtid==7) { + i32* rp; B r = m_i32arrv(&rp, ia); + i32 c = 0; + for (usz i = 0; i < ia; i++) { + if (xp[i]>c) c = xp[i]; + rp[i] = c; + } + dec(x); + return r; + } + } + base:; bool reuse = v(x)->type==t_harr && reusable(x); usz i = 0; @@ -238,7 +263,7 @@ B flines_c1(B d, B x) { B f = c(Md1D,d)->f; usz pos = 0; while (i < lineCount) { usz spos = pos; - while(p[pos]!='\n' && p[pos]!='\r') pos++; + while(posbcV; Comp* comp = c->sc->body->comp; + i32 bcPos = c>=envStart && cbcL - i32arr_ptr(comp->bc) : c->bcV; vm_printPos(comp, bcPos, i); i--; } } +NOINLINE void vm_pstLive(Env* s, Env* e) { + vm_pst(envStart, envCurr); +} static void unwindEnv(Env* envNew) { assert(envNew<=envCurr);