From 4b8d14362714808752485b21e64bfc4bbd09bfd5 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 5 Apr 2017 18:08:08 -0400 Subject: [PATCH] Cleanup --- include/cyclone/runtime.h | 16 +++++++++++++++- scheme/base.sld | 2 +- scheme/inexact.sld | 2 +- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/include/cyclone/runtime.h b/include/cyclone/runtime.h index 8a497b64..0995ee2a 100644 --- a/include/cyclone/runtime.h +++ b/include/cyclone/runtime.h @@ -275,7 +275,7 @@ object Cyc_io_read_line(void *data, object cont, object port); */ /**@{*/ -#define unboxed_inexact_double_op(data, ptr, OP, z) \ +#define return_inexact_double_op_no_cps(data, ptr, OP, z) \ double unboxed; \ Cyc_check_num(data, z); \ if (obj_is_int(z)) { \ @@ -318,6 +318,20 @@ object Cyc_io_read_line(void *data, object cont, object port); } \ return_closcall1(data, cont, obj_int2obj(i)) +#define return_exact_double_op_no_cps(data, ptr, OP, z) \ + int i = 0; \ + Cyc_check_num(data, z); \ + if (obj_is_int(z)) { \ + i = obj_obj2int(z); \ + } else if (type_of(z) == integer_tag) { \ + i = (int)OP(((integer_type *)z)->value); \ + } else if (type_of(z) == bignum_tag) { \ + return z; \ + } else { \ + i = (int)OP(((double_type *)z)->value); \ + } \ + return obj_int2obj(i); + #define unbox_number(n) \ ((obj_is_int(n) ? obj_obj2int(n) : \ ((type_of(n) == integer_tag) ? \ diff --git a/scheme/base.sld b/scheme/base.sld index c00addf3..8610f086 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -1073,7 +1073,7 @@ "(void *data, int argc, closure _, object k, object z)" " return_exact_double_op(data, k, (int), z); " "(void *data, object ptr, object z)" - " unboxed_inexact_double_op(data, ptr, (int), z);") + " return_exact_double_op_no_cps(data, ptr, (int), z);") (define-c round "(void *data, int argc, closure _, object k, object z)" " return_exact_double_op(data, k, round, z); ") diff --git a/scheme/inexact.sld b/scheme/inexact.sld index e971ac85..07497920 100644 --- a/scheme/inexact.sld +++ b/scheme/inexact.sld @@ -70,7 +70,7 @@ "(void *data, int argc, closure _, object k, object z)" " return_inexact_double_op(data, k, log, z);" "(void *data, object ptr, object z)" - " unboxed_inexact_double_op(data, ptr, log, z);" + " return_inexact_double_op_no_cps(data, ptr, log, z);" ) (define-c sin "(void *data, int argc, closure _, object k, object z)"