diff --git a/cgen.scm b/cgen.scm index 0f133304..e2f7a635 100644 --- a/cgen.scm +++ b/cgen.scm @@ -351,6 +351,13 @@ (c-code "nil")) ((pair? exp) (c-compile-scalars exp)) + ((real? exp) + (let ((cvar-name (mangle (gensym 'c)))) + (c-code/vars + (string-append "&" cvar-name) ; Code is just the variable name + (list ; Allocate on the C stack + (string-append + "make_double(" cvar-name ", " (number->string exp) ");"))))) ((integer? exp) (let ((cvar-name (mangle (gensym 'c)))) (c-code/vars diff --git a/runtime.h b/runtime.h index 52790013..4253e42b 100644 --- a/runtime.h +++ b/runtime.h @@ -615,9 +615,14 @@ static integer_type Cyc_length(object l){ static string_type Cyc_number2string(object n) { char buffer[1024]; - int num = ((integer_type *) n)->value; - - snprintf(buffer, 1024, "%d", num); + snprintf(buffer, 1024, "%d", ((integer_type *)n)->value); + //TODO: if (type_of(n) == integer_tag) { + //TODO: snprintf(buffer, 1024, "%d", ((integer_type *)n)->value); + //TODO: } else if (type_of(n) == double_tag) { + //TODO: snprintf(buffer, 1024, "%lf", ((double_type *)n)->value); + //TODO: } else { + //TODO: buffer[0] = '\0'; // TODO: throw error instead + //TODO: } make_string(str, buffer); return str; }