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

Diff of /sml/trunk/src/cm/parse/parse.sml

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

revision 507, Fri Dec 10 09:18:23 1999 UTC revision 514, Thu Dec 16 08:32:57 1999 UTC
# Line 37  Line 37 
37      val sgc = ref (SrcPathMap.empty: CMSemant.group SrcPathMap.map)      val sgc = ref (SrcPathMap.empty: CMSemant.group SrcPathMap.map)
38      fun reset () = sgc := SrcPathMap.empty      fun reset () = sgc := SrcPathMap.empty
39    
40        fun registerNewStable (p, g) =
41            (sgc := SrcPathMap.insert (!sgc, p, g);
42             SrcPathSet.app (SmlInfo.cleanGroup true) (Reachable.groupsOf g))
43        fun cachedStable p = SrcPathMap.find (!sgc, p)
44    
45      fun listLibs () = map #1 (SrcPathMap.listItemsi (!sgc))      fun listLibs () = map #1 (SrcPathMap.listItemsi (!sgc))
46    
47      fun dropPickles () = let      fun dropPickles () = let
# Line 136  Line 141 
141                      case go of                      case go of
142                          NONE => NONE                          NONE => NONE
143                        | SOME g =>                        | SOME g =>
144                              (sgc := SrcPathMap.insert (!sgc, gpath, g);                              (registerNewStable (gpath, g);
145                               Say.vsay ["[library ", SrcPath.descr gpath,                               Say.vsay ["[library ", SrcPath.descr gpath,
146                                         " is stable]\n"];                                         " is stable]\n"];
                              SrcPathSet.app SmlInfo.cleanGroup  
                                             (Reachable.groupsOf g);  
147                               SOME g)                               SOME g)
148                  end                  end
149              in              in
150                  case findCycle (stablestack, []) of                  case findCycle (stablestack, []) of
151                      NONE => (case SrcPathMap.find (!sgc, gpath) of                      NONE => (case cachedStable gpath of
152                                   SOME g => SOME g                                   SOME g => SOME g
153                                 | NONE => load ())                                 | NONE => load ())
154                    | SOME cyc => (report cyc; NONE)                    | SOME cyc => (report cyc; NONE)
# Line 161  Line 164 
164                                   parse' (group, groupstack, pErrFlag,                                   parse' (group, groupstack, pErrFlag,
165                                           stabthis, curlib)                                           stabthis, curlib)
166                           in                           in
167                               gc := SrcPathMap.insert (!gc, group, pres);                               case cachedStable group of
168                                     NONE =>
169                                         gc := SrcPathMap.insert (!gc, group, pres)
170                                   | SOME _ => ();
171                               pres                               pres
172                           end)                           end)
173          end          end
# Line 172  Line 178 
178               * encompass the contents of its sub-groups               * encompass the contents of its sub-groups
179               * (but not sub-libraries!). *)               * (but not sub-libraries!). *)
180              fun stabilize (g as GG.GROUP { kind = GG.NOLIB, ... }) = SOME g              fun stabilize (g as GG.GROUP { kind = GG.NOLIB, ... }) = SOME g
181                | stabilize g =                | stabilize g = let
182                  Stabilize.stabilize ginfo { group = g, anyerrors = pErrFlag }                      val go = Stabilize.stabilize ginfo { group = g,
183                                                             anyerrors = pErrFlag }
184                    in
185                        case go of
186                            NONE => NONE
187                          | SOME g => (registerNewStable (group, g);
188                                       (gc := #1 (SrcPathMap.remove (!gc, group))
189                                        handle LibBase.NotFound => ());
190                                       SOME g)
191                    end
192    
193              (* normal processing -- used when there is no cycle to report *)              (* normal processing -- used when there is no cycle to report *)
194              fun normal_processing () = let              fun normal_processing () = let
# Line 331  Line 346 
346                  case pro of                  case pro of
347                      NONE => NONE                      NONE => NONE
348                    | SOME pr =>                    | SOME pr =>
                         (SmlInfo.cleanGroup group;  
349                           if stabthis then stabilize pr                           if stabthis then stabilize pr
350                           else SOME pr)                          else (SmlInfo.cleanGroup false group; SOME pr)
351              end              end
352              handle LrParser.ParseError => NONE              handle LrParser.ParseError => NONE
353          in          in

Legend:
Removed from v.507  
changed lines
  Added in v.514

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