summaryrefslogtreecommitdiff
path: root/src/monoize.sml
diff options
context:
space:
mode:
Diffstat (limited to 'src/monoize.sml')
-rw-r--r--src/monoize.sml15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/monoize.sml b/src/monoize.sml
index 9a3858f8..83a520c8 100644
--- a/src/monoize.sml
+++ b/src/monoize.sml
@@ -3137,6 +3137,21 @@ fun monoExp (env, st, fm) (all as (e, loc)) =
((L'.ELet (x, t', e1, e2), loc), fm)
end
+ | L.ETailCall (n, es, ek, _, (L.TRecord (L.CRecord (_, []), _), _)) =>
+ let
+ val (es, fm) = ListUtil.foldlMap (fn (e, fm) => monoExp (env, st, fm) e) fm es
+ val (ek, fm) = monoExp (env, st, fm) ek
+
+ val e = (L'.ENamed n, loc)
+ val e = foldl (fn (e, arg) => (L'.EApp (e, arg), loc)) e es
+ val e = (L'.EApp (e, ek), loc)
+ in
+ (e, fm)
+ end
+ | L.ETailCall _ => (E.errorAt loc "Full scope of tail call continuation isn't known";
+ Print.eprefaces' [("Expression", CorePrint.p_exp env all)];
+ (dummyExp, fm))
+
| L.EServerCall (n, es, ek, t, (L.TRecord (L.CRecord (_, []), _), _)) =>
let
val t = monoType env t