summaryrefslogtreecommitdiff
path: root/src/cjr_print.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2010-01-03 12:47:27 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2010-01-03 12:47:27 -0500
commit9890b6de2e6877c67650f64410127ee2dfe8581e (patch)
tree784c36f589cbacce89a4ab23334fda77871e7961 /src/cjr_print.sml
parentd777d7da78fccb8f15eccff680deca36ae57314b (diff)
Proper C-side deserialization; Shake.sliceDb
Diffstat (limited to 'src/cjr_print.sml')
-rw-r--r--src/cjr_print.sml36
1 files changed, 35 insertions, 1 deletions
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index 8c5a24b4..faf5f7b2 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -1863,7 +1863,7 @@ fun p_exp' par env (e, loc) =
newline,
string "})"]
- | EUnurlify (e, t) =>
+ | EUnurlify (e, t, true) =>
let
fun getIt () =
if isUnboxable t then
@@ -1898,6 +1898,40 @@ fun p_exp' par env (e, loc) =
string "})"]
end
+ | EUnurlify (e, t, false) =>
+ let
+ fun getIt () =
+ if isUnboxable t then
+ unurlify false env t
+ else
+ box [string "({",
+ newline,
+ p_typ env t,
+ string " *tmp = uw_malloc(ctx, sizeof(",
+ p_typ env t,
+ string "));",
+ newline,
+ string "*tmp = ",
+ unurlify false env t,
+ string ";",
+ newline,
+ string "tmp;",
+ newline,
+ string "})"]
+ in
+ box [string "({",
+ newline,
+ string "uw_Basis_string request = uw_maybe_strdup(ctx, ",
+ p_exp env e,
+ string ");",
+ newline,
+ newline,
+ unurlify false env t,
+ string ";",
+ newline,
+ string "})"]
+ end
+
and p_exp env = p_exp' false env
fun p_fun env (fx, n, args, ran, e) =