Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Diff of /branches/vis12/src/compiler/translate/translate.sml
ViewVC logotype

Diff of /branches/vis12/src/compiler/translate/translate.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2017, Tue Oct 9 12:32:51 2012 UTC revision 2018, Tue Oct 9 12:54:37 2012 UTC
# Line 429  Line 429 
429              condCons (hasNew, StrandUtil.NewStrands, []))              condCons (hasNew, StrandUtil.NewStrands, []))
430            end            end
431    
432        fun cvtInputs inputs = let
433              fun cvt ((x, inp), (env, stms)) = let
434                    val x' = newVar x
435                    val stm = IL.ASSGN(x', IL.OP(Op.Input(Inputs.map cvtTy inp), []))
436                    in
437                      (VMap.insert(env, x, x'), stm::stms)
438                    end
439              val (env, stms) = List.foldr cvt (VMap.empty, []) inputs
440              in
441                (IL.CFG.mkBlock stms, env)
442              end
443    
444      fun translate (S.Program{inputs, globals, globalInit, init, strands}) = let      fun translate (S.Program{inputs, globals, globalInit, init, strands}) = let
 (* FIXME: handle the inputs *)  
445            val (globalInit, env) = let            val (globalInit, env) = let
446                  fun mkExit env = let                  fun mkExit env = let
447                        val nd = IL.Node.mkRETURN(VMap.listItems env)                        val nd = IL.Node.mkRETURN(VMap.listItems env)
448                        in                        in
449                          IL.CFG{entry = nd, exit = nd}                          IL.CFG{entry = nd, exit = nd}
450                        end                        end
451                    val (inputBlk, env) = cvtInputs inputs
452                    val (globBlk, env) = cvtBlock (([], []), env, [], globalInit)
453                    val cfg = IL.CFG.prependNode (IL.Node.mkENTRY(), inputBlk)
454                    val cfg = IL.CFG.concat(cfg, globBlk)
455                    val cfg = IL.CFG.concat (cfg, mkExit env)
456                  in                  in
457                    cvtTopLevelBlock (VMap.empty, globalInit, mkExit)                    (cfg, env)
458                  end                  end
459          (* construct a reduced environment that just defines the globals. *)          (* construct a reduced environment that just defines the globals (including inputs). *)
460            val env = let            val env = let
461                  val lookup = lookup env                  val lookup = lookup env
462                  fun cvtVar (x, env) = VMap.insert(env, x, lookup x)                  fun cvtVar (x, env) = VMap.insert(env, x, lookup x)
463                  val env = List.foldl cvtVar VMap.empty globals                  val env = List.foldl (fn ((x, _), env) => cvtVar(x, env)) VMap.empty inputs
464                    val env = List.foldl cvtVar env globals
465                  in                  in
466                    env                    env
467                  end                  end

Legend:
Removed from v.2017  
changed lines
  Added in v.2018

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0