aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2018-05-19 16:06:11 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2018-05-19 16:06:11 -0400
commit30edae2956d346e7df7ca27fcc77432e45cea99e (patch)
tree87a6be348abf6e6cffc5ded23c4dbea4df1aab61
parente1ae0ce918c234cbb0b5a6ee72e0443bd04d4127 (diff)
More defensive unurlification of enumerations (closes #117)
-rw-r--r--src/cjr_print.sml5
-rw-r--r--tests/unurlify2.ur16
2 files changed, 20 insertions, 1 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index 1fdb45d9..43265fb8 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -659,7 +659,10 @@ fun unurlify fromClient env (t, loc) =
doEm rest,
string ")"]
in
- doEm xncs
+ box [string "(request[0] == '/' ? ++request : request,",
+ newline,
+ doEm xncs,
+ string ")"]
end
| TDatatype (Option, i, xncs) =>
diff --git a/tests/unurlify2.ur b/tests/unurlify2.ur
new file mode 100644
index 00000000..2e82928d
--- /dev/null
+++ b/tests/unurlify2.ur
@@ -0,0 +1,16 @@
+datatype bugged = Nothing | Something of int
+datatype myDt = One | Two
+type myRecord = {Bugged: bugged
+ , MyDt : myDt}
+
+fun rpcTarget (t: myRecord) = return ()
+
+val good = {Bugged = Something 4, MyDt = One}
+val bad = {Bugged = Nothing, MyDt = One}
+
+fun main () : transaction page = return <xml>
+ <body>
+ <button onclick={fn _ => rpc (rpcTarget good)}>rpc with good</button>
+ <button onclick={fn _ => rpc (rpcTarget bad)}>rpc with bad</button>
+ </body>
+</xml>