diff --git a/THANKS b/THANKS index 75eb8f4a3..f0c170e4c 100644 --- a/THANKS +++ b/THANKS @@ -23,3 +23,4 @@ For fixes or providing information which led to a fix: Ken Raeburn Bill Schottstaedt Momchil Velikov + Keith Wright diff --git a/libguile/ChangeLog b/libguile/ChangeLog index 7b98f2712..44bc00c26 100644 --- a/libguile/ChangeLog +++ b/libguile/ChangeLog @@ -1,3 +1,8 @@ +2001-11-22 Dirk Herrmann + + * numbers.c (scm_divide): Fix (/ 0). Thanks to Keith Wright for + reporting the bug. + 2001-11-21 Marius Vollmer * Makefile.am (install-exec-hook): Prepend $(DESTDIR) to filename. diff --git a/libguile/numbers.c b/libguile/numbers.c index 4afc1578b..b6796fa8c 100644 --- a/libguile/numbers.c +++ b/libguile/numbers.c @@ -3707,10 +3707,13 @@ scm_divide (SCM x, SCM y) if (SCM_UNBNDP (x)) { SCM_WTA_DISPATCH_0 (g_divide, s_divide); } else if (SCM_INUMP (x)) { - if (SCM_EQ_P (x, SCM_MAKINUM (1L)) || SCM_EQ_P (x, SCM_MAKINUM (-1L))) { + long xx = SCM_INUM (x); + if (xx == 1 || xx == -1) { return x; + } else if (xx == 0) { + scm_num_overflow (s_divide); } else { - return scm_make_real (1.0 / (double) SCM_INUM (x)); + return scm_make_real (1.0 / (double) xx); } } else if (SCM_BIGP (x)) { return scm_make_real (1.0 / scm_i_big2dbl (x));