Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/cm/bootstrap/btcompile.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/bootstrap/btcompile.sml

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

revision 345, Sun Jun 20 11:55:26 1999 UTC revision 349, Tue Jun 22 06:17:47 1999 UTC
# Line 50  Line 50 
50          val maingspec = AbsPath.native { context = ctxt, spec = maingspec }          val maingspec = AbsPath.native { context = ctxt, spec = maingspec }
51          val pcmodespec = AbsPath.native { context = ctxt, spec = pcmodespec }          val pcmodespec = AbsPath.native { context = ctxt, spec = pcmodespec }
52          val binroot = AbsPath.native { context = ctxt, spec = binroot }          val binroot = AbsPath.native { context = ctxt, spec = binroot }
53            val pidfile = AbsPath.joinDirFile { dir = binroot, file = "RTPID" }
54            val listfile = AbsPath.joinDirFile { dir = binroot, file = "BINLIST" }
55    
56          val pcmode = let          val pcmode = let
57              fun work s = let              fun work s = let
# Line 79  Line 81 
81                                        absArc = "ABSOLUTE" }                                        absArc = "ABSOLUTE" }
82                                      { arch = MachDepVC.architecture, os = os }                                      { arch = MachDepVC.architecture, os = os }
83    
84            fun mkParam { primconf, pervasive, pervcorepids } { corenv } =
85                { primconf = primconf,
86                  fnpolicy = fnpolicy,
87                  pcmode = pcmode,
88                  symenv = SSV.env,
89                  keep_going = keep_going,
90                  pervasive = pervasive,
91                  corenv = corenv,
92                  pervcorepids = pervcorepids }
93    
94          val emptydyn = E.dynamicPart E.emptyEnv          val emptydyn = E.dynamicPart E.emptyEnv
95    
96          (* first, build an initial GeneralParam.info, so we can          (* first, build an initial GeneralParam.info, so we can
# Line 98  Line 110 
110              val primconf = Primitive.configuration [pspec]              val primconf = Primitive.configuration [pspec]
111          end          end
112    
113          val param_nocore = { primconf = primconf,          val mkInitParam = mkParam { primconf = primconf,
                              fnpolicy = fnpolicy,  
                              pcmode = pcmode,  
                              symenv = SSV.env,  
                              keep_going = keep_going,  
114                               pervasive = E.emptyEnv,                               pervasive = E.emptyEnv,
                              corenv = BE.staticPart BE.emptyEnv,  
115                               pervcorepids = PidSet.empty }                               pervcorepids = PidSet.empty }
116    
117            val param_nocore = mkInitParam { corenv = BE.staticPart BE.emptyEnv }
118    
119          val groupreg = GroupReg.new ()          val groupreg = GroupReg.new ()
120          val errcons = EM.defaultConsumer ()          val errcons = EM.defaultConsumer ()
121          val ginfo_nocore = { param = param_nocore, groupreg = groupreg,          val ginfo_nocore = { param = param_nocore, groupreg = groupreg,
# Line 123  Line 132 
132               * brewed pervasive env, core env, and primitives *)               * brewed pervasive env, core env, and primitives *)
133              val core = valOf (RT.snode ginfo_nocore core)              val core = valOf (RT.snode ginfo_nocore core)
134              val corenv =  CoerceEnv.es2bs (#1 (#stat core))              val corenv =  CoerceEnv.es2bs (#1 (#stat core))
             (* even though we have a pid for the core, we can't use it  
              * (otherwise we would invalidate earlier compilation results) *)  
             val pervcorepids = PidSet.empty  
135    
136              (* The following is a bit of a hack (but corenv is a hack anyway):              (* The following is a bit of a hack (but corenv is a hack anyway):
137               * As soon as we have core available, we have to patch the               * As soon as we have core available, we have to patch the
138               * ginfo to include the correct corenv (because virtually               * ginfo to include the correct corenv (because virtually
139               * everybody else needs access to corenv). *)               * everybody else needs access to corenv). *)
140              val param_justcore = { primconf = primconf,              val param_justcore = mkInitParam { corenv = corenv }
                                    fnpolicy = fnpolicy,  
                                    pcmode = pcmode,  
                                    symenv = SSV.env,  
                                    keep_going = keep_going,  
                                    pervasive = E.emptyEnv,  
                                    corenv = corenv,  
                                    pervcorepids = pervcorepids }  
141              val ginfo_justcore = { param = param_justcore, groupreg = groupreg,              val ginfo_justcore = { param = param_justcore, groupreg = groupreg,
142                                     errcons = errcons }                                     errcons = errcons }
143    
# Line 159  Line 158 
158    
159              val _ = ovldR := savedOvld              val _ = ovldR := savedOvld
160    
161              val param = { primconf = Primitive.configuration pspecs,              val param =
162                            fnpolicy = fnpolicy,                  mkParam { primconf = Primitive.configuration pspecs,
                           pcmode = pcmode,  
                           symenv = SSV.env,  
                           keep_going = keep_going,  
163                            pervasive = E.mkenv { static = #1 (#stat pervasive),                            pervasive = E.mkenv { static = #1 (#stat pervasive),
164                                                  symbolic = #1 (#sym pervasive),                                                  symbolic = #1 (#sym pervasive),
165                                                  dynamic = emptydyn },                                                  dynamic = emptydyn },
                           corenv = CoerceEnv.es2bs (#1 (#stat core)),  
166                            pervcorepids =                            pervcorepids =
167                              PidSet.addList (PidSet.empty,                              PidSet.addList (PidSet.empty,
168                                              [#2 (#stat pervasive),                                              [#2 (#stat pervasive),
169                                               #2 (#sym pervasive),                                               #2 (#sym pervasive),
170                                               #2 (#stat core)]) }                                               #2 (#stat core)]) }
171                            { corenv = corenv }
172          in          in
173              case Parse.parse param NONE maingspec of              case Parse.parse param NONE maingspec of
174                  NONE => NONE                  NONE => false
175                | SOME (g, gp) =>                | SOME (g, gp) =>
176                      if recomp gp g then                      if recomp gp g then let
177                          SOME { rtspid = PS.toHex (#2 (#stat rts)),                          val rtspid = PS.toHex (#2 (#stat rts))
178                                 bootfiles =                          val bootfiles =
179                                   map (fn x => (x, NONE)) binpaths @                                   map (fn x => (x, NONE)) binpaths @
180                                   MkBootList.group g }                              MkBootList.group g
181                      else NONE                          fun writeList s = let
182          end handle Option => (RT.clearFailures (); NONE)                              fun offset NONE = ["\n"]
183                                  | offset (SOME i) = ["@", Int.toString i, "\n"]
184                                fun showBootFile (p, off) =
185                                    TextIO.output (s,
186                                                   concat (AbsPath.name p
187                                                           :: offset off))
188                            in
189                                app showBootFile bootfiles
190                            end
191                        in
192                            Say.say ["Runtime System PID is: ", rtspid, "\n"];
193                            SafeIO.perform { openIt = fn () =>
194                                               AbsPath.openTextOut pidfile,
195                                             closeIt = TextIO.closeOut,
196                                             work = fn s =>
197                                               TextIO.output (s, rtspid ^ "\n"),
198                                             cleanup = fn () =>
199                                               AbsPath.delete pidfile };
200                            SafeIO.perform { openIt = fn () =>
201                                               AbsPath.openTextOut listfile,
202                                             closeIt = TextIO.closeOut,
203                                             work = writeList,
204                                             cleanup = fn () =>
205                                               AbsPath.delete listfile };
206                            true
207                        end
208                        else false
209            end handle Option => (RT.clearFailures (); false)
210                     (* to catch valOf failures in "rt" *)                     (* to catch valOf failures in "rt" *)
211      in      in
212          case BuildInitDG.build ginfo_nocore initgspec of          case BuildInitDG.build ginfo_nocore initgspec of
213              SOME x => main_compile x              SOME x => main_compile x
214            | NONE => NONE            | NONE => false
215      end      end
216  end  end

Legend:
Removed from v.345  
changed lines
  Added in v.349

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