summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2022-01-04 12:01:18 +0100
committerAndy Wingo <wingo@pobox.com>2022-01-13 09:37:16 +0100
commitef5ade30f91093d2bb8be9e4ca457d4da53ee408 (patch)
treef178ed7674251fab7386936bb2490ee179a7a123
parent24ce3cedfc286c3cc793d41ed557df8c449363e9 (diff)
downloadguile-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.
-rw-r--r--libguile/numbers.c26
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