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 281, Tue May 18 14:57:00 1999 UTC revision 282, Wed May 19 05:14:03 1999 UTC
# Line 1  Line 1 
1  signature BUILDDEPEND = sig  signature BUILDDEPEND = sig
2      val build : { subexports: (DependencyGraph.farnode * DependencyGraph.env)      val build : { subexports: (DependencyGraph.farsbnode * DependencyGraph.env)
3                                  SymbolMap.map,                                  SymbolMap.map,
4                    smlfiles: SmlInfo.info list,                    smlfiles: SmlInfo.info list,
5                    localdefs: SmlInfo.info SymbolMap.map }                    localdefs: SmlInfo.info SymbolMap.map }
6          -> { nodemap: DependencyGraph.node SymbolMap.map,          -> { nodemap: DependencyGraph.snode SymbolMap.map,
7               rootset: DependencyGraph.node list }               rootset: DependencyGraph.snode list }
8  end  end
9    
10  structure BuildDepend :> BUILDDEPEND = struct  structure BuildDepend :> BUILDDEPEND = struct
# Line 74  Line 74 
74                              end                              end
75                      in                      in
76                          PrettyPrint.add_newline pps;                          PrettyPrint.add_newline pps;
77                          recur (AbsPath.spec f, history);                          recur (AbsPath.spec f, history)
                         PrettyPrint.add_string pps "...";  
                         PrettyPrint.add_newline pps  
78                      end                      end
79                  in                  in
80                      SmlInfo.error i "cyclic ML dependencies" pphist;                      SmlInfo.error i "cyclic ML dependencies" pphist;
81                      release (i, (DG.NODE { smlinfo = i,                      release (i, (DG.SNODE { smlinfo = i,
82                                             localimports = [],                                             localimports = [],
83                                             globalimports = [] },                                             globalimports = [] },
84                                   DG.EMPTY))                                   DG.EMPTY))
# Line 93  Line 91 
91              val gi = ref []              val gi = ref []
92    
93              (* register a local import *)              (* register a local import *)
94              fun localImport (n as DG.NODE { smlinfo = i, ... }) = let              fun localImport n =
95                  fun sameNode (DG.NODE { smlinfo = i', ... }) =                  if List.exists (fn n' => DG.seq (n, n')) (!li) then ()
                     SmlInfo.eq (i, i')  
             in  
                 if List.exists sameNode (!li) then ()  
96                  else li := n :: !li                  else li := n :: !li
             end  
97    
98              (* register a global import, maintain filter sets *)              (* register a global import, maintain filter sets *)
99              fun globalImport (farn as DG.PNODE p) = let              fun globalImport (f, n) = let
100                      fun sameFarNode (DG.FARNODE _) = false                  fun sameN (_, n') = DG.sbeq (n, n')
101                        | sameFarNode (DG.PNODE p') = Primitive.eq (p, p')              in
102                  in                  case List.find sameN (!gi) of
103                      if List.exists sameFarNode (!gi) then ()                      NONE => gi := (f, n) :: !gi (* brand new *)
104                      else gi := farn :: !gi                    | SOME (NONE, n') => () (* no filter -> no change *)
105                  end                    | SOME (SOME f', n') => let
               | globalImport (farn as DG.FARNODE (f, n)) = let  
                     fun sameFarNode (DG.PNODE _) = false  
                       | sameFarNode (DG.FARNODE (_, n')) = let  
                             val DG.NODE { smlinfo = i, ... } = n  
                             val DG.NODE { smlinfo = i', ... } = n'  
                         in  
                             SmlInfo.eq (i, i')  
                         end  
                 in  
                     case List.find sameFarNode (!gi) of  
                         NONE => gi := farn :: !gi (* brand new *)  
                       | SOME (DG.FARNODE (NONE, n')) => ()  
                         (* no filter before -> no change *)  
                       | SOME (DG.FARNODE (SOME f', n')) => let  
106                          (* there is a filter ...                          (* there is a filter ...
107                           *   calculate "union-filter", see if there is                           *  calculate "union", see if there is a change,
108                           *   a change, and if so, replace the filter *)                           *  and if so, replace the filter *)
109                              fun replace filt =                              fun replace filt =
110                                  gi :=                              gi := (filt, n) :: List.filter (not o sameN) (!gi)
                                    (DG.FARNODE (filt, n)) ::  
                                    (List.filter (not o sameFarNode) (!gi))  
111                          in                          in
112                              case f of                              case f of
113                                  NONE => replace NONE                                  NONE => replace NONE
# Line 137  Line 115 
115                                      if SS.equal (f, f') then ()                                      if SS.equal (f, f') then ()
116                                      else replace (SOME (SS.union (f, f')))                                      else replace (SOME (SS.union (f, f')))
117                          end                          end
   
                       | SOME (DG.PNODE _) => () (* cannot happen *)  
118                  end                  end
119    
120              val f = SmlInfo.sourcepath i              val f = SmlInfo.sourcepath i
# Line 260  Line 236 
236              end              end
237    
238              val e = eval (SmlInfo.skeleton i)              val e = eval (SmlInfo.skeleton i)
239              val n = DG.NODE { smlinfo = i,              val n = DG.SNODE { smlinfo = i,
240                                localimports = !li,                                localimports = !li,
241                                globalimports = !gi }                                globalimports = !gi }
242          in          in

Legend:
Removed from v.281  
changed lines
  Added in v.282

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