diff --git a/src/builtins/md2.c b/src/builtins/md2.c index d7d60799..a11093de 100644 --- a/src/builtins/md2.c +++ b/src/builtins/md2.c @@ -182,6 +182,8 @@ B before_uc1(Md2* t, B o, B f, B g, B x) { if (!isFun(g)) return def_m2_uc1(t, o, f, g, x); return TI(g,fn_ucw)(g, o, inc(f), x); } +B before_im(Md2D* d, B x) { return isFun(d->g) && !isCallable(d->f)? TI(d->g,fn_ix)(d->g, inc(d->f), x) : def_m2_im(d, x); } +B after_im (Md2D* d, B x) { return isFun(d->f) && !isCallable(d->g)? TI(d->f,fn_iw)(d->f, inc(d->g), x) : def_m2_im(d, x); } B while_c1(Md2D* d, B x) { B f=d->f; B g=d->g; @@ -253,4 +255,6 @@ void md2_init(void) { TIi(t_md2BI,m2_iw) = md2BI_iw; TIi(t_md2BI,m2_ix) = md2BI_ix; c(BMd2,bi_before)->uc1 = before_uc1; + c(BMd2,bi_after)->im = after_im; + c(BMd2,bi_before)->im = before_im; } diff --git a/src/core/stuff.h b/src/core/stuff.h index eaa33e2f..525eb6a4 100644 --- a/src/core/stuff.h +++ b/src/core/stuff.h @@ -227,16 +227,13 @@ B chr_squeeze(B x); // consumes; see note below static inline B num_squeezeChk(B x) { return FL_HAS(x,fl_squoze)? x : num_squeeze(x); } static inline B chr_squeezeChk(B x) { return FL_HAS(x,fl_squoze)? x : chr_squeeze(x); } -B def_fn_uc1(B t, B o, B x); -B def_fn_ucw(B t, B o, B w, B x); -B def_m1_uc1(Md1* t, B o, B f, B x); -B def_m1_ucw(Md1* t, B o, B f, B w, B x); -B def_m2_uc1(Md2* t, B o, B f, B g, B x); -B def_m2_ucw(Md2* t, B o, B f, B g, B w, B x); -B def_fn_im(B t, B x); +B def_fn_uc1(B t, B o, B x); B def_fn_ucw(B t, B o, B w, B x); +B def_m1_uc1(Md1* t, B o, B f, B x); B def_m1_ucw(Md1* t, B o, B f, B w, B x); +B def_m2_uc1(Md2* t, B o, B f, B g, B x); B def_m2_ucw(Md2* t, B o, B f, B g, B w, B x); B def_fn_is(B t, B x); -B def_fn_iw(B t, B w, B x); -B def_fn_ix(B t, B w, B x); +B def_fn_im(B t, B x); B def_m1_im(Md1D* d, B x); B def_m2_im(Md2D* d, B x); +B def_fn_iw(B t, B w, B x); B def_m1_iw(Md1D* d, B w, B x); B def_m2_iw(Md2D* d, B w, B x); +B def_fn_ix(B t, B w, B x); B def_m1_ix(Md1D* d, B w, B x); B def_m2_ix(Md2D* d, B w, B x); B def_decompose(B x); void noop_visit(Value* x); diff --git a/src/load.c b/src/load.c index 5edf4886..37d418bc 100644 --- a/src/load.c +++ b/src/load.c @@ -621,12 +621,12 @@ B def_fn_im(B t, B x) { B fn = rt_invFnRegFn(rt_invFnReg, inc(t)); SLOW2( B def_fn_is(B t, B x) { B fn = rt_invFnSwapFn(rt_invFnSwap, inc(t)); SLOW2("!runtime π•ŽβΌπ•©", t, x); B r = c1(fn, x); dec(fn); return r; } B def_fn_iw(B t, B w, B x) { B fn = rt_invFnSwapFn(rt_invFnSwap, inc(t)); SLOW3("!runtime 𝕨F⁼𝕩", w, x, t); B r = c2(fn, w, x); dec(fn); return r; } B def_fn_ix(B t, B w, B x) { B fn = rt_invFnRegFn(rt_invFnReg, inc(t)); SLOW3("!runtime 𝕨F⁼𝕩", w, x, t); B r = c2(fn, w, x); dec(fn); return r; } -B def_m1_im(Md1D* t, B x) { return def_fn_im(tag(t,FUN_TAG), x); } -B def_m1_iw(Md1D* t, B w, B x) { return def_fn_iw(tag(t,FUN_TAG), w, x); } -B def_m1_ix(Md1D* t, B w, B x) { return def_fn_ix(tag(t,FUN_TAG), w, x); } -B def_m2_im(Md2D* t, B x) { return def_fn_im(tag(t,FUN_TAG), x); } -B def_m2_iw(Md2D* t, B w, B x) { return def_fn_iw(tag(t,FUN_TAG), w, x); } -B def_m2_ix(Md2D* t, B w, B x) { return def_fn_ix(tag(t,FUN_TAG), w, x); } +B def_m1_im(Md1D* d, B x) { return def_fn_im(tag(d,FUN_TAG), x); } +B def_m1_iw(Md1D* d, B w, B x) { return def_fn_iw(tag(d,FUN_TAG), w, x); } +B def_m1_ix(Md1D* d, B w, B x) { return def_fn_ix(tag(d,FUN_TAG), w, x); } +B def_m2_im(Md2D* d, B x) { return def_fn_im(tag(d,FUN_TAG), x); } +B def_m2_iw(Md2D* d, B w, B x) { return def_fn_iw(tag(d,FUN_TAG), w, x); } +B def_m2_ix(Md2D* d, B w, B x) { return def_fn_ix(tag(d,FUN_TAG), w, x); } #ifdef DONT_FREE static B empty_get(Arr* x, usz n) {