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

SCM Repository

[diderot] Diff of /branches/pure-cfg/src/compiler/IL/translate-fn.sml
ViewVC logotype

Diff of /branches/pure-cfg/src/compiler/IL/translate-fn.sml

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

revision 612, Sat Mar 12 17:56:24 2011 UTC revision 613, Sat Mar 12 19:29:23 2011 UTC
# Line 16  Line 16 
16      type var_env = DstIL.var SrcIL.Var.Tbl.hash_table      type var_env = DstIL.var SrcIL.Var.Tbl.hash_table
17    
18      val rename : (var_env * SrcIL.var) -> DstIL.var      val rename : (var_env * SrcIL.var) -> DstIL.var
19        val renameList : (var_env * SrcIL.var list) -> DstIL.var list
20      val expand : (var_env * SrcIL.assign) -> DstIL.cfg      val expand : (var_env * SrcIL.assign) -> DstIL.cfg
21    
22    end    end
# Line 25  Line 26 
26      structure SrcIL : SSA      structure SrcIL : SSA
27      structure DstIL : SSA      structure DstIL : SSA
28    
29      type var_env = DstIL.var SrcIL.Var.Tbl.hash_table      type var_env = Params.var_env
30    
31      val translate : var_env * SrcIL.cfg -> DstIL.cfg      val translate : SrcIL.program -> DstIL.program
32    
33    end = struct    end = struct
34    
35      structure SrcIL = Params.SrcIL      structure SrcIL = Params.SrcIL
36      structure SrcNd = SrcIL.Node      structure SrcNd = SrcIL.Node
37        structure VTbl = SrcIL.Var.Tbl
38      structure DstIL = Params.DstIL      structure DstIL = Params.DstIL
39      structure DstNd = DstIL.Node      structure DstNd = DstIL.Node
40      structure DstCFG = DstIL.CFG      structure DstCFG = DstIL.CFG
# Line 44  Line 46 
46          vMap : var_env          vMap : var_env
47        }        }
48    
49        fun setBindings (bind, xs) = (List.app (fn x => DstIL.Var.setBinding(x, bind)) xs; xs)
50    
51      fun rename (E{vMap, ...}) x = Params.rename(vMap, x)      fun rename (E{vMap, ...}) x = Params.rename(vMap, x)
52    
53        fun renameList (E{vMap, ...}, xs) = Params.renameList(vMap, xs)
54    
55      fun expand (E{vMap, ...}, assign) = Params.expand (vMap, assign)      fun expand (E{vMap, ...}, assign) = Params.expand (vMap, assign)
56    
57      fun insertNd (E{ndMap, ...}, id, nd) = Stamp.Tbl.insert ndMap (id, nd)      fun insertNd (E{ndMap, ...}, id, nd) = Stamp.Tbl.insert ndMap (id, nd)
# Line 133  Line 139 
139              DstIL.CFG{entry = entry, exit = renameNd env exit}              DstIL.CFG{entry = entry, exit = renameNd env exit}
140            end            end
141    
142      fun translate (vMap, cfg) = let      fun translate (SrcIL.Program{globals, globalInit, initially, strands}) = let
143            val env = E{            val env = E{
144                    ndMap = Stamp.Tbl.mkTable (256, Fail "ndMap"),                    ndMap = Stamp.Tbl.mkTable (256, Fail "ndMap"),
145                    vMap = vMap                    vMap = VTbl.mkTable (256, Fail "env")
146                    }
147              fun transInitially (SrcIL.Initially{isArray, create=(argInit, strand, args), iters}) = let
148                    fun trIter (cfg, param, lo, hi) = let
149                          val cfg = translateCFG (env, cfg)
150                          val param = rename env param
151                          in
152                            DstIL.Var.setBinding(param, DstIL.VB_PARAM);
153                            (cfg, param, rename env lo, rename env hi)
154                          end
155                    val iters = List.map trIter iters
156                    val argInit = translateCFG(env, argInit)
157                    in
158                      DstIL.Initially{
159                          isArray = isArray,
160                          create = (argInit, strand, renameList(env, args)),
161                          iters = iters
162                        }
163                    end
164              fun transMethod (SrcIL.Method{name, stateIn, stateOut, body}) =
165                    DstIL.Method{
166                        name = name,
167                        stateIn = setBindings (DstIL.VB_STATE_VAR, renameList (env, stateIn)),
168                        stateOut = renameList (env, stateOut),
169                        body = translateCFG (env, body)
170                      }
171              fun transStrand (SrcIL.Strand{name, params, state, stateInit, methods}) =
172                    DstIL.Strand{
173                        name = name,
174                        params = setBindings (DstIL.VB_PARAM, renameList (env, params)),
175                        state = renameList (env, state),
176                        stateInit = translateCFG (env, stateInit),
177                        methods = List.map transMethod methods
178                      }
179              val prog = DstIL.Program{
180                      globals = renameList (env, globals),
181                      globalInit = translateCFG (env, globalInit),
182                      initially = transInitially initially,
183                      strands = List.map transStrand strands
184                  }                  }
185            in            in
186              translateCFG (env, cfg)              prog
187            end            end
188    
189    end    end

Legend:
Removed from v.612  
changed lines
  Added in v.613

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