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

SCM Repository

[diderot] Diff of /trunk/src/compiler/codegen/codegen-fn.sml
ViewVC logotype

Diff of /trunk/src/compiler/codegen/codegen-fn.sml

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

revision 1231, Mon May 16 13:49:17 2011 UTC revision 1232, Mon May 16 23:37:52 2011 UTC
# Line 11  Line 11 
11    
12  functor CodeGenFn (T : TARGET) : sig  functor CodeGenFn (T : TARGET) : sig
13    
14      val generate : string * LowIL.program -> unit      val generate : {
15                basename : string,
16                double : bool,
17                parallel : bool,
18                debug : bool,
19                prog : LowIL.program
20              } -> unit
21    
22    end = struct    end = struct
23    
# Line 68  Line 74 
74              List.app (trMethod (strand, state, env)) methods              List.app (trMethod (strand, state, env)) methods
75            end            end
76    
77      fun trInitially (env0, prog, {isArray, iterPrefix, iters, createPrefix, strand, args}) = let      fun trInitially (env, prog, {isArray, iterPrefix, iters, createPrefix, strand, args}) = let
78            val env0 = T.Env.scopeInitially env0            val env = T.Env.scopeInitially env
79              val (env, iterPrefix) = T.Tr.fragment (env, iterPrefix)
80            fun trIter ((param, lo, hi), (env, iters)) = let            fun trIter ((param, lo, hi), (env, iters)) = let
81                  val param' = T.Var.param param                  val param' = T.Var.param param
82                  val env = T.Env.bind (env, param, param')                  val env = T.Env.bind (env, param, param')
83                  val iter = (param', T.Tr.exp (env0, lo), T.Tr.exp (env0, hi))                  val iter = (param', T.Tr.exp (env, lo), T.Tr.exp (env, hi))
84                  in                  in
85                    (env, iter::iters)                    (env, iter::iters)
86                  end                  end
87            val (env, iters) = List.foldr trIter (env0, []) iters            val (env, iters) = List.foldr trIter (env, []) iters
88              val (env, createPrefix) = T.Tr.fragment (env, createPrefix)
89            in            in
90              T.Program.initially {              T.Program.initially {
91                  prog = prog,                  prog = prog,
92                  isArray = isArray,                  isArray = isArray,
93                  iterPrefix = T.Tr.block (env0, iterPrefix),                  iterPrefix = iterPrefix,
94                  iters = iters,                  iters = iters,
95                  createPrefix = T.Tr.block (env, createPrefix),                  createPrefix = createPrefix,
96                  strand = strand,                  strand = strand,
97                  args = List.map (fn e => T.Tr.exp(env, e)) args                  args = List.map (fn e => T.Tr.exp(env, e)) args
98                }                }
99            end            end
100    
101      fun generate (fileStem, srcProg) = let      fun generate {basename, double, parallel, debug, prog=srcProg} = let
102            val treeProg as TreeIL.Program{props, globals, globalInit, strands, initially} =            val treeProg as TreeIL.Program{props, globals, globalInit, strands, initially} =
103                  PhaseTimer.withTimer Timers.timeLowToTree LowToTree.translate srcProg                  PhaseTimer.withTimer Timers.timeLowToTree LowToTree.translate srcProg
104  val _ = (  val _ = (
105  TextIO.output(Log.logFile(), "********** After translation to TreeIL **********\n");  TextIO.output(Log.logFile(), "********** After translation to TreeIL **********\n");
106  TreeILPP.program (Log.logFile(), treeProg))  TreeILPP.program (Log.logFile(), treeProg))
107            val prog = T.Program.new ()            val prog = T.Program.new {double=double, parallel=parallel, debug=debug}
108            val env = T.Env.new prog            val env = T.Env.new prog
109          (* define the globals and initialize the environment *)          (* define the globals and initialize the environment *)
110            val env = let            val env = let
# Line 126  Line 134 
134            (* generate the initially function *)            (* generate the initially function *)
135              trInitially (env, prog, initially);              trInitially (env, prog, initially);
136            (* output the program *)            (* output the program *)
137              T.Program.generate (fileStem, prog)              T.Program.generate (basename, prog)
138            end            end
139    
140    end    end

Legend:
Removed from v.1231  
changed lines
  Added in v.1232

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