diff options
author | Andy Wingo <wingo@pobox.com> | 2022-01-04 12:01:18 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2022-01-13 09:37:16 +0100 |
commit | ef5ade30f91093d2bb8be9e4ca457d4da53ee408 (patch) | |
tree | f178ed7674251fab7386936bb2490ee179a7a123 /libguile | |
parent | 24ce3cedfc286c3cc793d41ed557df8c449363e9 (diff) | |
download | guile-ef5ade30f91093d2bb8be9e4ca457d4da53ee408.tar.gz |
Build scm_integer_p on scm_is_integer, not vice versa
* libguile/numbers.c: Switch layering of scm_is_integer /
scm_is_exact_integer and their SCM-valued counterparts.
Diffstat (limited to 'libguile')
-rw-r--r-- | libguile/numbers.c | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/libguile/numbers.c b/libguile/numbers.c index 51e5ee19a..46f55de58 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -4605,15 +4605,7 @@ SCM_DEFINE (scm_integer_p, "integer?", 1, 0, 0, "else return @code{#f}.") #define FUNC_NAME s_scm_integer_p { - if (SCM_I_INUMP (x) || SCM_BIGP (x)) - return SCM_BOOL_T; - else if (SCM_REALP (x)) - { - double val = SCM_REAL_VALUE (x); - return scm_from_bool (!isinf (val) && (val == floor (val))); - } - else - return SCM_BOOL_F; + return scm_from_bool (scm_is_integer (x)); } #undef FUNC_NAME @@ -4623,10 +4615,7 @@ SCM_DEFINE (scm_exact_integer_p, "exact-integer?", 1, 0, 0, "else return @code{#f}.") #define FUNC_NAME s_scm_exact_integer_p { - if (SCM_I_INUMP (x) || SCM_BIGP (x)) - return SCM_BOOL_T; - else - return SCM_BOOL_F; + return scm_from_bool (scm_is_exact_integer (x)); } #undef FUNC_NAME @@ -7716,13 +7705,20 @@ SCM_DEFINE (scm_rationalize, "rationalize", 2, 0, 0, int scm_is_integer (SCM val) { - return scm_is_true (scm_integer_p (val)); + if (scm_is_exact_integer (val)) + return 1; + if (SCM_REALP (val)) + { + double x = SCM_REAL_VALUE (val); + return !isinf (x) && (x == floor (x)); + } + return 0; } int scm_is_exact_integer (SCM val) { - return scm_is_true (scm_exact_integer_p (val)); + return SCM_I_INUMP (val) || SCM_BIGP (val); } int |