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 4129, Fri Jul 1 00:33:40 2016 UTC revision 4130, Fri Jul 1 12:11:34 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 * TreeIR.strand * TreeIR.create -> CLang.decl      val genInitiallyFun : CodeGenEnv.t * TreeIR.block * TreeIR.strand * TreeIR.create -> CLang.decl
14    
15    end = struct    end = struct
16    
# Line 55  Line 55 
55                  CL.mkDestrProto "world" ::                  CL.mkDestrProto "world" ::
56                  CL.mkConstrProto("world", []) ::                  CL.mkConstrProto("world", []) ::
57                  members                  members
58              val members = if #hasGlobalUpdate spec
59                    then memberFun (CL.voidTy, "global_update", []) :: members
60                    else members
61            in            in
62              CL.D_ClassDef{              CL.D_ClassDef{
63                  name = "world",                  name = "world",
# Line 66  Line 69 
69                }                }
70            end            end
71    
72      fun genInitiallyFun (env : CodeGenEnv.t, strand, create) = let      fun genInitiallyFun (env : CodeGenEnv.t, globInit, strand, create) = let
73            val IR.Strand{name, stateInit=IR.Method{usesGlobals, needsWorld, ...}, ...} = strand            val IR.Strand{name, stateInit=IR.Method{usesGlobals, needsWorld, ...}, ...} = strand
74            val strandName = Atom.toString name            val strandName = Atom.toString name
75            val env = Env.insert(env, PseudoVars.world, "this")            val env = Env.insert(env, PseudoVars.world, "this")
# Line 200  Line 203 
203                          CL.mkReturn(SOME(CL.mkVar "false"))                          CL.mkReturn(SOME(CL.mkVar "false"))
204                        ]                        ]
205                  val stms = if #hasGlobals spec                  val stms = if #hasGlobals spec
206                        then CL.mkIfThen (CL.mkApply ("init_globals", [thisV]),                        then CL.mkDeclInit (
                           CL.mkReturn(SOME(CL.mkVar "true"))  
                         ) ::  
                         CL.mkDeclInit (  
207                            RN.globalPtrTy, RN.globalsVar, CL.mkIndirect(thisV, "_globals")) ::                            RN.globalPtrTy, RN.globalsVar, CL.mkIndirect(thisV, "_globals")) ::
208                          stms                          stms
209                        else stms                        else stms
210                    val stms = if #hasGlobalInit spec
211                          then CL.mkIfThen (CL.mkApply ("init_globals", [thisV]),
212                              CL.mkReturn(SOME(CL.mkVar "true"))
213                            ) :: stms
214                          else stms
215                  in                  in
216                    stms                    stms
217                  end (* tr *)                  end (* tr *)

Legend:
Removed from v.4129  
changed lines
  Added in v.4130

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