Mercurial > urweb
changeset 1322:80bff6449f41
Fix a bug in C list unurlification
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Sun, 21 Nov 2010 15:43:24 -0500 |
parents | 4172863d049d |
children | 0d8bd8ae8417 |
files | lib/ur/list.ur lib/ur/list.urs src/cjr_print.sml |
diffstat | 3 files changed, 18 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/lib/ur/list.ur Sat Nov 20 10:45:22 2010 -0500 +++ b/lib/ur/list.ur Sun Nov 21 15:43:24 2010 -0500 @@ -308,6 +308,20 @@ sort' ls end +val nth [a] = + let + fun nth (ls : list a) (n : int) : option a = + case ls of + [] => None + | x :: ls' => + if n <= 0 then + Some x + else + nth ls' (n-1) + in + nth + end + fun assoc [a] [b] (_ : eq a) (x : a) = let fun assoc' (ls : list (a * b)) =
--- a/lib/ur/list.urs Sat Nov 20 10:45:22 2010 -0500 +++ b/lib/ur/list.urs Sun Nov 21 15:43:24 2010 -0500 @@ -71,6 +71,8 @@ val sort : a ::: Type -> (a -> a -> bool) (* > predicate *) -> t a -> t a +val nth : a ::: Type -> list a -> int -> option a + (** Association lists *) val assoc : a ::: Type -> b ::: Type -> eq a -> a -> t (a * b) -> option b
--- a/src/cjr_print.sml Sat Nov 20 10:45:22 2010 -0500 +++ b/src/cjr_print.sml Sun Nov 21 15:43:24 2010 -0500 @@ -861,7 +861,7 @@ space, string "+=", space, - string "3, NULL) : ((!strncmp(request, \"Cons\", 4) && (request[4] == 0 ", + string "3, (*request == '/' ? *request++ = 0 : 0), NULL) : ((!strncmp(request, \"Cons\", 4) && (request[4] == 0 ", string "|| request[4] == '/')) ? (request", space, string "+=", @@ -895,7 +895,7 @@ newline, string ":", space, - string ("(uw_error(ctx, FATAL, \"Error unurlifying list\"), NULL))));"), + string ("(uw_error(ctx, FATAL, \"Error unurlifying list: %s\", request), NULL))));"), newline], string "}", newline,