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

SCM Repository

[diderot] Diff of /branches/vis15/src/compiler/target-cpu/gen-world.sml
ViewVC logotype

Diff of /branches/vis15/src/compiler/target-cpu/gen-world.sml

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

revision 3973, Wed Jun 15 12:39:41 2016 UTC revision 3974, Wed Jun 15 13:53:38 2016 UTC
# Line 10  Line 10 
10    
11      val genStruct : TargetSpec.t * Atom.atom * int -> CLang.decl      val genStruct : TargetSpec.t * Atom.atom * int -> CLang.decl
12    
13      val genInitiallyFun : CodeGenEnv.t * Atom.atom * TreeIR.create -> CLang.decl      val genInitiallyFun : CodeGenEnv.t * TreeIR.strand * TreeIR.create -> CLang.decl
14    
15    end = struct    end = struct
16    
17        structure IR = TreeIR
18      structure CL = CLang      structure CL = CLang
19      structure RN = CxxNames      structure RN = CxxNames
20      structure Env = CodeGenEnv      structure Env = CodeGenEnv
# Line 64  Line 65 
65                }                }
66            end            end
67    
68      fun genInitiallyFun (env : CodeGenEnv.t, strandName, create) = let      fun genInitiallyFun (env : CodeGenEnv.t, strand, create) = let
69            val strandName = Atom.toString strandName            val IR.Strand{name, stateInit=IR.Method{usesGlobals, needsWorld, ...}, ...} = strand
70              val strandName = Atom.toString name
71            val env = Env.insert(env, PseudoVars.world, "this")            val env = Env.insert(env, PseudoVars.world, "this")
72            val thisV = CL.mkVar "this"            val thisV = CL.mkVar "this"
73            val spec = Env.target env            val spec = Env.target env
# Line 152  Line 154 
154                              fn env => let                              fn env => let
155                                  val (env, stms') = ToCxx.trStms (env, #stms body)                                  val (env, stms') = ToCxx.trStms (env, #stms body)
156                                  val (_, args) = #newStm body                                  val (_, args) = #newStm body
157                                  (* NOTE: the args' list must match the parameters in GenStrand *)
158                                  val args' = List.map (fn e => ToCxx.trExp(env, e)) args                                  val args' = List.map (fn e => ToCxx.trExp(env, e)) args
159                                  val args' = let                                  val args' = let
160                                        val state = if TargetSpec.dualState spec                                        val state = if TargetSpec.dualState spec
# Line 160  Line 163 
163                                        in                                        in
164                                          statePtr state :: args'                                          statePtr state :: args'
165                                        end                                        end
166                                  val args' = if #hasGlobals spec                                  val args' = if usesGlobals
167                                        then CL.mkIndirect(thisV, "_globals") :: args'                                        then CL.mkIndirect(thisV, "_globals") :: args'
168                                        else args'                                        else args'
169                                    val args' = if needsWorld
170                                          then thisV :: args'
171                                          else args'
172                                  val newStm = CL.mkCall(strandName ^ "_init", args')                                  val newStm = CL.mkCall(strandName ^ "_init", args')
173                                  val newStms = if TargetSpec.dualState spec                                  val newStms = if TargetSpec.dualState spec
174                                        then [                                        then [

Legend:
Removed from v.3973  
changed lines
  Added in v.3974

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