More loading of lib.dtl
authorAdam Chlipala <adamc@hcoop.net>
Thu, 10 Jul 2008 23:38:53 +0000 (23:38 +0000)
committerAdam Chlipala <adamc@hcoop.net>
Thu, 10 Jul 2008 23:38:53 +0000 (23:38 +0000)
src/main-client.sml
src/main.sig
src/main.sml

index ef083b4..1c6333d 100644 (file)
@@ -31,12 +31,33 @@ fun domtoolRoot () =
                             file = ".domtool"}
     end
 
                             file = ".domtool"}
     end
 
+fun libnameOpt () =
+    let
+       val libname = OS.Path.joinDirFile {dir = domtoolRoot (),
+                                          file = "lib.dtl"}
+    in
+       if Posix.FileSys.access (libname, []) then
+           SOME libname
+       else
+           NONE
+    end
+
 val (doit, doitDir, args) =
     case CommandLine.arguments () of
 val (doit, doitDir, args) =
     case CommandLine.arguments () of
-       "-tc" :: args => (fn fname => (Main.setupUser (); ignore (Main.check (Main.basis ()) fname)),
+       "-tc" :: args => (fn fname =>
+                            let
+                                val _ : string = Main.setupUser ()
+                                val env = Main.basis ()
+                                val env =
+                                    case libnameOpt () of
+                                        NONE => env
+                                      | SOME libname => #1 (Main.check env libname)
+                            in
+                                ignore (Main.check env fname)
+                            end,
                          Main.checkDir,
                          args)
                          Main.checkDir,
                          args)
-      | args => (Main.request,
+      | args => (fn fname => Main.request (fname, libnameOpt ()),
                 Main.requestDir,
                 args)
 
                 Main.requestDir,
                 args)
 
index 231fafc..ee637e4 100644 (file)
@@ -32,7 +32,7 @@ signature MAIN = sig
     val reduce : Env.env -> string -> Env.env * Ast.exp option
     val eval : Env.env -> Env.env_vars -> string -> Env.env * Env.env_vars
 
     val reduce : Env.env -> string -> Env.env * Ast.exp option
     val eval : Env.env -> Env.env_vars -> string -> Env.env * Env.env_vars
 
-    val request : string -> unit
+    val request : string * string option -> unit
     val requestDir : string -> unit
 
     val requestPing : unit -> OS.Process.status
     val requestDir : string -> unit
 
     val requestPing : unit -> OS.Process.status
index 62af91b..4836ed8 100644 (file)
@@ -251,21 +251,37 @@ fun requestSlaveBio' printErr =
 
 fun requestSlaveBio () = requestSlaveBio' true
 
 
 fun requestSlaveBio () = requestSlaveBio' true
 
-fun request fname =
+fun request (fname, libOpt) =
     let
     let
-       val (user, bio) = requestBio (fn () => ignore (check (basis ()) fname))
-
-       val inf = TextIO.openIn fname
+       val (user, bio) = requestBio (fn () =>
+                                        let
+                                            val env = basis ()
+                                            val env = case libOpt of
+                                                          NONE => env
+                                                        | SOME lib => #1 (check env lib)
+                                        in
+                                            ignore (check env fname)
+                                        end)
+
+       fun readFile fname =
+           let
+               val inf = TextIO.openIn fname
 
 
-       fun loop lines =
-           case TextIO.inputLine inf of
-               NONE => String.concat (List.rev lines)
-             | SOME line => loop (line :: lines)
+               fun loop lines =
+                   case TextIO.inputLine inf of
+                       NONE => String.concat (rev lines)
+                     | SOME line => loop (line :: lines)
+           in
+               loop []
+               before TextIO.closeIn inf
+           end
 
 
-       val code = loop []
+       val code = readFile fname
+       val msg = case libOpt of
+                     NONE => MsgConfig code
+                   | SOME fname' => MsgMultiConfig [readFile fname', code]
     in
     in
-       TextIO.closeIn inf;
-       Msg.send (bio, MsgConfig code);
+       Msg.send (bio, msg);
        case Msg.recv bio of
            NONE => print "Server closed connection unexpectedly.\n"
          | SOME m =>
        case Msg.recv bio of
            NONE => print "Server closed connection unexpectedly.\n"
          | SOME m =>