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/stable/stabilize.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/stable/stabilize.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 71  Line 71 
71          SymbolMap.foldl add IntBinaryMap.empty exports          SymbolMap.foldl add IntBinaryMap.empty exports
72      end      end
73    
74      fun deleteFile n = OS.FileSys.remove n      fun deleteFile n = OS.FileSys.remove n handle _ => ()
         handle e as Interrupt.Interrupt => raise e  
              | _ => ()  
75    
76      fun stabilize gp { group = g as GG.GROUP grec, anyerrors } = let      fun stabilize gp { group = g as GG.GROUP grec, anyerrors } = let
77    
# Line 94  Line 92 
92    
93              val bname = AbsPath.name o SmlInfo.binpath              val bname = AbsPath.name o SmlInfo.binpath
94              val bsz = OS.FileSys.fileSize o bname              val bsz = OS.FileSys.fileSize o bname
95    
96              fun cpb s i = let              fun cpb s i = let
97                  val ins = BinIO.openIn (bname i)                  fun copy ins = let
98                  fun cp () =                  fun cp () =
99                      if BinIO.endOfStream ins then ()                      if BinIO.endOfStream ins then ()
100                      else (BinIO.output (s, BinIO.input ins); cp ())                      else (BinIO.output (s, BinIO.input ins); cp ())
101              in              in
102                  cp () handle e => (BinIO.closeIn ins; raise e);                      cp ()
103                      BinIO.closeIn ins                  end
104                in
105                    SafeIO.perform { openIt = fn () => BinIO.openIn (bname i),
106                                     closeIt = BinIO.closeIn,
107                                     work = copy,
108                                     cleanup = fn () => () }
109              end              end
110    
111              val grpSrcInfo = (#errcons gp, anyerrors)              val grpSrcInfo = (#errcons gp, anyerrors)
# Line 371  Line 375 
375              val gpath = #grouppath grec              val gpath = #grouppath grec
376              val spath = FilenamePolicy.mkStablePath policy gpath              val spath = FilenamePolicy.mkStablePath policy gpath
377              fun delete () = deleteFile (AbsPath.name spath)              fun delete () = deleteFile (AbsPath.name spath)
378              val outs = AbsPath.openBinOut spath              fun work outs =
             fun try () =  
379                  (Say.vsay ["[stabilizing ", AbsPath.name gpath, "]\n"];                  (Say.vsay ["[stabilizing ", AbsPath.name gpath, "]\n"];
380                   writeInt32 (outs, sz);                   writeInt32 (outs, sz);
381                   BinIO.output (outs, Byte.stringToBytes pickle);                   BinIO.output (outs, Byte.stringToBytes pickle);
382                   app (cpb outs) memberlist;                   app (cpb outs) memberlist;
383                   BinIO.closeOut outs;                   mkStableGroup spath)
                  SOME (mkStableGroup spath))  
384          in          in
385              Interrupt.guarded try              SOME (SafeIO.perform { openIt = fn () => AbsPath.openBinOut spath,
386              handle e as Interrupt.Interrupt => (BinIO.closeOut outs;                                     closeIt = BinIO.closeOut,
387                                                  delete ();                                     work = work,
388                                                  raise e)                                     cleanup = delete })
389                   | exn => (BinIO.closeOut outs; NONE)              handle exn => NONE
390          end          end
391      in      in
392          case #stableinfo grec of          case #stableinfo grec of
# Line 451  Line 453 
453          val primconf = #primconf (#param gp)          val primconf = #primconf (#param gp)
454          val spath = FilenamePolicy.mkStablePath policy group          val spath = FilenamePolicy.mkStablePath policy group
455          val _ = Say.vsay ["[checking stable ", gname, "]\n"]          val _ = Say.vsay ["[checking stable ", gname, "]\n"]
456          val s = AbsPath.openBinIn spath  
457            fun work s = let
458    
459          fun getGroup' p =          fun getGroup' p =
460              case getGroup p of              case getGroup p of
461                  SOME g => g                  SOME g => g
462                | NONE =>                    | NONE => (error ["unable to find ", AbsPath.name p];
                     (error ["unable to find ", AbsPath.name p];  
463                       raise Format)                       raise Format)
464    
465          (* for getting sharing right... *)          (* for getting sharing right... *)
# Line 513  Line 515 
515          fun r_int () = let          fun r_int () = let
516              fun loop n = let              fun loop n = let
517                  val w8 = Byte.charToByte (rd ())                  val w8 = Byte.charToByte (rd ())
518                  val n' = n * 0w128 + Word8.toLargeWord (Word8.andb (w8, 0w127))                      val n' =
519                            n * 0w128 + Word8.toLargeWord (Word8.andb (w8, 0w127))
520              in              in
521                  if Word8.andb (w8, 0w128) = 0w0 then n' else loop n'                  if Word8.andb (w8, 0w128) = 0w0 then n' else loop n'
522              end              end
# Line 614  Line 617 
617              (p, getGroup' p)              (p, getGroup' p)
618          end          end
619    
         fun unpickle_group () = let  
   
620              val sublibs = r_list r_sg ()              val sublibs = r_list r_sg ()
621    
622              fun r_bn () =              fun r_bn () =
# Line 680  Line 681 
681                         grouppath = group,                         grouppath = group,
682                         sublibs = sublibs,                         sublibs = sublibs,
683                         stableinfo = GG.STABLE simap }                         stableinfo = GG.STABLE simap }
             before BinIO.closeIn s  
684          end          end
685      in      in
686          SOME (unpickle_group ())          SOME (SafeIO.perform { openIt = fn () => AbsPath.openBinIn spath,
687          handle Format => (BinIO.closeIn s; NONE)                                 closeIt = BinIO.closeIn,
688               | exn => (BinIO.closeIn s; raise exn)                                 work = work,
689      end handle IO.Io _ => NONE                                 cleanup = fn () => () })
690            handle Format => NONE
691        end
692  end  end
693    
694  end (* local *)  end (* local *)

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