From bc2fef3a2ab81270af207568706647ced919bbe6 Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Wed, 7 Feb 2024 21:08:35 -0800 Subject: Support function arguments. --- cps.sml | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'cps.sml') diff --git a/cps.sml b/cps.sml index 6854545..56780a9 100644 --- a/cps.sml +++ b/cps.sml @@ -12,6 +12,20 @@ struct ([(fnName, [v, k], toCPS expr (fn ret => Syntax.CApp (Syntax.VVar k, [ret])))], cont (Syntax.VVar fnName)) end + | Syntax.LFix (decls, body) => + Syntax.CFix + ( map + (fn (name, arg, expr) => + let val w = Gensym.new () + in + ( name + , [arg, w] + , toCPS expr (fn z => Syntax.CApp (Syntax.VVar w, [z])) + ) + end) + decls + , toCPS body cont + ) | Syntax.LApp (Syntax.LPrim primop, Syntax.LRecord args) => let val temp = Gensym.new () @@ -130,9 +144,11 @@ struct | Syntax.CSelect (i, arg, res, k) => Syntax.CSelect (i, translateValue arg, res, convertExpr varMap k) | Syntax.CApp (func, args) => - let val temp = Gensym.new () - in Syntax.CSelect (0, translateValue func, temp, - Syntax.CApp (Syntax.VVar temp, map translateValue args)) + let + val temp = Gensym.new () + val f = translateValue func + in Syntax.CSelect (0, f, temp, + Syntax.CApp (Syntax.VVar temp, f :: map translateValue args)) end | Syntax.CFix (funcs, body) => let -- cgit v1.3.1