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

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

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

revision 400, Thu Aug 26 16:23:37 1999 UTC revision 402, Fri Aug 27 07:50:43 1999 UTC
# Line 1  Line 1 
1    (*
2     * Compilation traversals.
3     *
4     * (C) 1999 Lucent Technologies, Bell Laboratories
5     *
6     * Author: Matthias Blume (blume@kurims.kyoto-u.ac.jp)
7     *)
8  local  local
9      structure GP = GeneralParams      structure GP = GeneralParams
10      structure DG = DependencyGraph      structure DG = DependencyGraph
# Line 15  Line 22 
22      type ed = { ii: IInfo.info, ctxt: statenv }      type ed = { ii: IInfo.info, ctxt: statenv }
23  in  in
24      signature COMPILE = sig      signature COMPILE = sig
25    
26          type bfc          type bfc
27    
28          (* reset internal persistent state *)          (* reset internal persistent state *)
# Line 29  Line 37 
37          val getBFC : SmlInfo.info -> bfc          val getBFC : SmlInfo.info -> bfc
38    
39          val evict : SmlInfo.info -> unit          val evict : SmlInfo.info -> unit
40            val evictAll : unit -> unit
41    
42          val newSbnodeTraversal : unit -> GP.info -> DG.sbnode -> ed option          val newSbnodeTraversal : unit -> GP.info -> DG.sbnode -> ed option
43    
# Line 66  Line 75 
75          val filtermap = ref (FilterMap.empty: pid FilterMap.map)          val filtermap = ref (FilterMap.empty: pid FilterMap.map)
76    
77          (* more persistent state! *)          (* more persistent state! *)
78          val globalmap = ref (SmlInfoMap.empty: memo SmlInfoMap.map)          val globalstate = ref (SmlInfoMap.empty: memo SmlInfoMap.map)
79    
80          fun reset () =          fun reset () =
81              (filtermap := FilterMap.empty;              (filtermap := FilterMap.empty;
82               globalmap := SmlInfoMap.empty)               globalstate := SmlInfoMap.empty)
83    
84          fun isValidMemo (memo: memo, provided, smlinfo) =          fun isValidMemo (memo: memo, provided, smlinfo) =
85              not (TStamp.needsUpdate { source = SmlInfo.lastseen smlinfo,              not (TStamp.needsUpdate { source = SmlInfo.lastseen smlinfo,
# Line 166  Line 175 
175          end          end
176    
177          fun mkTraversal notify = let          fun mkTraversal notify = let
178              val localmap = ref SmlInfoMap.empty              val localstate = ref SmlInfoMap.empty
179    
180              fun pervenv (gp: GP.info) = let              fun pervenv (gp: GP.info) = let
181                  val e = #pervasive (#param gp)                  val e = #pervasive (#param gp)
# Line 256  Line 265 
265                          in                          in
266                              SmlInfo.forgetParsetree i;                              SmlInfo.forgetParsetree i;
267                              save bfc;                              save bfc;
268                              globalmap :=                              SOME memo
                               SmlInfoMap.insert (!globalmap, i, memo);  
                             SOME (memo2ed memo)  
269                          end                          end
270                  end (* compile *)                  end (* compile *)
271                  fun notlocal () = let                  fun notlocal () = let
272                      (* Ok, it is not in the local map, so we first have                      (* Ok, it is not in the local state, so we first have
273                       * to traverse all children before we can proceed... *)                       * to traverse all children before we can proceed... *)
274                      val k = #keep_going (#param gp)                      val k = #keep_going (#param gp)
275                      fun loc li_n = Option.map nofilter (snode gp li_n)                      fun loc li_n = Option.map nofilter (snode gp li_n)
# Line 288  Line 295 
295                                                     name = binname,                                                     name = binname,
296                                                     senv = stat },                                                     senv = stat },
297                                           ts)                                           ts)
298                                            before
299                                            Say.vsay ["[", binname, " loaded]\n"]
300                                  in                                  in
301                                      SOME (SafeIO.perform                                      SOME (SafeIO.perform
302                                            { openIt = openIt,                                            { openIt = openIt,
# Line 305  Line 314 
314                                                       ts = ts }                                                       ts = ts }
315                                      in                                      in
316                                          if isValidMemo (memo, pids, i) then                                          if isValidMemo (memo, pids, i) then
317                                              (globalmap :=                                              SOME memo
                                              SmlInfoMap.insert  
                                              (!globalmap, i, memo);  
                                              SOME (memo2ed memo))  
318                                          else compile (stat, sym, pids)                                          else compile (stat, sym, pids)
319                                      end                                      end
320                              end (* fromfile *)                              end (* fromfile *)
321                                fun notglobal () =
322                                    case fromfile () of
323                                        NONE => NONE
324                                      | SOME memo =>
325                                            (globalstate :=
326                                             SmlInfoMap.insert (!globalstate, i,
327                                                                memo);
328                                             SOME memo)
329                          in                          in
330                              case SmlInfoMap.find (!globalmap, i) of                              case SmlInfoMap.find (!globalstate, i) of
331                                  NONE => fromfile ()                                  NONE => notglobal ()
332                                | SOME memo =>                                | SOME memo =>
333                                      if isValidMemo (memo, pids, i) then                                      if isValidMemo (memo, pids, i) then
334                                          SOME (memo2ed memo)                                          SOME memo
335                                      else fromfile ()                                      else notglobal ()
336                          end                          end
337                  end (* notlocal *)                  end (* notlocal *)
338              in              in
339                  case SmlInfoMap.find (!localmap, i) of                  case SmlInfoMap.find (!localstate, i) of
340                      SOME edopt => edopt                      SOME mopt => Option.map memo2ed mopt
341                    | NONE => let                    | NONE => let
342                          val edopt = notlocal ()                          val mopt = notlocal ()
343                      in                      in
344                          localmap := SmlInfoMap.insert (!localmap, i, edopt);                          localstate :=
345                          edopt                            SmlInfoMap.insert (!localstate, i, mopt);
346                            Option.map memo2ed mopt
347                      end                      end
348              end (* snode *)              end (* snode *)
349    
# Line 370  Line 385 
385          end          end
386    
387          local          local
388              fun get i = valOf (SmlInfoMap.find (!globalmap, i))              fun get i = valOf (SmlInfoMap.find (!globalstate, i))
389          in          in
390              fun sizeBFC i = BF.size { content = #bfc (get i), nopickle = true }              fun sizeBFC i = BF.size { content = #bfc (get i), nopickle = true }
391              fun writeBFC s i = BF.write { content = #bfc (get i),              fun writeBFC s i = BF.write { content = #bfc (get i),
# Line 379  Line 394 
394              fun getBFC i = #bfc (get i)              fun getBFC i = #bfc (get i)
395    
396              fun evict i =              fun evict i =
397                  (globalmap := #1 (SmlInfoMap.remove (!globalmap, i)))                  (globalstate := #1 (SmlInfoMap.remove (!globalstate, i)))
398                  handle LibBase.NotFound => ()                  handle LibBase.NotFound => ()
399    
400                fun evictAll () = globalstate := SmlInfoMap.empty
401          end          end
402      end      end
403  end  end

Legend:
Removed from v.400  
changed lines
  Added in v.402

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