Mercurial > hg > xemacs-beta
diff src/bytecode.c @ 4717:fcc7e89d5e68
Properly handle continuable divide-by-zero errors. Fix truncation of a
zero-valued ratio. See xemacs-patches message
<870180fe0910080956h5d674f03q185d11aa6fc57bd2@mail.gmail.com>.
author | Jerry James <james@xemacs.org> |
---|---|
date | Mon, 12 Oct 2009 12:10:04 -0600 |
parents | b5e1d4f6b66f |
children | 1d61580e0cf7 |
line wrap: on
line diff
--- a/src/bytecode.c Mon Oct 12 17:19:52 2009 +0100 +++ b/src/bytecode.c Mon Oct 12 12:10:04 2009 -0600 @@ -432,7 +432,8 @@ ival1 *= ival2; break; #endif case Bquo: - if (ival2 == 0) Fsignal (Qarith_error, Qnil); + if (ival2 == 0) + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); ival1 /= ival2; break; case Bmax: if (ival1 < ival2) ival1 = ival2; break; @@ -458,7 +459,7 @@ break; case Bquo: if (bignum_sign (XBIGNUM_DATA (obj2)) == 0) - Fsignal (Qarith_error, Qnil); + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); bignum_div (scratch_bignum, XBIGNUM_DATA (obj1), XBIGNUM_DATA (obj2)); break; @@ -486,7 +487,7 @@ break; case Bquo: if (ratio_sign (XRATIO_DATA (obj2)) == 0) - Fsignal (Qarith_error, Qnil); + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); ratio_div (scratch_ratio, XRATIO_DATA (obj1), XRATIO_DATA (obj2)); break; case Bmax: @@ -518,7 +519,7 @@ break; case Bquo: if (bigfloat_sign (XBIGFLOAT_DATA (obj2)) == 0) - Fsignal (Qarith_error, Qnil); + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); bigfloat_div (scratch_bigfloat, XBIGFLOAT_DATA (obj1), XBIGFLOAT_DATA (obj2)); break; @@ -540,7 +541,8 @@ case Bdiff: dval1 -= dval2; break; case Bmult: dval1 *= dval2; break; case Bquo: - if (dval2 == 0.0) Fsignal (Qarith_error, Qnil); + if (dval2 == 0.0) + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); dval1 /= dval2; break; case Bmax: if (dval1 < dval2) dval1 = dval2; break; @@ -585,7 +587,8 @@ case Bdiff: ival1 -= ival2; break; case Bmult: ival1 *= ival2; break; case Bquo: - if (ival2 == 0) Fsignal (Qarith_error, Qnil); + if (ival2 == 0) + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); ival1 /= ival2; break; case Bmax: if (ival1 < ival2) ival1 = ival2; break; @@ -603,7 +606,8 @@ case Bdiff: dval1 -= dval2; break; case Bmult: dval1 *= dval2; break; case Bquo: - if (dval2 == 0) Fsignal (Qarith_error, Qnil); + if (dval2 == 0) + signal_error_2 (Qarith_error, "division by zero", obj1, obj2); dval1 /= dval2; break; case Bmax: if (dval1 < dval2) dval1 = dval2; break;