From: Adam Chlipala Date: Thu, 10 Jul 2008 23:38:53 +0000 (+0000) Subject: More loading of lib.dtl X-Git-Tag: release_2010-11-19~28 X-Git-Url: https://git.hcoop.net/hcoop/domtool2.git/commitdiff_plain/9a34b0017d95d8ff3563a0afa583c92e6356ad6f More loading of lib.dtl --- diff --git a/src/main-client.sml b/src/main-client.sml index ef083b4..1c6333d 100644 --- a/src/main-client.sml +++ b/src/main-client.sml @@ -31,12 +31,33 @@ fun domtoolRoot () = 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 - "-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) - | args => (Main.request, + | args => (fn fname => Main.request (fname, libnameOpt ()), Main.requestDir, args) diff --git a/src/main.sig b/src/main.sig index 231fafc..ee637e4 100644 --- a/src/main.sig +++ b/src/main.sig @@ -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 request : string -> unit + val request : string * string option -> unit val requestDir : string -> unit val requestPing : unit -> OS.Process.status diff --git a/src/main.sml b/src/main.sml index 62af91b..4836ed8 100644 --- a/src/main.sml +++ b/src/main.sml @@ -251,21 +251,37 @@ fun requestSlaveBio' printErr = fun requestSlaveBio () = requestSlaveBio' true -fun request fname = +fun request (fname, libOpt) = 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 - 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 =>