aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/cjr_print.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2011-12-17 09:24:31 -0500
committerGravatar Adam Chlipala <adam@chlipala.net>2011-12-17 09:24:31 -0500
commit7577d3e972e5050af4752571a584a5f107505ec8 (patch)
treef0b8b1986ad71fef87dfc749df92229fb8c70553 /src/cjr_print.sml
parent4f67fe6cd314ad3ca1286766f1f9f3d8c5084d48 (diff)
Fix C-side unurlification of unboxable Option datatypes
Diffstat (limited to 'src/cjr_print.sml')
-rw-r--r--src/cjr_print.sml16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index a5015041..8bb2f64d 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -676,13 +676,19 @@ fun unurlify fromClient env (t, loc) =
| [(has_arg, _, SOME t), (no_arg, _, NONE)] =>
(no_arg, has_arg, t)
| _ => raise Fail "CjrPrint: unfooify misclassified Option datatype"
+
+ val unboxable = isUnboxable t
in
unurlifies := IS.add (!unurlifies, i);
addUrlHandler (box [string "static",
space,
p_typ env t,
space,
- string "*unurlify_",
+ if unboxable then
+ box []
+ else
+ string "*",
+ string "unurlify_",
string (Int.toString i),
string "(uw_context, char **);",
newline],
@@ -690,7 +696,11 @@ fun unurlify fromClient env (t, loc) =
space,
p_typ env t,
space,
- string "*unurlify_",
+ if unboxable then
+ box []
+ else
+ string "*",
+ string "unurlify_",
string (Int.toString i),
string "(uw_context ctx, char **request) {",
newline,
@@ -725,7 +735,7 @@ fun unurlify fromClient env (t, loc) =
string ", ((*request)[0] == '/' ? ++*request : NULL), ",
newline,
- if isUnboxable t then
+ if unboxable then
unurlify' "(*request)" (#1 t)
else
box [string "({",