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/depend/build.sml
ViewVC logotype

Diff of /sml/trunk/src/cm/depend/build.sml

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

revision 732, Mon Nov 13 21:59:12 2000 UTC revision 733, Fri Nov 17 05:13:45 2000 UTC
# Line 22  Line 22 
22          ->          ->
23          impexp SymbolMap.map            (* exports *)          impexp SymbolMap.map            (* exports *)
24          * GroupGraph.privileges         (* required privileges (aggregate) *)          * GroupGraph.privileges         (* required privileges (aggregate) *)
25            * SymbolSet.set                 (* imported symbols *)
26    
27      (* for the autoloader *)      (* for the autoloader *)
28      type looker = Symbol.symbol -> DAEnv.env      type looker = Symbol.symbol -> DAEnv.env
# Line 122  Line 123 
123          fun release (i, r) = (bb := SmlInfoMap.insert (!bb, i, SOME r); r)          fun release (i, r) = (bb := SmlInfoMap.insert (!bb, i, SOME r); r)
124          fun fetch i = SmlInfoMap.find (!bb, i)          fun fetch i = SmlInfoMap.find (!bb, i)
125    
126            (* We collect all imported symbols so that we can then narrow
127             * the list of libraries. *)
128            val gi_syms = ref SymbolSet.empty
129            fun add_gi_sym s = gi_syms := SymbolSet.add (!gi_syms, s)
130    
131          (* - get the result from the blackboard if it is there *)          (* - get the result from the blackboard if it is there *)
132          (* - otherwise trigger analysis *)          (* - otherwise trigger analysis *)
133          (* - detect cycles using locking *)          (* - detect cycles using locking *)
# Line 172  Line 178 
178                  else li := n :: !li                  else li := n :: !li
179    
180              (* register a global import, maintain filter sets *)              (* register a global import, maintain filter sets *)
181              fun globalImport (f, n) = let              fun globalImport (s, (f, n)) = let
182                  fun sameN (_, n') = DG.sbeq (n, n')                  fun sameN (_, n') = DG.sbeq (n, n')
183              in              in
184                    add_gi_sym s;
185                  case List.find sameN (!gi) of                  case List.find sameN (!gi) of
186                      NONE => gi := (f, n) :: !gi (* brand new *)                      NONE => gi := (f, n) :: !gi (* brand new *)
187                    | SOME (NONE, n') => () (* no filter -> no change *)                    | SOME (NONE, n') => () (* no filter -> no change *)
# Line 203  Line 210 
210                  fun dontcomplain s = DE.EMPTY                  fun dontcomplain s = DE.EMPTY
211                  fun lookfar () =                  fun lookfar () =
212                      case SM.find (imports, s) of                      case SM.find (imports, s) of
213                          SOME (farnth, e, _) => (globalImport (farnth ());                          SOME (farnth, e, _) => (globalImport (s, farnth ());
214                                                  look dontcomplain e s)                                                  look dontcomplain e s)
215                        | NONE =>                        | NONE =>
216                              (* We could complain here about an undefined                              (* We could complain here about an undefined
# Line 275  Line 282 
282    
283          val exports =          val exports =
284              case fopt of              case fopt of
285                  NONE =>                  NONE => let
286                      (* There is no filter -- so we are in an ordinary                      (* There is no filter -- so we are in an ordinary
287                       * group and should export all gimports as well as                       * group and should export all gimports as well as
288                       * all local definitions.                       * all local definitions.
289                       * No filter strengthening is necessary. *)                       * No filter strengthening is necessary. *)
290                      SM.unionWith #1 (localmap, gimports)                      fun add (s, b, m) =
291                            if SM.inDomain (localmap, s) then m
292                            else (add_gi_sym s; SM.insert (m, s, b))
293                    in
294                         SM.foldli add localmap gimports
295                    end
296                | SOME ss => let                | SOME ss => let
297                      (* There is a filter.                      (* There is a filter.
298                       * We export only the things in the filter.                       * We export only the things in the filter.
# Line 297  Line 309 
309                      in                      in
310                          (nth', DE.FILTER (ss, e), SS.intersection (allsyms,ss))                          (nth', DE.FILTER (ss, e), SS.intersection (allsyms,ss))
311                      end                      end
                     val availablemap = SM.unionWith #1 (localmap, imports)  
312                      fun addNodeFor (s, m) =                      fun addNodeFor (s, m) =
313                          case SM.find (availablemap, s) of                          case SM.find (localmap, s) of
314                              SOME n => SM.insert (m, s, strengthen n)                              SOME n => SM.insert (m, s, strengthen n)
315                            | NONE =>                            | NONE =>
316                                (case SM.find (imports, s) of
317                                     SOME n => (add_gi_sym s;
318                                                SM.insert (m, s, strengthen n))
319                                   | NONE =>
320                                  (* This should never happen since we                                  (* This should never happen since we
321                                   * checked beforehand during                                   * checked beforehand during
322                                   * parsing/semantic analysis *)                                   * parsing/semantic analysis *)
323                                  EM.impossible "build: undefined export"                                   EM.impossible "build: undefined export")
324                  in                  in
325                      SS.foldl addNodeFor SM.empty ss                      SS.foldl addNodeFor SM.empty ss
326                  end                  end
327      in      in
328          CheckSharing.check (exports, gp);          CheckSharing.check (exports, gp);
329          (exports, reqpriv)          (exports, reqpriv, !gi_syms)
330      end      end
331  end  end

Legend:
Removed from v.732  
changed lines
  Added in v.733

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