From dbb9192edae68feb230b5b231fcaf10fd68103e8 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sun, 7 Sep 2008 10:20:42 -0400 Subject: toString for float and bool --- include/urweb.h | 2 ++ lib/basis.urs | 3 ++- src/c/urweb.c | 18 ++++++++++++++++++ src/prim.sml | 4 ++-- tests/toString.ur | 4 +++- 5 files changed, 27 insertions(+), 4 deletions(-) diff --git a/include/urweb.h b/include/urweb.h index f4f33362..68ac4fc6 100644 --- a/include/urweb.h +++ b/include/urweb.h @@ -69,3 +69,5 @@ lw_Basis_bool lw_Basis_sqlifyBool(lw_context, lw_Basis_bool); char *lw_Basis_ensqlBool(lw_Basis_bool); lw_Basis_string lw_Basis_intToString(lw_context, lw_Basis_int); +lw_Basis_string lw_Basis_floatToString(lw_context, lw_Basis_float); +lw_Basis_string lw_Basis_boolToString(lw_context, lw_Basis_bool); diff --git a/lib/basis.urs b/lib/basis.urs index 109ab31a..14b6d464 100644 --- a/lib/basis.urs +++ b/lib/basis.urs @@ -24,7 +24,8 @@ val eq_bool : eq bool val strcat : string -> string -> string val intToString : int -> string - +val floatToString : float -> string +val boolToString : bool -> string (** SQL *) diff --git a/src/c/urweb.c b/src/c/urweb.c index 78a8e0f8..7ed582da 100644 --- a/src/c/urweb.c +++ b/src/c/urweb.c @@ -681,3 +681,21 @@ lw_Basis_string lw_Basis_intToString(lw_context ctx, lw_Basis_int n) { ctx->heap_front += len+1; return r; } + +lw_Basis_string lw_Basis_floatToString(lw_context ctx, lw_Basis_float n) { + int len; + char *r; + + lw_check_heap(ctx, FLOATS_MAX); + r = ctx->heap_front; + sprintf(r, "%g%n", n, &len); + ctx->heap_front += len+1; + return r; +} + +lw_Basis_string lw_Basis_boolToString(lw_context ctx, lw_Basis_bool b) { + if (b == lw_Basis_False) + return "False"; + else + return "True"; +} diff --git a/src/prim.sml b/src/prim.sml index 8c0e03f7..2c24fa0a 100644 --- a/src/prim.sml +++ b/src/prim.sml @@ -49,9 +49,9 @@ fun int2s n = fun float2s n = if Real64.compare (n, Real64.fromInt 0) = LESS then - "-" ^ Real64.toString (Real64.~ n) ^ "L" + "-" ^ Real64.toString (Real64.~ n) else - Real64.toString n ^ "L" + Real64.toString n fun p_t_GCC t = case t of diff --git a/tests/toString.ur b/tests/toString.ur index 830f4713..f51ef098 100644 --- a/tests/toString.ur +++ b/tests/toString.ur @@ -1,3 +1,5 @@ fun main () : transaction page = return - 6 = {cdata (intToString 6)} + 6 = {cdata (intToString 6)}
+ 12.34 = {cdata (floatToString 12.34)}
+ False = {cdata (boolToString False)}
-- cgit v1.2.3