shortcut multiplication by exact 0

This commit is contained in:
Alex Shinn 2012-07-11 23:09:25 +09:00
parent afacac6127
commit 884764036b

View file

@ -1163,7 +1163,7 @@ sexp sexp_mul (sexp ctx, sexp a, sexp b) {
r = sexp_make_fixnum(prod); r = sexp_make_fixnum(prod);
break; break;
case SEXP_NUM_FIX_FLO: case SEXP_NUM_FIX_FLO:
r = sexp_make_flonum(ctx, sexp_fixnum_to_double(a)*sexp_flonum_value(b)); r = (a==SEXP_ZERO ? a : sexp_make_flonum(ctx, sexp_fixnum_to_double(a)*sexp_flonum_value(b)));
break; break;
case SEXP_NUM_FIX_BIG: case SEXP_NUM_FIX_BIG:
r = sexp_bignum_fxmul(ctx, NULL, b, sexp_unbox_fixnum(sexp_fx_abs(a)), 0); r = sexp_bignum_fxmul(ctx, NULL, b, sexp_unbox_fixnum(sexp_fx_abs(a)), 0);