From e3d1414dcc3afd4d3e2aac251eba04d5277fea69 Mon Sep 17 00:00:00 2001 From: Alex Shinn Date: Tue, 29 Nov 2011 08:19:01 +0900 Subject: [PATCH] fix for (inexact->exact ratio) --- include/chibi/sexp.h | 6 ++++++ vm.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/chibi/sexp.h b/include/chibi/sexp.h index 1be0e3f2..119b209b 100755 --- a/include/chibi/sexp.h +++ b/include/chibi/sexp.h @@ -676,6 +676,12 @@ SEXP_API sexp sexp_make_unsigned_integer(sexp ctx, sexp_luint_t x); #define sexp_integerp(x) (sexp_exact_integerp(x) _or_integer_flonump(x)) +#if SEXP_USE_RATIOS +#define sexp_exactp(x) (sexp_exact_integerp(x) || sexp_ratiop(x)) +#else +#define sexp_exactp(x) sexp_exact_integerp(x) +#endif + #if SEXP_USE_FLONUMS #define sexp_fixnum_to_flonum(ctx, x) (sexp_make_flonum(ctx, sexp_unbox_fixnum(x))) #if SEXP_USE_RATIOS diff --git a/vm.c b/vm.c index cd56064a..cce96b02 100644 --- a/vm.c +++ b/vm.c @@ -1684,7 +1684,7 @@ sexp sexp_apply (sexp ctx, sexp proc, sexp args) { } else { _ARG1 = sexp_make_fixnum((sexp_sint_t)sexp_flonum_value(_ARG1)); } - } else if (! sexp_fixnump(_ARG1) && ! sexp_bignump(_ARG1)) { + } else if (!sexp_exactp(_ARG1)) { sexp_raise("inexact->exact: not a number", sexp_list1(ctx, _ARG1)); } break;