diff --git a/src/builtins/md2.c b/src/builtins/md2.c index 91f8ba49..28f86469 100644 --- a/src/builtins/md2.c +++ b/src/builtins/md2.c @@ -117,10 +117,12 @@ B repeat_c2(Md2D* d, B w, B x) { REPEAT_T(c2,dec(w), inc(w), ); } #undef REPEAT_T -B before_c1(Md2D* d, B x) { return c2(d->g, c1iX(d->f, x), x); } -B before_c2(Md2D* d, B w, B x) { return c2(d->g, c1i (d->f, w), x); } -B after_c1(Md2D* d, B x) { return c2(d->f, x, c1iX(d->g, x)); } -B after_c2(Md2D* d, B w, B x) { return c2(d->f, w, c1i (d->g, x)); } +NOINLINE B before_c1F(Md2D* d, B x, B f) { errMd(f); return c2(d->g, c(Fun,f)->c1(f,inc(x)), x); } +NOINLINE B after_c1F (Md2D* d, B x, B g) { errMd(g); return c2(d->f, x, c(Fun,g)->c1(g,inc(x))); } +B before_c1(Md2D* d, B x) { B f=d->f; return isCallable(f)? before_c1F(d, x, f) : c2(d->g, inc(f), x); } +B after_c1 (Md2D* d, B x) { B g=d->g; return isCallable(g)? after_c1F (d, x, g) : c2(d->f, x, inc(g)); } +B before_c2(Md2D* d, B w, B x) { return c2(d->g, c1i(d->f, w), x); } +B after_c2 (Md2D* d, B w, B x) { return c2(d->f, w, c1i(d->g, x)); } B atop_c1(Md2D* d, B x) { return c1(d->f, c1(d->g, x)); } B atop_c2(Md2D* d, B w, B x) { return c1(d->f, c2(d->g, w, x)); } B over_c1(Md2D* d, B x) { return c1(d->f, c1(d->g, x)); }