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/main/cm-boot.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/main/cm-boot.sml

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

revision 451, Sat Oct 23 15:05:55 1999 UTC revision 453, Tue Oct 26 06:24:34 1999 UTC
# Line 116  Line 116 
116                         end                         end
117                         fun destroy_state gp i =                         fun destroy_state gp i =
118                             (Compile.evict i;                             (Compile.evict i;
                             Servers.evict i;  
119                              Link.evict gp i)                              Link.evict gp i)
120                         val getII = Compile.getII)                         val getII = Compile.getII)
121    
# Line 215  Line 214 
214                case Parse.parse NONE (param ()) sflag p of                case Parse.parse NONE (param ()) sflag p of
215                    NONE => false                    NONE => false
216                  | SOME (g, gp) =>                  | SOME (g, gp) =>
217                        (f gp g                        SafeIO.perform { openIt = fn () => (),
218                         before Servers.reset ())                                         closeIt = Servers.reset,
219                                           work = fn () => f gp g,
220                                           cleanup = fn () => () }
221            end            end
222    
223            val listLibs = Parse.listLibs            val listLibs = Parse.listLibs
# Line 237  Line 238 
238                fun shutdown () = OS.Process.exit OS.Process.success                fun shutdown () = OS.Process.exit OS.Process.success
239                fun say_ok () = Say.say ["SLAVE: ok\n"]                fun say_ok () = Say.say ["SLAVE: ok\n"]
240                fun say_error () = Say.say ["SLAVE: error\n"]                fun say_error () = Say.say ["SLAVE: error\n"]
241                  fun say_pong () = Say.say ["SLAVE: pong\n"]
242    
243                  val touch = HostMachDepVC.Interact.useStream o TextIO.openString
244    
245                fun waitForStart () = let                fun waitForStart () = let
246                    val line = TextIO.inputLine TextIO.stdIn                    val line = TextIO.inputLine TextIO.stdIn
# Line 244  Line 248 
248                    if line = "" then shutdown ()                    if line = "" then shutdown ()
249                    else case String.tokens Char.isSpace line of                    else case String.tokens Char.isSpace line of
250                        ["cm", d, f] => do_cm (d, f)                        ["cm", d, f] => do_cm (d, f)
251                      | ["cmb", d, db] => do_cmb (d, db)                      | ["cmb", archos, d, db] => do_cmb (archos, d, db)
252                        | ["ping"] => (say_pong (); waitForStart ())
253                        | ["finish"] => (say_ok (); waitForStart ())
254                      | ["shutdown"] => shutdown ()                      | ["shutdown"] => shutdown ()
255                      | _ => (say_error (); waitForStart ())                      | _ => (say_error (); waitForStart ())
256                end handle _ => (say_error (); waitForStart ())                end handle _ => (say_error (); waitForStart ())
257    
258                and do_cmb (d, db) = let                and do_cmb (archos, d, db) = let
259                    val _ = OS.FileSys.chDir d                    val _ = OS.FileSys.chDir d
260                    val c = SrcPath.cwdContext ()                    val c = SrcPath.cwdContext ()
261                      val slave = CMBSlave.slave { load = autoload, touch = touch }
262                in                in
263                    case CMBSlave.slave make db of                    case slave archos db of
264                        NONE => (say_error (); waitForStart ())                        NONE => (say_error (); waitForStart ())
265                      | SOME (g, trav, evict) => let                      | SOME (g, trav) => let
266                            val _ = say_ok ()                            val _ = say_ok ()
267                            val index = Reachable.snodeMap g                            val index = Reachable.snodeMap g
268                        in                        in
269                            workLoop (index, trav, evict, c)                            workLoop (index, trav, c)
270                        end                        end
271                end handle _ => (say_error (); waitForStart ())                end handle _ => (say_error (); waitForStart ())
272    
# Line 276  Line 283 
283                            val trav = Compile.newSbnodeTraversal () gp                            val trav = Compile.newSbnodeTraversal () gp
284                            fun trav' sbn = isSome (trav sbn)                            fun trav' sbn = isSome (trav sbn)
285                        in                        in
286                            workLoop (index, trav', Compile.evict, c)                            workLoop (index, trav', c)
287                        end                        end
288                end handle _ => (say_error (); waitForStart ())                end handle _ => (say_error (); waitForStart ())
289    
290                and workLoop (index, trav, evict, c) = let                and workLoop (index, trav, c) = let
291                    fun f2sn f =                    fun f2sn f =
292                        SrcPathMap.find (index,                        SrcPathMap.find (index,
293                                         SrcPath.native { context = c,                                         SrcPath.native { context = c,
# Line 290  Line 297 
297                    in                    in
298                        if line = "" then shutdown ()                        if line = "" then shutdown ()
299                        else case String.tokens Char.isSpace line of                        else case String.tokens Char.isSpace line of
300                            ["evict", f] =>                            ["compile", f] => let
                               (case f2sn f of  
                                    NONE => loop ()  
                                  | SOME (DG.SNODE { smlinfo, ... }) =>  
                                        (evict smlinfo; loop ()))  
                         | ["compile", f] => let  
301                                val p = SrcPath.native { context = c, spec = f }                                val p = SrcPath.native { context = c, spec = f }
302                            in                            in
303                                case SrcPathMap.find (index, p) of                                case SrcPathMap.find (index, p) of
# Line 305  Line 307 
307                                    in                                    in
308                                        if trav sbn then (say_ok (); loop ())                                        if trav sbn then (say_ok (); loop ())
309                                        else (say_error (); loop ())                                        else (say_error (); loop ())
310                                    end                                    end handle _ => (say_error (); loop ())
311                            end                            end
312                          | ["cm", d, f] => do_cm (d, f)                          | ["cm", d, f] => do_cm (d, f)
313                            | ["cmb", archos, d, db] => do_cmb (archos, d, db)
314                          | ["finish"] => (say_ok (); waitForStart ())                          | ["finish"] => (say_ok (); waitForStart ())
315                            | ["ping"] => (say_pong (); loop ())
316                          | ["shutdown"] => shutdown ()                          | ["shutdown"] => shutdown ()
317                          | _ => (say_error (); loop ())                          | _ => (say_error (); loop ())
318                    end handle _ => (say_error (); loop ())                    end handle _ => (say_error (); loop ())
# Line 316  Line 320 
320                    loop ()                    loop ()
321                end                end
322            in            in
323                  ignore (Signals.setHandler (Signals.sigINT, Signals.IGNORE));
324                say_ok ();                (* announce readiness *)                say_ok ();                (* announce readiness *)
325                waitForStart ()                waitForStart () handle _ => ();
326                  OS.Process.exit OS.Process.failure
327            end            end
328    
329            fun reset () =            fun reset () =

Legend:
Removed from v.451  
changed lines
  Added in v.453

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