diff options
author | Adam Chlipala <adamc@hcoop.net> | 2008-09-07 12:19:15 -0400 |
---|---|---|
committer | Adam Chlipala <adamc@hcoop.net> | 2008-09-07 12:19:15 -0400 |
commit | 5336dbf5369f77fba0f498a03523faebeed9c5b2 (patch) | |
tree | fddd00c363f5625d7d26f043dc903a4d01cf297f | |
parent | 1f893091967ed6a9bd8469a62ddf4017e87d563d (diff) |
Error-parsing floats and bools
-rw-r--r-- | include/urweb.h | 2 | ||||
-rw-r--r-- | src/c/urweb.c | 19 | ||||
-rw-r--r-- | tests/fromStringErr.ur | 2 |
3 files changed, 23 insertions, 0 deletions
diff --git a/include/urweb.h b/include/urweb.h index 7715cc21..51e6f04d 100644 --- a/include/urweb.h +++ b/include/urweb.h @@ -82,3 +82,5 @@ lw_Basis_float *lw_Basis_stringToFloat(lw_context, lw_Basis_string); lw_Basis_bool *lw_Basis_stringToBool(lw_context, lw_Basis_string); lw_Basis_int lw_Basis_stringToInt_error(lw_context, lw_Basis_string); +lw_Basis_float lw_Basis_stringToFloat_error(lw_context, lw_Basis_string); +lw_Basis_bool lw_Basis_stringToBool_error(lw_context, lw_Basis_string); diff --git a/src/c/urweb.c b/src/c/urweb.c index 1286ca5e..47b45367 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -799,3 +799,22 @@ lw_Basis_int lw_Basis_stringToInt_error(lw_context ctx, lw_Basis_string s) { else lw_error(ctx, FATAL, "Can't parse int: %s", s); } + +lw_Basis_float lw_Basis_stringToFloat_error(lw_context ctx, lw_Basis_string s) { + char *endptr; + lw_Basis_float n = strtod(s, &endptr); + + if (*s != '\0' && *endptr == '\0') + return n; + else + lw_error(ctx, FATAL, "Can't parse float: %s", s); +} + +lw_Basis_bool lw_Basis_stringToBool_error(lw_context ctx, lw_Basis_string s) { + if (!strcasecmp (s, "True")) + return lw_Basis_True; + else if (!strcasecmp (s, "False")) + return lw_Basis_False; + else + lw_error(ctx, FATAL, "Can't parse bool: %s", s); +} diff --git a/tests/fromStringErr.ur b/tests/fromStringErr.ur index 07899d02..dcc25783 100644 --- a/tests/fromStringErr.ur +++ b/tests/fromStringErr.ur @@ -1,3 +1,5 @@ fun main () : transaction page = return <html><body> 3 = {cdata (show _ (readError _ "3" : int))}<br/> + 12.12 = {cdata (show _ (readError _ "12.12" : float))}<br/> + True = {cdata (show _ (readError _ "True" : bool))}<br/> </body></html> |