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 347, Mon Jun 21 15:08:30 1999 UTC revision 348, Tue Jun 22 05:43:46 1999 UTC
# Line 81  Line 81 
81          val grouppath = #grouppath grec          val grouppath = #grouppath grec
82          val groupdir = AbsPath.dir grouppath          val groupdir = AbsPath.dir grouppath
83    
84          fun doit granted = let          fun doit wrapped = let
85    
86              val _ =              val _ =
87                  if StringSet.isEmpty granted then ()                  if StringSet.isEmpty wrapped then ()
88                  else                  else
89                      Say.say ("$Stabilize: wrapping the following privileges:\n"                      Say.say ("$Stabilize: wrapping the following privileges:\n"
90                               :: map (fn s => ("  " ^ s ^ "\n"))                               :: map (fn s => ("  " ^ s ^ "\n"))
91                                      (StringSet.listItems granted))                                      (StringSet.listItems wrapped))
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
# Line 111  Line 111 
111              val grpSrcInfo = (#errcons gp, anyerrors)              val grpSrcInfo = (#errcons gp, anyerrors)
112    
113              val exports = #exports grec              val exports = #exports grec
114              val islib = #islib grec              val required = StringSet.difference (#required grec, wrapped)
             val required = StringSet.difference (#required grec, granted)  
115              val sublibs = #sublibs grec              val sublibs = #sublibs grec
116    
117              (* The format of a stable archive is the following:              (* The format of a stable archive is the following:
# Line 307  Line 306 
306                   * have them back when we unpickle BNODEs. *)                   * have them back when we unpickle BNODEs. *)
307                  concat (w_list w_sg sublibs                  concat (w_list w_sg sublibs
308                              (w_exports exports                              (w_exports exports
309                                  (w_bool islib                                   (w_privileges required k0)) m0)
                                     (w_privileges required k0))) m0)  
310              end              end
311    
312              val pickle = pickle_group ()              val pickle = pickle_group ()
# Line 357  Line 355 
355                  val simap = genStableInfoMap (exports, grouppath)                  val simap = genStableInfoMap (exports, grouppath)
356              in              in
357                  GG.GROUP { exports = exports,                  GG.GROUP { exports = exports,
358                             islib = islib,                             kind = GG.STABLELIB simap,
359                             required = required,                             required = required,
360                             grouppath = grouppath,                             grouppath = grouppath,
361                             sublibs = sublibs,                             sublibs = sublibs }
                            stableinfo = GG.STABLE simap }  
362              end              end
363    
364              fun writeInt32 (s, i) = let              fun writeInt32 (s, i) = let
# Line 389  Line 386 
386              handle exn => NONE              handle exn => NONE
387          end          end
388      in      in
389          case #stableinfo grec of          case #kind grec of
390              GG.STABLE _ => SOME g              GG.STABLELIB _ => SOME g
391            | GG.NONSTABLE granted =>            | GG.NOLIB => EM.impossible "stabilize: no library"
392              | GG.LIB wrapped =>
393                  if not (recomp gp g) then                  if not (recomp gp g) then
394                      (anyerrors := true; NONE)                      (anyerrors := true; NONE)
395                  else let                  else let
396                      fun notStable (_, GG.GROUP { stableinfo, ... }) =                      fun notStable (_, GG.GROUP { kind, ... }) =
397                          case stableinfo of                          case kind of GG.STABLELIB _ => true | _ => false
                             GG.STABLE _ => false  
                           | GG.NONSTABLE _ => true  
398                  in                  in
399                      case List.filter notStable (#sublibs grec) of                      case List.filter notStable (#sublibs grec) of
400                          [] => doit granted                          [] => doit wrapped
401                        | l => let                        | l => let
402                              val grammar = case l of [_] => " is" | _ => "s are"                              val grammar = case l of [_] => " is" | _ => "s are"
403                              fun ppb pps = let                              fun ppb pps = let
# Line 671  Line 667 
667                  StringSet.addList (StringSet.empty, r_list r_string ())                  StringSet.addList (StringSet.empty, r_list r_string ())
668    
669              val exports = r_exports ()              val exports = r_exports ()
             val islib = r_bool ()  
670              val required = r_privileges ()              val required = r_privileges ()
671              val simap = genStableInfoMap (exports, group)              val simap = genStableInfoMap (exports, group)
672          in          in
673              GG.GROUP { exports = exports,              GG.GROUP { exports = exports,
674                         islib = islib,                         kind = GG.STABLELIB simap,
675                         required = required,                         required = required,
676                         grouppath = group,                         grouppath = group,
677                         sublibs = sublibs,                         sublibs = sublibs }
                        stableinfo = GG.STABLE simap }  
678          end          end
679      in      in
680          SOME (SafeIO.perform { openIt = fn () => AbsPath.openBinIn spath,          SOME (SafeIO.perform { openIt = fn () => AbsPath.openBinIn spath,

Legend:
Removed from v.347  
changed lines
  Added in v.348

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