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/compile/recomp.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/compile/recomp.sml

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

revision 344, Sun Jun 20 03:14:57 1999 UTC revision 345, Sun Jun 20 11:55:26 1999 UTC
# Line 129  Line 129 
129              val os = BinInfo.offset i              val os = BinInfo.offset i
130              val descr = BinInfo.describe i              val descr = BinInfo.describe i
131              val _ = Say.vsay ["[consulting ", descr, "]\n"]              val _ = Say.vsay ["[consulting ", descr, "]\n"]
132              val s = AbsPath.openBinIn stable              fun work s = let
             fun load () = let  
133                  val _ = Seek.seek (s, os)                  val _ = Seek.seek (s, os)
134                  val bfc = BF.read { stream = s, name = descr, senv = be,                  val bfc = BF.read { stream = s, name = descr, senv = be,
135                                      keep_code = true }                                      keep_code = true }
136                  val memo = { bfc = bfc, ctxt = be }                  val memo = { bfc = bfc, ctxt = be }
137              in              in
                 BinIO.closeIn s;  
138                  PS.recomp_memo_stable (i, memo);                  PS.recomp_memo_stable (i, memo);
139                  memo2envdelta memo                  memo2envdelta memo
140              end              end
141          in          in
142              SOME (load ()) handle exn => let              SOME (SafeIO.perform { openIt = fn () => AbsPath.openBinIn stable,
143                                       closeIt = BinIO.closeIn,
144                                       work = work,
145                                       cleanup = fn () => () })
146                handle exn => let
147                  fun ppb pps =                  fun ppb pps =
148                      (PP.add_string pps (General.exnMessage exn);                      (PP.add_string pps (General.exnMessage exn);
149                       PP.add_newline pps)                       PP.add_newline pps)
150              in              in
                 BinIO.closeIn s;  
151                  BinInfo.error i EM.COMPLAIN                  BinInfo.error i EM.COMPLAIN
152                         "unable to load stable library module" ppb;                         "unable to load stable library module" ppb;
153                  NONE                  NONE
# Line 169  Line 170 
170            | NONE => let            | NONE => let
171                  val binpath = SmlInfo.binpath i                  val binpath = SmlInfo.binpath i
172                  val binname = AbsPath.name binpath                  val binname = AbsPath.name binpath
                 fun delete () = OS.FileSys.remove binname handle _ => ()  
173    
174                  fun save bfc = let                  fun save bfc = let
175                      val s = AbsPath.openBinOut binpath                      fun writer s =
176                      fun writer () = BF.write { stream = s, content = bfc,                          (BF.write { stream = s, content = bfc,
177                                                 keep_code = true }                                      keep_code = true };
178                  in                           Say.vsay ["[wrote ", binname, "]\n"])
179                      Interrupt.guarded writer handle exn =>                      fun cleanup () = OS.FileSys.remove binname handle _ => ()
180                          (BinIO.closeOut s; raise exn);                  in
181                      BinIO.closeOut s;                      SafeIO.perform { openIt =
182                      Say.vsay ["[wrote ", binname, "]\n"]                                           fn () => AbsPath.openBinOut binpath,
183                  end handle e as Interrupt.Interrupt => (delete (); raise e)                                       closeIt = BinIO.closeOut,
184                           | exn => let                                       work = writer,
185                                         cleanup = cleanup }
186                        handle exn => let
187                                 fun ppb pps =                                 fun ppb pps =
188                                     (PP.add_string pps (General.exnMessage exn);                                     (PP.add_string pps (General.exnMessage exn);
189                                      PP.add_newline pps)                                      PP.add_newline pps)
190                             in                             in
                                delete ();  
191                                 SmlInfo.error gp i EM.WARN                                 SmlInfo.error gp i EM.WARN
192                                         ("failed to write " ^ binname) ppb                                         ("failed to write " ^ binname) ppb
193                        end;
194                        AbsPath.setTime (binpath, SmlInfo.lastseen i)
195                             end                             end
196    
197                  fun load () = let                  fun load () = let
198                      val bin_ts = AbsPath.tstamp binpath                      val bin_ts = AbsPath.tstamp binpath
199                  in                      fun openIt () = AbsPath.openBinIn binpath
200                      if TStamp.earlier (bin_ts, SmlInfo.lastseen i) then                      fun reader s = BF.read { stream = s, name = binname,
                         NONE  
                     else let  
                         val s = AbsPath.openBinIn binpath  
                         fun read () = BF.read { stream = s, name = binname,  
201                                                  senv = stat, keep_code = true }                                                  senv = stat, keep_code = true }
202                      in                      in
203                          (SOME (Interrupt.guarded read)                      if TStamp.needsUpdate { target = bin_ts,
204                           before SmlInfo.forgetParsetree i)                                              source = SmlInfo.lastseen i } then
205                          handle exn => (BinIO.closeIn s; raise exn)                          NONE
206                      end handle e as Interrupt.Interrupt => raise e                      else
207                               | _ => NONE                          SOME (SafeIO.perform { openIt = openIt,
208                                                   closeIt = BinIO.closeIn,
209                                                   work = reader,
210                                                   cleanup = fn () => () })
211                            handle _ => NONE
212                  end                  end
213    
214                  fun compile () =                  fun compile () =
# Line 216  Line 219 
219                                                " -> ", binname, "...]\n"]                                                " -> ", binname, "...]\n"]
220                              val corenv = #corenv (#param gp)                              val corenv = #corenv (#param gp)
221                              val cmData = PidSet.listItems pids                              val cmData = PidSet.listItems pids
222                                (* clear error flag (could still be set from
223                                 * earlier run) *)
224                                val _ = #anyErrors source := false
225                              val bfc = BF.create { runtimePid = NONE,                              val bfc = BF.create { runtimePid = NONE,
226                                                    splitting = SmlInfo.split i,                                                    splitting = SmlInfo.split i,
227                                                    cmData = cmData,                                                    cmData = cmData,
# Line 230  Line 236 
236                              save bfc;                              save bfc;
237                              PS.recomp_memo_sml (i, memo);                              PS.recomp_memo_sml (i, memo);
238                              SOME (memo2envdelta memo)                              SOME (memo2envdelta memo)
239                          end handle e as Interrupt.Interrupt => raise e                          end handle BF.Compile _ => NONE
                                  | BF.Compile _ => NONE  
240                                   | e => let                                   | e => let
241                                         fun ppb pps =                                         fun ppb pps =
242                                             (PP.add_newline pps;                                             (PP.add_newline pps;

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

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