~ chicken-core (chicken-5) dac35041ba1e2577858dd5269190fb6c2e99cca0
commit dac35041ba1e2577858dd5269190fb6c2e99cca0 Author: felix <felix@call-with-current-continuation.org> AuthorDate: Wed Sep 8 08:23:32 2010 -0400 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Wed Sep 8 08:23:32 2010 -0400 yuck1 diff --git a/runtime.c b/runtime.c index 57378df2..ca328c97 100644 --- a/runtime.c +++ b/runtime.c @@ -6282,17 +6282,20 @@ void C_ccall C_divide(C_word c, C_word closure, C_word k, C_word n1, ...) C_word x, y; C_word iresult; double fresult, f; + int ff = 0; C_alloc_flonum; if(c < 3) C_bad_min_argc(c, 3); if(n1 & C_FIXNUM_BIT) iresult = n1; - else if(!C_immediatep(n1) && C_block_header(n1) == C_FLONUM_TAG) + else if(!C_immediatep(n1) && C_block_header(n1) == C_FLONUM_TAG) { fresult = C_flonum_magnitude(n1); + ff = 1; + } else barf(C_BAD_ARGUMENT_TYPE_ERROR, "/", n1); if(c == 3) { - if(n1 & C_FIXNUM_BIT) { + if(!ff) { if(n1 == C_fix(0)) barf(C_DIVISION_BY_ZERO_ERROR, "/"); else if(n1 == C_fix(1)) C_kontinue(k, C_fix(1)); else C_kontinue_flonum(k, 1 / (double)C_unfix(n1)); @@ -6304,6 +6307,8 @@ void C_ccall C_divide(C_word c, C_word closure, C_word k, C_word n1, ...) va_start(v, n1); c -= 3; + if(ff) goto flonum_result; + while(c--) { x = va_arg(v, C_word); diff --git a/tests/ec-tests.scm b/tests/ec-tests.scm index 87704379..71e9f81e 100644 --- a/tests/ec-tests.scm +++ b/tests/ec-tests.scm @@ -650,3 +650,5 @@ (display my-check-wrong) (newline) (newline) ) + +(exit my-check-wrong) diff --git a/tests/library-tests.scm b/tests/library-tests.scm index c120f338..cf3f1f37 100644 --- a/tests/library-tests.scm +++ b/tests/library-tests.scm @@ -43,6 +43,8 @@ (assert (zero? (+))) (assert (= 1 (*))) +(assert (= 2.5 (/ 5 2))) + ;; number->string conversionTrap