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 292, Mon May 24 22:03:46 1999 UTC revision 293, Tue May 25 03:04:50 1999 UTC
# Line 185  Line 185 
185    
186              (* "eval" -- compute the export environment of a skeleton *)              (* "eval" -- compute the export environment of a skeleton *)
187              fun eval sk = let              fun eval sk = let
                 fun layer' f [] = DE.EMPTY  
                   | layer' f [x] = f x  
                   | layer' f (h :: t) =  
                     foldl (fn (x, r) => DE.LAYER (f x, r)) (f h) t  
   
188                  fun evalDecl e (SK.Bind (name, def)) =                  fun evalDecl e (SK.Bind (name, def)) =
189                      DE.BINDING (name, evalModExp e def)                      DE.BINDING (name, evalModExp e def)
190                    | evalDecl e (SK.Local (d1, d2)) =                    | evalDecl e (SK.Local (d1, d2)) =
191                      evalDecl (DE.LAYER (evalDecl e d1, e)) d2                      evalDecl (DE.LAYER (evalDecl e d1, e)) d2
192                    | evalDecl e (SK.Seq l) =                    | evalDecl e (SK.Seq l) = evalSeqDecl e l
193                      foldl (fn (d, e') =>                    | evalDecl e (SK.Par []) = DE.EMPTY
194                             DE.LAYER (evalDecl (DE.LAYER (e', e)) d, e'))                    | evalDecl e (SK.Par (h :: t)) =
195                            DE.EMPTY l                      foldl (fn (x, r) => DE.LAYER (evalDecl e x, r))
196                    | evalDecl e (SK.Par l) = layer' (evalDecl e) l                            (evalDecl e h) t
197                    | evalDecl e (SK.Open s) = evalModExp e s                    | evalDecl e (SK.Open s) = evalModExp e s
198                    | evalDecl e (SK.Ref s) =                    | evalDecl e (SK.Ref s) =
199                      (SS.app (ignore o lookup e) s; DE.EMPTY)                      (SS.app (ignore o lookup e) s; DE.EMPTY)
200    
201                    and evalSeqDecl e [] = DE.EMPTY
202                      | evalSeqDecl e (h :: t) =
203                        foldl (fn (d, e') =>
204                               DE.LAYER (evalDecl (DE.LAYER (e', e)) d, e'))
205                              (evalDecl e h)
206                              t
207    
208                  and evalModExp e (SK.Var sp) = lookSymPath e sp                  and evalModExp e (SK.Var sp) = lookSymPath e sp
209                    | evalModExp e (SK.Decl d) = evalDecl e d                    | evalModExp e (SK.Decl l) = evalSeqDecl e l
210                    | evalModExp e (SK.Let (d, m)) =                    | evalModExp e (SK.Let (d, m)) =
211                      evalModExp (DE.LAYER (evalDecl e d, e)) m                      evalModExp (DE.LAYER (evalSeqDecl e d, e)) m
212                    | evalModExp e (SK.Ign1 (m1, m2)) =                    | evalModExp e (SK.Ign1 (m1, m2)) =
213                      (ignore (evalModExp e m1); evalModExp e m2)                      (ignore (evalModExp e m1); evalModExp e m2)
214              in              in

Legend:
Removed from v.292  
changed lines
  Added in v.293

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