From 065cd9359366197fd8ea66cc584f4e857dfa6ab6 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sat, 2 May 2009 12:10:43 -0400 Subject: More FFI compiler options --- src/cjr_print.sml | 2 ++ src/compiler.sig | 1 + src/compiler.sml | 8 +++++++- src/demo.sml | 1 + src/settings.sig | 4 ++++ src/settings.sml | 4 ++++ 6 files changed, 19 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/cjr_print.sml b/src/cjr_print.sml index b40d4248..3a124ff4 100644 --- a/src/cjr_print.sml +++ b/src/cjr_print.sml @@ -2839,6 +2839,8 @@ fun p_file env (ds, ps) = ^ OS.Path.joinDirFile {dir = Settings.getUrlPrefix (), file = "app.js"} ^ "\\\">\\n"), + p_list (fn x => string ("")) + (Settings.getScripts ()), string "\");", newline, string "uw_set_needs_push(ctx, ", diff --git a/src/compiler.sig b/src/compiler.sig index d49d34b0..fd3c86cf 100644 --- a/src/compiler.sig +++ b/src/compiler.sig @@ -41,6 +41,7 @@ signature COMPILER = sig ffi : string list, link : string list, headers : string list, + scripts : string list, clientToServer : Settings.ffi list, effectful : Settings.ffi list, clientOnly : Settings.ffi list, diff --git a/src/compiler.sml b/src/compiler.sml index cdde57ad..1a7868e3 100644 --- a/src/compiler.sml +++ b/src/compiler.sml @@ -45,6 +45,7 @@ type job = { ffi : string list, link : string list, headers : string list, + scripts : string list, clientToServer : Settings.ffi list, effectful : Settings.ffi list, clientOnly : Settings.ffi list, @@ -208,7 +209,7 @@ val parseUr = { print = SourcePrint.p_file} fun p_job {prefix, database, exe, sql, sources, debug, profile, - timeout, ffi, link, headers, + timeout, ffi, link, headers, scripts, clientToServer, effectful, clientOnly, serverOnly, jsFuncs} = let open Print.PD @@ -241,6 +242,7 @@ fun p_job {prefix, database, exe, sql, sources, debug, profile, newline, p_list_sep (box []) (fn s => box [string "Ffi", space, string s, newline]) ffi, p_list_sep (box []) (fn s => box [string "Header", space, string s, newline]) headers, + p_list_sep (box []) (fn s => box [string "Script", space, string s, newline]) scripts, p_list_sep (box []) (fn s => box [string "Link", space, string s, newline]) link, p_ffi "ClientToServer" clientToServer, p_ffi "Effectful" effectful, @@ -305,6 +307,7 @@ val parseUrp = { val ffi = ref [] val link = ref [] val headers = ref [] + val scripts = ref [] val clientToServer = ref [] val effectful = ref [] val clientOnly = ref [] @@ -323,6 +326,7 @@ val parseUrp = { ffi = rev (!ffi), link = rev (!link), headers = rev (!headers), + scripts = rev (!scripts), clientToServer = rev (!clientToServer), effectful = rev (!effectful), clientOnly = rev (!clientOnly), @@ -387,6 +391,7 @@ val parseUrp = { | "ffi" => ffi := relify arg :: !ffi | "link" => link := relifyA arg :: !link | "include" => headers := relifyA arg :: !headers + | "script" => scripts := arg :: !scripts | "clientToServer" => clientToServer := ffiS () :: !clientToServer | "effectful" => effectful := ffiS () :: !effectful | "clientOnly" => clientOnly := ffiS () :: !clientOnly @@ -402,6 +407,7 @@ val parseUrp = { Settings.setUrlPrefix (#prefix job); Settings.setTimeout (#timeout job); Settings.setHeaders (#headers job); + Settings.setScripts (#scripts job); Settings.setClientToServer (#clientToServer job); Settings.setEffectful (#effectful job); Settings.setClientOnly (#clientOnly job); diff --git a/src/demo.sml b/src/demo.sml index 9fa08021..0b7f3345 100644 --- a/src/demo.sml +++ b/src/demo.sml @@ -98,6 +98,7 @@ fun make {prefix, dirname, guided} = ffi = [], link = [], headers = [], + scripts = [], clientToServer = [], effectful = [], clientOnly = [], diff --git a/src/settings.sig b/src/settings.sig index 4e764a78..514fb0ee 100644 --- a/src/settings.sig +++ b/src/settings.sig @@ -39,6 +39,10 @@ signature SETTINGS = sig val setHeaders : string list -> unit val getHeaders : unit -> string list + (* Which extra JavaScript URLs should be included? *) + val setScripts : string list -> unit + val getScripts : unit -> string list + type ffi = string * string (* Which FFI types may be sent from clients to servers? *) diff --git a/src/settings.sml b/src/settings.sml index b022219d..9e619b54 100644 --- a/src/settings.sml +++ b/src/settings.sml @@ -30,6 +30,7 @@ structure Settings :> SETTINGS = struct val urlPrefix = ref "/" val timeout = ref 0 val headers = ref ([] : string list) +val scripts = ref ([] : string list) fun getUrlPrefix () = !urlPrefix fun setUrlPrefix p = @@ -46,6 +47,9 @@ fun setTimeout n = timeout := n fun getHeaders () = !headers fun setHeaders ls = headers := ls +fun getScripts () = !scripts +fun setScripts ls = scripts := ls + type ffi = string * string structure K = struct -- cgit v1.2.3