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

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

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

revision 459, Fri Oct 29 06:22:25 1999 UTC revision 494, Tue Nov 30 09:07:21 1999 UTC
# Line 81  Line 81 
81                  NONE => BF.exec (bfc, de)                  NONE => BF.exec (bfc, de)
82                | SOME de' => de'                | SOME de' => de'
83    
         fun memoize thunk = let  
             val r = ref (fn _ => raise Fail "Link:memoize")  
             fun firsttime gp = let  
                 val v = thunk gp  
             in  
                 r := (fn _ => v);  
                 v  
             end  
         in  
             r := firsttime;  
             fn gp => !r gp  
         end  
   
84          type smemo = E.dynenv * SmlInfo.info list          type smemo = E.dynenv * SmlInfo.info list
85    
86          val smlmap = ref (SmlInfoMap.empty: smemo SmlInfoMap.map)          val smlmap = ref (SmlInfoMap.empty: smemo SmlInfoMap.map)
# Line 221  Line 208 
208                                  case (BinInfo.sh_mode i, le) of                                  case (BinInfo.sh_mode i, le) of
209                                      (Sharing.SHARE _, (e, [])) => let                                      (Sharing.SHARE _, (e, [])) => let
210                                          fun thunk gp = link_stable (i, e gp)                                          fun thunk gp = link_stable (i, e gp)
211                                          val m_thunk = memoize thunk                                          val m_thunk = Memoize.memoize thunk
212                                      in                                      in
213                                          (fn gp => fn _ => m_thunk gp, NONE)                                          (fn gp => fn _ => m_thunk gp, NONE)
214                                      end                                      end
# Line 300  Line 287 
287                          in                          in
288                              f gp (foldl add emptyDyn fl)                              f gp (foldl add emptyDyn fl)
289                          end                          end
290                          val m_th = memoize th                          val m_th = Memoize.memoize th
291                      in                      in
292                          l_stablemap :=                          l_stablemap :=
293                            StableMap.insert (!l_stablemap, i, m_th);                            StableMap.insert (!l_stablemap, i, m_th);
# Line 333  Line 320 
320                                             (map fsbn globalimports)                                             (map fsbn globalimports)
321                          val (getE, snl) = foldl add gi (map sn localimports)                          val (getE, snl) = foldl add gi (map sn localimports)
322                          fun thunk gp = link_sml (gp, i, getBFC, getE, snl)                          fun thunk gp = link_sml (gp, i, getBFC, getE, snl)
323                          val m_thunk = memoize thunk                          val m_thunk = Memoize.memoize thunk
324                      in                      in
325                          l_smlmap := SmlInfoMap.insert (!l_smlmap, i, m_thunk);                          l_smlmap := SmlInfoMap.insert (!l_smlmap, i, m_thunk);
326                          (m_thunk, [i])                          (m_thunk, [i])

Legend:
Removed from v.459  
changed lines
  Added in v.494

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