Merge pull request #460 from jacius/remainder_inf

Raise type error if remainder called with infinity.
This commit is contained in:
Alex Shinn 2018-03-15 21:46:25 +09:00 committed by GitHub
commit d167f90802
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1667,8 +1667,11 @@ sexp sexp_remainder (sexp ctx, sexp a, sexp b) {
#if SEXP_USE_RATIOS #if SEXP_USE_RATIOS
case SEXP_NUM_FLO_RAT: case SEXP_NUM_FLO_RAT:
#endif #endif
if (sexp_flonum_value(a) != trunc(sexp_flonum_value(a))) { if (isinf(sexp_flonum_value(a)) ||
sexp_flonum_value(a) != trunc(sexp_flonum_value(a))) {
r = sexp_type_exception(ctx, NULL, SEXP_FIXNUM, a); r = sexp_type_exception(ctx, NULL, SEXP_FIXNUM, a);
} else if (bt == SEXP_NUM_FLO && isinf(sexp_flonum_value(b))) {
r = sexp_type_exception(ctx, NULL, SEXP_FIXNUM, b);
} else { } else {
tmp = sexp_bignum_normalize(sexp_double_to_bignum(ctx, sexp_flonum_value(a))); tmp = sexp_bignum_normalize(sexp_double_to_bignum(ctx, sexp_flonum_value(a)));
tmp = sexp_remainder(ctx, tmp, b); tmp = sexp_remainder(ctx, tmp, b);
@ -1691,7 +1694,8 @@ sexp sexp_remainder (sexp ctx, sexp a, sexp b) {
#if SEXP_USE_RATIOS #if SEXP_USE_RATIOS
case SEXP_NUM_RAT_FLO: case SEXP_NUM_RAT_FLO:
#endif #endif
if (sexp_flonum_value(b) != trunc(sexp_flonum_value(b))) { if (isinf(sexp_flonum_value(b)) ||
sexp_flonum_value(b) != trunc(sexp_flonum_value(b))) {
r = sexp_type_exception(ctx, NULL, SEXP_FIXNUM, b); r = sexp_type_exception(ctx, NULL, SEXP_FIXNUM, b);
} else { } else {
tmp = sexp_bignum_normalize(sexp_double_to_bignum(ctx, sexp_flonum_value(b))); tmp = sexp_bignum_normalize(sexp_double_to_bignum(ctx, sexp_flonum_value(b)));