From 7ed5deb4aa0f7c9a61133a489f0d00e73d95c225 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Tue, 12 Jan 2010 16:09:13 -0500 Subject: Allow escaped backslashes in literals; conversion betwixt int and char --- include/urweb.h | 3 +++ lib/ur/basis.urs | 3 ++- lib/ur/char.ur | 3 +++ lib/ur/char.urs | 3 +++ src/c/urweb.c | 8 ++++++++ src/urweb.lex | 1 + 6 files changed, 20 insertions(+), 1 deletion(-) diff --git a/include/urweb.h b/include/urweb.h index 84da7694..b62adce1 100644 --- a/include/urweb.h +++ b/include/urweb.h @@ -258,6 +258,9 @@ uw_Basis_bool uw_Basis_isxdigit(uw_context, uw_Basis_char); uw_Basis_char uw_Basis_tolower(uw_context, uw_Basis_char); uw_Basis_char uw_Basis_toupper(uw_context, uw_Basis_char); +uw_Basis_int uw_Basis_ord(uw_context, uw_Basis_char); +uw_Basis_char uw_Basis_chr(uw_context, uw_Basis_int); + uw_Basis_string uw_Basis_currentUrl(uw_context); void uw_set_currentUrl(uw_context, char *); diff --git a/lib/ur/basis.urs b/lib/ur/basis.urs index d61763af..ea50b0b3 100644 --- a/lib/ur/basis.urs +++ b/lib/ur/basis.urs @@ -68,7 +68,8 @@ val isupper : char -> bool val isxdigit : char -> bool val tolower : char -> char val toupper : char -> char - +val ord : char -> int +val chr : int -> char (** String operations *) diff --git a/lib/ur/char.ur b/lib/ur/char.ur index 29e181e6..d2890bea 100644 --- a/lib/ur/char.ur +++ b/lib/ur/char.ur @@ -14,3 +14,6 @@ val isUpper = Basis.isupper val isXdigit = Basis.isxdigit val toLower = Basis.tolower val toUpper = Basis.toupper + +val toInt = Basis.ord +val fromInt = Basis.chr diff --git a/lib/ur/char.urs b/lib/ur/char.urs index 02e55632..c185af92 100644 --- a/lib/ur/char.urs +++ b/lib/ur/char.urs @@ -14,3 +14,6 @@ val isUpper : t -> bool val isXdigit : t -> bool val toLower : t -> t val toUpper : t -> t + +val toInt : t -> int +val fromInt : int -> t diff --git a/src/c/urweb.c b/src/c/urweb.c index 006e2e28..8ccecdaa 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -3375,6 +3375,14 @@ uw_Basis_char uw_Basis_toupper(uw_context ctx, uw_Basis_char c) { return toupper(c); } +uw_Basis_int uw_Basis_ord(uw_context ctx, uw_Basis_char c) { + return (unsigned char)c; +} + +uw_Basis_char uw_Basis_chr(uw_context ctx, uw_Basis_int n) { + return n; +} + uw_Basis_string uw_Basis_currentUrl(uw_context ctx) { return ctx->current_url; } diff --git a/src/urweb.lex b/src/urweb.lex index d2227d16..45f555dd 100644 --- a/src/urweb.lex +++ b/src/urweb.lex @@ -198,6 +198,7 @@ xint = x[0-9a-fA-F][0-9a-fA-F]; "\\\"" => (str := #"\"" :: !str; continue()); "\\'" => (str := #"'" :: !str; continue()); "\\n" => (str := #"\n" :: !str; continue()); + "\\\\" => (str := #"\\" :: !str; continue()); "\\t" => (str := #"\t" :: !str; continue()); "\n" => (newline yypos; str := #"\n" :: !str; continue()); -- cgit v1.2.3