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

SCM Repository

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

Diff of /trunk/src/compiler/translate/translate.sml

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

revision 199, Mon Aug 2 21:34:31 2010 UTC revision 200, Mon Aug 2 21:57:49 2010 UTC
# Line 115  Line 115 
115              toStmt (env, VSet.empty, stms)              toStmt (env, VSet.empty, stms)
116            end            end
117    
118      fun translate (S.Program{globals, globalInit, actors}) = ??      fun translate (S.Program{globals, globalInit, actors}) = let
119              val (globalInit, env, _) = cvtBlock (VMap.empty, globalInit)
120            (* get the SSA names for the globals and a reduced environment *)
121              val (env, globs) = let
122                    val lookup = lookup env
123                    fun cvtVar (x, (env, globs)) = let
124                          val x' = lookup x
125                          in
126                            (VMap.insert(env, x, x'), x'::globs)
127                          end
128                    val (env, globs) = List.foldl cvtVar (VMap.empty, []) globals
129                    in
130                      (env, List.rev globs)
131                    end
132              fun cvtActor (S.Actor{name, params, state, stateInit, methods}) = let
133                    val (env, params) = let
134                          fun cvtParam (x, (env, xs)) = let
135                                val x' = newVar x
136                                in
137                                  (VMap.insert(env, x, x'), x'::xs)
138                                end
139                          val (env, params) = List.foldl cvtParam (env, []) params
140                          in
141                            (env, List.rev params)
142                          end
143                    val (stateInit, env, _) = cvtBlock (env, stateInit)
144                    val state = List.map (lookup env) state
145                    fun cvtMethod (S.Method(name, blk)) = let
146                          val (body, _, _) = cvtBlock (env, blk)
147                          in
148                            IL.Method(name, body)
149                          end
150                    in
151                      IL.Actor{
152                          name = name,
153                          params = params,
154                          state = state,
155                          stateInit = stateInit,
156                          methods = List.map cvtMethod methods
157                        }
158                    end
159              in
160                IL.Program{
161                    globals = globs,
162                    globalInit = globalInit,
163                    actors = List.map cvtActor actors
164                  }
165              end
166    
167    end    end

Legend:
Removed from v.199  
changed lines
  Added in v.200

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