aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2014-07-16 04:06:11 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2014-07-16 04:06:11 -0400
commit63acfc44762cbbf3d8d957127a3c5eed3a399940 (patch)
tree53f458dfb11d651e541d450d90383b9aa693c7b0
parent0e31dda702cffe9c52a45b0443da549bc8ad00e6 (diff)
Default 'jsFunc' for less-safe FFI
-rw-r--r--doc/manual.tex2
-rw-r--r--src/corify.sml5
-rw-r--r--tests/lessSafeFfi.ur4
3 files changed, 10 insertions, 1 deletions
diff --git a/doc/manual.tex b/doc/manual.tex
index 97e5d2c0..65f6f95d 100644
--- a/doc/manual.tex
+++ b/doc/manual.tex
@@ -2552,6 +2552,8 @@ Now \texttt{foo} is available as a normal function. If called in server-side co
\item \texttt{jsFunc "putJsFuncNameHere"}
\end{itemize}
+When no \texttt{jsFunc} directive is present, the function is assumed to map to a JavaScript function of the same name, if used in a client-side context.
+
\section{Compiler Phases}
diff --git a/src/corify.sml b/src/corify.sml
index 162ae1ab..5d58efcc 100644
--- a/src/corify.sml
+++ b/src/corify.sml
@@ -1221,6 +1221,11 @@ fun corifyDecl mods (all as (d, loc : EM.span), st) =
| Source.ServerOnly => Settings.addServerOnly name
| Source.JsFunc s => Settings.addJsFunc (name, s)) modes;
+ if List.exists (fn Source.JsFunc _ => true | _ => false) modes then
+ ()
+ else
+ Settings.addJsFunc (name, #2 name);
+
if isTrans andalso not (Settings.isBenignEffectful name) then
Settings.addEffectful name
else
diff --git a/tests/lessSafeFfi.ur b/tests/lessSafeFfi.ur
index ec96db0a..6bf26ba9 100644
--- a/tests/lessSafeFfi.ur
+++ b/tests/lessSafeFfi.ur
@@ -4,13 +4,15 @@ ffi baz : transaction int
ffi adder : int -> int -> int
ffi bup jsFunc "alert" : string -> transaction unit
+ffi alert : string -> transaction unit
fun other () : transaction page =
(*bar 17;
q <- baz;*)
return <xml><body>
(*{[foo 42]}, {[q]}*)
- <button onclick={fn _ => bup "asdf"}/>
+ <button value="bup" onclick={fn _ => bup "asdf"}/>
+ <button value="alert" onclick={fn _ => alert "qqqz"}/>
</body></xml>
fun main () = return <xml><body>