From 63acfc44762cbbf3d8d957127a3c5eed3a399940 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Wed, 16 Jul 2014 04:06:11 -0400 Subject: Default 'jsFunc' for less-safe FFI --- doc/manual.tex | 2 ++ src/corify.sml | 5 +++++ tests/lessSafeFfi.ur | 4 +++- 3 files changed, 10 insertions(+), 1 deletion(-) 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 (*{[foo 42]}, {[q]}*) -