summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-05-02 12:10:43 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-05-02 12:10:43 -0400
commitf996ddede8ad8df6a6b475185b5384366f0dd6c9 (patch)
treeb2b7e5a618878c8ac7026aa98312d6f9697bc9f6 /src
parent4b3399b59d17ed32c8c2800267b8c59fd0378f21 (diff)
More FFI compiler options
Diffstat (limited to 'src')
-rw-r--r--src/cjr_print.sml2
-rw-r--r--src/compiler.sig1
-rw-r--r--src/compiler.sml8
-rw-r--r--src/demo.sml1
-rw-r--r--src/settings.sig4
-rw-r--r--src/settings.sml4
6 files changed, 19 insertions, 1 deletions
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"}
^ "\\\"></script>\\n"),
+ p_list (fn x => string ("<script src=\\\"" ^ x ^ "\\\"></script>"))
+ (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