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 358, Mon Jun 28 13:59:11 1999 UTC revision 360, Tue Jun 29 09:21:02 1999 UTC
# Line 8  Line 8 
8   *)   *)
9  functor BootstrapCompileFn (structure MachDepVC: MACHDEP_VC  functor BootstrapCompileFn (structure MachDepVC: MACHDEP_VC
10                              val os: SMLofNJ.SysInfo.os_kind) :> sig                              val os: SMLofNJ.SysInfo.os_kind) :> sig
11        val compile : string option -> bool
     val compile :  
         { dirbase: string,  
           pcmodespec: string,  
           initgspec: string,  
           maingspec: string }  
         -> bool  
   
12  end = struct  end = struct
13    
14      structure EM = GenericVC.ErrorMsg      structure EM = GenericVC.ErrorMsg
# Line 36  Line 29 
29      structure RecompPersstate =      structure RecompPersstate =
30          RecompPersstateFn (structure MachDepVC = MachDepVC          RecompPersstateFn (structure MachDepVC = MachDepVC
31                             val discard_code = true                             val discard_code = true
32                             fun discard_value (i: SmlInfo.info) = ())                             fun new_smlinfo (i, popt) = ())
33    
34      structure Recomp = RecompFn (structure PS = RecompPersstate)      structure Recomp = RecompFn (structure PS = RecompPersstate)
35      structure RT = CompileGenericFn (structure CT = Recomp)      structure RT = CompileGenericFn (structure CT = Recomp)
36    
# Line 65  Line 59 
59              end              end
60            | _ => raise Fail "BootstrapCompile:listName: bad name"            | _ => raise Fail "BootstrapCompile:listName: bad name"
61    
62      fun compile { dirbase, pcmodespec, initgspec, maingspec } = let      fun compile dbopt = let
63    
64            val dirbase = getOpt (dbopt, BtNames.dirbaseDefault)
65            val pcmodespec = BtNames.pcmodespec
66            val initgspec = BtNames.initgspec
67            val maingspec = BtNames.maingspec
68    
69          val arch = MachDepVC.architecture          val arch = MachDepVC.architecture
70          val osname = FilenamePolicy.kind2name os          val osname = FilenamePolicy.kind2name os
# Line 106  Line 105 
105          val initgspec = stdpath initgspec          val initgspec = stdpath initgspec
106          val maingspec = stdpath maingspec          val maingspec = stdpath maingspec
107    
108            val cmifile = valOf (SrcPath.reAnchoredName (initgspec, bootdir))
109                handle Option => raise Fail "BootstrapCompile: cmifile"
110    
111          val initfnpolicy =          val initfnpolicy =
112              FilenamePolicy.separate { bindir = bootdir, bootdir = bootdir }              FilenamePolicy.separate { bindir = bootdir, bootdir = bootdir }
113                  { arch = arch, os = os }                  { arch = arch, os = os }
# Line 129  Line 131 
131    
132          (* first, build an initial GeneralParam.info, so we can          (* first, build an initial GeneralParam.info, so we can
133           * deal with the pervasive env and friends... *)           * deal with the pervasive env and friends... *)
         local  
             (* We could actually go and calculate the actual pid of primEnv.  
              * But in reality it's pretty pointless to do so... *)  
             val bogusPid = PS.fromBytes (Byte.stringToBytes "0123456789abcdef")  
             val pspec = { name = "primitive",  
                           env = E.mkenv { static = E.primEnv,  
                                           symbolic = E.symbolicPart E.emptyEnv,  
                                           dynamic = emptydyn },  
                           pidInfo = { statpid = bogusPid,  
                                       sympid = bogusPid,  
                                       ctxt = SE.empty } }  
         in  
             val primconf = Primitive.configuration [pspec]  
         end  
134    
135            val primconf = Primitive.primEnvConf
136          val mkInitParam = mkParam { primconf = primconf,          val mkInitParam = mkParam { primconf = primconf,
137                                      pervasive = E.emptyEnv,                                      pervasive = E.emptyEnv,
138                                      pervcorepids = PidSet.empty,                                      pervcorepids = PidSet.empty,
# Line 229  Line 218 
218                          in                          in
219                              app showBootFile bootfiles                              app showBootFile bootfiles
220                          end                          end
221                            fun cpCMI (ins, outs) = let
222                                val N = 4096
223                                fun cp () =
224                                    if TextIO.endOfStream ins then ()
225                                    else (TextIO.output (outs,
226                                                         TextIO.inputN (ins, N));
227                                          cp ())
228                            in
229                                cp ()
230                            end
231                      in                      in
232                          Say.say ["Runtime System PID is: ", rtspid, "\n"];                          Say.say ["Runtime System PID is: ", rtspid, "\n"];
233                          SafeIO.perform { openIt = fn () =>                          SafeIO.perform { openIt = fn () =>
# Line 246  Line 245 
245                                           cleanup = fn () =>                                           cleanup = fn () =>
246                                             OS.FileSys.remove listfile                                             OS.FileSys.remove listfile
247                                             handle _ => () };                                             handle _ => () };
248                            SafeIO.perform { openIt = fn () =>
249                                               (SrcPath.openTextIn initgspec,
250                                                AutoDir.openTextOut cmifile),
251                                             closeIt = fn (ins, outs) =>
252                                               (TextIO.closeIn ins;
253                                                TextIO.closeOut outs),
254                                             work = cpCMI,
255                                             cleanup = fn () =>
256                                               OS.FileSys.remove cmifile
257                                               handle _ => () };
258                          true                          true
259                      end                      end
260                      else false                      else false

Legend:
Removed from v.358  
changed lines
  Added in v.360

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