summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-06-07 23:27:55 +0200
committerAndy Wingo <wingo@pobox.com>2010-06-07 23:27:55 +0200
commita4082ab57e81c1826906c1a8601593e8dea5078c (patch)
tree2ec89a99c1bfc9d1754762d4c5c7d28584d13252
parent78f79f18e2dd7de64a43b3dc195db2c5485cde17 (diff)
downloadguile-a4082ab57e81c1826906c1a8601593e8dea5078c.tar.gz
fix (expt #t 0)
* libguile/numbers.c (scm_expt): Fix check regarding when to dispatch to integer-expt. * test-suite/tests/numbers.test ("expt"): Add test.
-rw-r--r--libguile/numbers.c2
-rw-r--r--test-suite/tests/numbers.test2
2 files changed, 3 insertions, 1 deletions
diff --git a/libguile/numbers.c b/libguile/numbers.c
index b1c918f0e..ca4330b85 100644
--- a/libguile/numbers.c
+++ b/libguile/numbers.c
@@ -5466,7 +5466,7 @@ SCM_DEFINE (scm_expt, "expt", 2, 0, 0,
"Return @var{x} raised to the power of @var{y}.")
#define FUNC_NAME s_scm_expt
{
- if (!SCM_INEXACTP (y) && scm_is_integer (y))
+ if ((SCM_I_INUMP (x) || SCM_BIGP (x)) && scm_is_integer (y))
return scm_integer_expt (x, y);
else if (scm_is_real (x) && scm_is_real (y) && scm_to_double (x) >= 0.0)
{
diff --git a/test-suite/tests/numbers.test b/test-suite/tests/numbers.test
index 3f2671207..fae86e410 100644
--- a/test-suite/tests/numbers.test
+++ b/test-suite/tests/numbers.test
@@ -2875,6 +2875,8 @@
;;;
(with-test-prefix "expt"
+ (pass-if-exception "non-numeric base" exception:wrong-type-arg
+ (expt #t 0))
(pass-if "(= 1 (expt 0 0))" (= 1 (expt 0 0)))
(pass-if "(= 1 (expt 0 0.0))" (= 1 (expt 0 0.0)))
(pass-if "(= 1 (expt 0.0 0))" (= 1 (expt 0.0 0)))