summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2008-11-08 12:12:50 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2008-11-08 12:12:50 -0500
commit7d6eed032a2b129056ff264a91076cec68035a34 (patch)
tree3e0286912dbc8c2cd57c2f90fa095b82429434bc /src
parentdbf4d428936189bba18ffb1d622029c79da39414 (diff)
Handle EError returning a function; handle multiple cookies in one input header
Diffstat (limited to 'src')
-rw-r--r--src/c/urweb.c18
-rw-r--r--src/cjr_print.sml13
2 files changed, 20 insertions, 11 deletions
diff --git a/src/c/urweb.c b/src/c/urweb.c
index e8c75275..57584f53 100644
--- a/src/c/urweb.c
+++ b/src/c/urweb.c
@@ -1193,9 +1193,21 @@ uw_Basis_string uw_Basis_get_cookie(uw_context ctx, uw_Basis_string c) {
}
while (p = strchr(s, ':')) {
- if (!strncasecmp(s, "Cookie: ", 8) && !strncmp(p + 2, c, len)
- && p + 2 + len < ctx->headers_end && p[2 + len] == '=') {
- return p + 3 + len;
+ if (!strncasecmp(s, "Cookie: ", 8)) {
+ p += 2;
+ while (1) {
+ if (!strncmp(p, c, len)
+ && p + len < ctx->headers_end && p[len] == '=')
+ return p + 1 + len;
+ else if (p = strchr(p, ';'))
+ p += 2;
+ else if ((s = strchr(s, 0)) && s < ctx->headers_end) {
+ s += 2;
+ break;
+ }
+ else
+ return NULL;
+ }
} else {
if ((s = strchr(p, 0)) && s < ctx->headers_end)
s += 2;
diff --git a/src/cjr_print.sml b/src/cjr_print.sml
index 3941fdd9..7c13fcb5 100644
--- a/src/cjr_print.sml
+++ b/src/cjr_print.sml
@@ -70,14 +70,8 @@ fun isUnboxable (t : typ) =
fun p_typ' par env (t, loc) =
case t of
- TFun (t1, t2) => parenIf par (box [string "(",
- p_typ' true env t2,
- space,
- string "(*)",
- space,
- string "(",
- p_typ env t1,
- string "))"])
+ TFun (t1, t2) => (EM.errorAt loc "Function type remains";
+ string "<FUNCTION>")
| TRecord i => box [string "struct",
space,
string "__uws_",
@@ -967,6 +961,9 @@ fun p_exp' par env (e, loc) =
string "tmp;",
newline,
string "})"]
+ | EApp ((EError (e, (TFun (_, ran), _)), loc), _) =>
+ p_exp env (EError (e, ran), loc)
+
| EFfiApp (m, x, es) => box [string "uw_",
p_ident m,
string "_",