From d940187fd8720e0ab3c00e5a6a7ae8f181c7752d Mon Sep 17 00:00:00 2001 From: Rose Hogenson Date: Sun, 12 Feb 2023 15:37:25 -0800 Subject: Add lambda functions. --- compiler.sml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'compiler.sml') diff --git a/compiler.sml b/compiler.sml index 599d85a..4c5e238 100644 --- a/compiler.sml +++ b/compiler.sml @@ -2,25 +2,28 @@ structure Compiler = struct fun compile (prog : Syntax.expr) : Word8Vector.vector = let + val _ = print ("ast:\n" ^ Syntax.exprToString prog ^ "\n") val elab = Elab.elaborate prog + val _ = print ("lambda lang:\n" ^ Syntax.lexpToString elab ^ "\n") val cps = - CPS.convertClosures - (CPS.toCPS elab - (fn _ => Syntax.CPrimop (Syntax.PExit, [Syntax.VInt 0], [], []))) - val _ = print ("cps:\n" ^ Syntax.cexpToString cps ^ "\n") - val asm = CodeGen.toASM cps + CPS.toCPS elab + (fn _ => Syntax.CPrimop (Syntax.PExit, [Syntax.VInt 0], [], [])) + val _ = print ("cps1:\n" ^ Syntax.cexpToString cps ^ "\n") + val cps' = CPS.convertClosures cps + val _ = print ("cps:\n" ^ Syntax.cexpToString cps' ^ "\n") + val asm = CodeGen.toASM cps' val _ = print ("bytecode:\n" ^ String.concatWith "\n" (map Syntax.opcodeToString asm) ^ "\n") in Linker.link asm end - fun main () = + fun main (args : string list) : unit = let val opts = { o = ref "a.out" } val flags = [ ("o", Opts.StringOpt (fn arg => #o opts := arg)) ] val filename = - case Opts.getOpt flags of + case Opts.getOpt flags args of [arg] => arg | _ => raise Fail "usage: sml [-o ] " val ast = -- cgit v1.3.1