aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/mono_opt.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-07-13 20:07:10 -0400
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-07-13 20:07:10 -0400
commit811a3831805bf7a87ed3a64156f4ac6f6246edb9 (patch)
treea2bc2022ac4e0412a787a526135aafc99db66998 /src/mono_opt.sml
parent97cc749872a8baf53bb34ef1b536b82f6aa7f1c7 (diff)
Passing an argument to a web function
Diffstat (limited to 'src/mono_opt.sml')
-rw-r--r--src/mono_opt.sml40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mono_opt.sml b/src/mono_opt.sml
index 11e0acef..aa2c5234 100644
--- a/src/mono_opt.sml
+++ b/src/mono_opt.sml
@@ -51,6 +51,25 @@ val attrifyString = String.translate (fn #"\"" => "&quot;"
else
"&#" ^ Int.toString (ord ch) ^ ";")
+val urlifyInt = attrifyInt
+val urlifyFloat = attrifyFloat
+
+fun hexIt ch =
+ let
+ val s = Int.fmt StringCvt.HEX (ord ch)
+ in
+ case size s of
+ 0 => "00"
+ | 1 => "0" ^ s
+ | _ => s
+ end
+
+val urlifyString = String.translate (fn #" " => "+"
+ | ch => if Char.isAlphaNum ch then
+ str ch
+ else
+ "%" ^ hexIt ch)
+
fun exp e =
case e of
EPrim (Prim.String s) =>
@@ -124,6 +143,27 @@ fun exp e =
| EWrite (EFfiApp ("Basis", "attrifyString", [e]), _) =>
EFfiApp ("Basis", "attrifyString_w", [e])
+ | EFfiApp ("Basis", "urlifyInt", [(EPrim (Prim.Int n), _)]) =>
+ EPrim (Prim.String (urlifyInt n))
+ | EWrite (EFfiApp ("Basis", "urlifyInt", [(EPrim (Prim.Int n), _)]), loc) =>
+ EWrite (EPrim (Prim.String (urlifyInt n)), loc)
+ | EWrite (EFfiApp ("Basis", "urlifyInt", [e]), _) =>
+ EFfiApp ("Basis", "urlifyInt_w", [e])
+
+ | EFfiApp ("Basis", "urlifyFloat", [(EPrim (Prim.Float n), _)]) =>
+ EPrim (Prim.String (urlifyFloat n))
+ | EWrite (EFfiApp ("Basis", "urlifyFloat", [(EPrim (Prim.Float n), _)]), loc) =>
+ EWrite (EPrim (Prim.String (urlifyFloat n)), loc)
+ | EWrite (EFfiApp ("Basis", "urlifyFloat", [e]), _) =>
+ EFfiApp ("Basis", "urlifyFloat_w", [e])
+
+ | EFfiApp ("Basis", "urlifyString", [(EPrim (Prim.String s), _)]) =>
+ EPrim (Prim.String (urlifyString s))
+ | EWrite (EFfiApp ("Basis", "urlifyString", [(EPrim (Prim.String s), _)]), loc) =>
+ EWrite (EPrim (Prim.String (urlifyString s)), loc)
+ | EWrite (EFfiApp ("Basis", "urlifyString", [e]), _) =>
+ EFfiApp ("Basis", "urlifyString_w", [e])
+
| _ => e
and optExp e = #1 (U.Exp.map {typ = typ, exp = exp} e)