changeset 1546:133c71008bef

Add prototypes for [un]urlification functions
author Adam Chlipala <adam@chlipala.net>
date Sun, 21 Aug 2011 10:55:31 -0400
parents 5f530f8e3511
children 553a5cc3a4b5
files src/cjr_print.sml tests/rpcNested.ur
diffstat 2 files changed, 88 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/cjr_print.sml	Sun Aug 21 10:39:19 2011 -0400
+++ b/src/cjr_print.sml	Sun Aug 21 10:55:31 2011 -0400
@@ -524,7 +524,7 @@
         str (Char.toUpper (String.sub (s, 0))) ^ String.extract (s, 1, NONE)
 
 local
-    val urlHandlers = ref ([] : pp_desc list)
+    val urlHandlers = ref ([] : (pp_desc * pp_desc) list)
 in
 
 fun addUrlHandler v = urlHandlers := v :: !urlHandlers
@@ -648,6 +648,14 @@
                                             space,
                                             string "*unurlify_",
                                             string (Int.toString i),
+                                            string "(uw_context, char **);",
+                                            newline],
+                                       box [string "static",
+                                            space,
+                                            p_typ env t,
+                                            space,
+                                            string "*unurlify_",
+                                            string (Int.toString i),
                                             string "(uw_context ctx, char **request) {",
                                             newline,
                                             box [string "return ((*request)[0] == '/' ? ++*request : *request,",
@@ -799,6 +807,14 @@
                                             space,
                                             string "unurlify_",
                                             string (Int.toString i),
+                                            string "(uw_context, char **);",
+                                            newline],
+                                       box [string "static",
+                                            space,
+                                            p_typ env (t, ErrorMsg.dummySpan),
+                                            space,
+                                            string "unurlify_",
+                                            string (Int.toString i),
                                             string "(uw_context ctx, char **request) {",
                                             newline,
                                             box [string "return",
@@ -828,6 +844,14 @@
                                          space,
                                          string "unurlify_list_",
                                          string (Int.toString i),
+                                         string "(uw_context, char **);",
+                                         newline],
+                                    box [string "static",
+                                         space,
+                                         p_typ env (t, loc),
+                                         space,
+                                         string "unurlify_list_",
+                                         string (Int.toString i),
                                          string "(uw_context ctx, char **request) {",
                                          newline,
                                          box [string "return ((*request)[0] == '/' ? ++*request : *request,",
@@ -1037,6 +1061,22 @@
                                             space,
                                             string "urlify_",
                                             string (Int.toString i),
+                                            string "(uw_context,",
+                                            space,
+                                            p_typ env t,
+                                            space,
+                                            if isUnboxable t then
+                                                box []
+                                            else
+                                                string "*",
+                                            string ");",
+                                            newline],
+                                       box [string "static",
+                                            space,
+                                            string "void",
+                                            space,
+                                            string "urlify_",
+                                            string (Int.toString i),
                                             string "(uw_context ctx,",
                                             space,
                                             p_typ env t,
@@ -1153,6 +1193,17 @@
                                             space,
                                             string "urlify_",
                                             string (Int.toString i),
+                                            string "(uw_context,",
+                                            space,
+                                            p_typ env t,
+                                            string ");",
+                                            newline],
+                                       box [string "static",
+                                            space,
+                                            string "void",
+                                            space,
+                                            string "urlify_",
+                                            string (Int.toString i),
                                             string "(uw_context ctx,",
                                             space,
                                             p_typ env t,
@@ -1226,6 +1277,19 @@
                                          space,
                                          string "urlifyl_",
                                          string (Int.toString i),
+                                         string "(uw_context,",
+                                         space,
+                                         string "struct __uws_",
+                                         string (Int.toString i),
+                                         space,
+                                         string "*);",
+                                         newline],
+                                    box [string "static",
+                                         space,
+                                         string "void",
+                                         space,
+                                         string "urlifyl_",
+                                         string (Int.toString i),
                                          string "(uw_context ctx,",
                                          space,
                                          string "struct __uws_",
@@ -2323,8 +2387,10 @@
         val (pds, env) = ListUtil.foldlMap (fn (d, env) =>
                                                let
                                                    val d' = p_decl env d
+                                                   val hs = latestUrlHandlers ()
+                                                   val (protos, defs) = ListPair.unzip hs
                                                in
-                                                   (box (List.revAppend (latestUrlHandlers (), [d'])),
+                                                   (box (List.revAppend (protos, (List.revAppend (defs, [d'])))),
                                                     E.declBinds env d)
                                                end)
                              env ds
@@ -2848,7 +2914,8 @@
                                                      in
                                                          (p', latestUrlHandlers () @ handlers)
                                                      end) [] ps
-                               
+        val (protos, defs) = ListPair.unzip handlers
+
         val hasDb = ref false
         val tables = ref []
         val views = ref []
@@ -3120,7 +3187,8 @@
              newline,
              newline,
 
-             box (rev handlers),
+             box (rev protos),
+             box (rev defs),
 
              string "static void uw_handle(uw_context ctx, char *request) {",
              newline,
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/rpcNested.ur	Sun Aug 21 10:55:31 2011 -0400
@@ -0,0 +1,16 @@
+datatype node
+  = Node of
+    { Label     : string
+    , SubForest : list node
+    }
+
+fun getNode () : transaction node =
+    return (Node { Label = "foo", SubForest = [] })
+
+fun main () : transaction page = return <xml><body>
+  <button onclick={
+    n <- rpc (getNode ());
+    case n of
+        Node {Label = l, ...} => alert ("l = " ^ l)
+  }/>
+  </body></xml>