diff options
Diffstat (limited to 'cps.sml')
| -rw-r--r-- | cps.sml | 38 |
1 files changed, 19 insertions, 19 deletions
@@ -5,8 +5,8 @@ struct Syntax.LVar v => cont (Syntax.VVar v) | Syntax.LFn (v, expr) => let - val fnName = Gensym.new () - val k = Gensym.new () + val fnName = GenSym.new () + val k = GenSym.new () in Syntax.CFix ([(fnName, [v, k], toCPS expr (fn ret => Syntax.CApp (Syntax.VVar k, [ret])))], @@ -16,7 +16,7 @@ struct Syntax.CFix ( map (fn (name, arg, expr) => - let val w = Gensym.new () + let val w = GenSym.new () in ( name , [arg, w] @@ -28,7 +28,7 @@ struct ) | Syntax.LApp (Syntax.LPrim primop, Syntax.LRecord args) => let - val temp = Gensym.new () + val temp = GenSym.new () fun go [] acc = Syntax.CPrimop (primop, rev acc, [temp], [cont (Syntax.VVar temp)]) | go (arg :: args) acc = toCPS arg (fn arg' => go args (arg' :: acc)) in go args [] @@ -36,8 +36,8 @@ struct | Syntax.LApp (Syntax.LPrim primop, arg) => toCPS (Syntax.LApp (Syntax.LPrim primop, Syntax.LRecord [arg])) cont | Syntax.LApp (f, x) => let - val addr = Gensym.new () - val arg = Gensym.new () + val addr = GenSym.new () + val arg = GenSym.new () in Syntax.CFix ([(addr, [arg], cont (Syntax.VVar arg))], toCPS f (fn f' => @@ -46,7 +46,7 @@ struct end | Syntax.LInt i => cont (Syntax.VInt i) | Syntax.LString s => - let val temp = Gensym.new () + let val temp = GenSym.new () in Syntax.CRecord ( [(map (fn c => (Syntax.VInt (Char.ord c), [])) (String.explode s), temp)] @@ -55,13 +55,13 @@ struct end | Syntax.LRecord [] => cont (Syntax.VInt 0) | Syntax.LSelect (i, expr) => - let val temp = Gensym.new () + let val temp = GenSym.new () in toCPS expr (fn x => Syntax.CSelect (i, x, temp, cont (Syntax.VVar temp))) end | Syntax.LRecord exprs => let fun go [] vars = - let val temp = Gensym.new () + let val temp = GenSym.new () in Syntax.CRecord ([(map (fn v => (v, [])) (rev vars), temp)], cont (Syntax.VVar temp)) end | go (expr :: exprs) vars = @@ -71,15 +71,15 @@ struct | Syntax.LSwitch (expr, arms, otherwise) => let val sortedArms = Sort.sort (fn ((x, _), (y, _)) => Int.compare (x, y)) arms - val contAddr = Gensym.new () - val otherwiseAddr = Gensym.new () - val arg = Gensym.new () + val contAddr = GenSym.new () + val otherwiseAddr = GenSym.new () + val arg = GenSym.new () fun go _ [] cont = Syntax.CApp (Syntax.VVar otherwiseAddr, []) | go v [(x, arm)] cont = (case otherwise of NONE => toCPS arm cont | SOME _ => - let val b = Gensym.new () + let val b = GenSym.new () in Syntax.CPrimop ( Syntax.PEq @@ -96,7 +96,7 @@ struct end) | go v arms cont = let - val b = Gensym.new () + val b = GenSym.new () val h = length arms div 2 val half1 = List.take (arms, h) val half2 = List.drop (arms, h) @@ -143,7 +143,7 @@ struct | funs (Syntax.CFix (fs, body)) acc = funs body (foldl (fn ((fName, fVars, fBody), acc) => (fName, fVars, exprs fBody) :: funs fBody acc) acc fs) | funs (Syntax.CPrimop (_, _, _, ks)) acc = foldl (fn (x, acc) => funs x acc) acc ks - val entryPoint = Gensym.new () + val entryPoint = GenSym.new () in Syntax.CFix ((entryPoint, [], exprs expr) :: funs expr [], Syntax.CApp (Syntax.VLabel entryPoint, [])) end @@ -227,7 +227,7 @@ struct Syntax.CSelect (i, translateValue arg, res, convertExpr varMap k) | Syntax.CApp (func, args) => let - val temp = Gensym.new () + val temp = GenSym.new () val f = translateValue func in Syntax.CSelect (0, f, temp, Syntax.CApp (Syntax.VVar temp, f :: map translateValue args)) @@ -239,15 +239,15 @@ struct (fn this as (name, args, body) => let val funcFreeVars = freeVarsClosure this - val varMap' = VarMap.union varMap (VarMap.fromList (map (fn v => (v, Gensym.new ())) funcFreeVars)) - val closure = Gensym.new () + val varMap' = VarMap.union varMap (VarMap.fromList (map (fn v => (v, GenSym.new ())) funcFreeVars)) + val closure = GenSym.new () val newBody = foldl (fn ((i, x), acc) => Syntax.CSelect (i + 1, Syntax.VVar closure, valOf (VarMap.lookup x varMap'), acc)) (convertExpr varMap' body) (enumerate funcFreeVars) in - (Gensym.new (), closure :: args, newBody) + (GenSym.new (), closure :: args, newBody) end) funcs val newBody = |
