Correct path bug in domtool-publish apache
[hcoop/domtool2.git] / src / order.sml
index 47ee1bc..0d0d363 100644 (file)
@@ -70,7 +70,7 @@ fun unionCTE (((c1, t1), v1), ((c2, t2), v2)) =
     
 val dt = (TError, ErrorMsg.dummyLoc)
 
-fun expNeeded G (e, _) =
+fun expNeeded G (e, loc) =
     case e of
        EInt _ => ((SS.empty,
                    if Env.lookupType G "int" then
@@ -96,6 +96,13 @@ fun expNeeded G (e, _) =
              | SOME t => unionCTE ((typNeeded G t, SS.empty),
                                    expNeeded G' e)
        end
+      | EALam (x, p, e) =>
+       let
+           val G' = Env.bindVal G (x, (TAction (p, StringMap.empty, StringMap.empty), loc), NONE)
+       in
+           unionCTE (((predNeeded G p, SS.empty), SS.empty),
+                     expNeeded G' e)
+       end
       | EVar x =>
        (case Env.lookupVal G x of
             NONE => ((SS.empty, SS.empty), SS.singleton x)
@@ -169,19 +176,6 @@ fun mergeProvide kind fname (m1, m2) =
 
 fun order fnames =
     let
-       fun doFile fname =
-           let
-               val file = Parse.parse fname
-               val (provide, require) = fileSig file
-           in
-               print "\nFile ";
-               print fname;
-               print "\nPROVIDE:\n";
-               printSig provide;
-               print "\nREQUIRE:\n";
-               printSig require
-           end
-
        fun doFile (fname, (provideC, provideT, provideV, require)) =
            let
                val file = Parse.parse fname
@@ -271,7 +265,18 @@ fun order fnames =
                     SS.app (fn fname' => (print " "; print fname')) requires;
                     print "\n")) require;*)
 
-       loop (ready, waiting, [])
+       ({provideC = provideC,
+         provideT = provideT,
+         provideV = provideV},
+        loop (ready, waiting, []))
     end
 
+type providers = {provideC : string SM.map,
+                 provideT : string SM.map,
+                 provideV : string SM.map}
+
+fun providesContext (p : providers, s) = SM.find (#provideC p, s)
+fun providesType (p : providers, s) = SM.find (#provideT p, s)
+fun providesValue (p : providers, s) = SM.find (#provideV p, s)
+
 end