fix bad error message for div 0 (UN #217).
This commit is contained in:
parent
d3388ed9b4
commit
b23f2c92af
30
C/arith2.c
30
C/arith2.c
@ -48,7 +48,8 @@ p_mod(Term t1, Term t2) {
|
|||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
Int mod;
|
Int mod;
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " mod 0", i1);
|
||||||
if (i1 == Int_MIN && i2 == -1) {
|
if (i1 == Int_MIN && i2 == -1) {
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
return Yap_gmp_add_ints(Int_MAX, 1);
|
return Yap_gmp_add_ints(Int_MAX, 1);
|
||||||
@ -82,7 +83,8 @@ p_mod(Term t1, Term t2) {
|
|||||||
{
|
{
|
||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... mod 0");
|
||||||
return Yap_gmp_mod_big_int(t1, i2);
|
return Yap_gmp_mod_big_int(t1, i2);
|
||||||
}
|
}
|
||||||
case (CELL)big_int_e:
|
case (CELL)big_int_e:
|
||||||
@ -97,8 +99,6 @@ p_mod(Term t1, Term t2) {
|
|||||||
default:
|
default:
|
||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
zero_divisor:
|
|
||||||
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is mod 0");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Term
|
static Term
|
||||||
@ -113,7 +113,8 @@ p_div2(Term t1, Term t2) {
|
|||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
Int res, mod;
|
Int res, mod;
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " div 0", i1);
|
||||||
if (i1 == Int_MIN && i2 == -1) {
|
if (i1 == Int_MIN && i2 == -1) {
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
return Yap_gmp_add_ints(Int_MAX, 1);
|
return Yap_gmp_add_ints(Int_MAX, 1);
|
||||||
@ -148,7 +149,8 @@ p_div2(Term t1, Term t2) {
|
|||||||
{
|
{
|
||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... div 0");
|
||||||
return Yap_gmp_div2_big_int(t1, i2);
|
return Yap_gmp_div2_big_int(t1, i2);
|
||||||
}
|
}
|
||||||
case (CELL)big_int_e:
|
case (CELL)big_int_e:
|
||||||
@ -163,8 +165,6 @@ p_div2(Term t1, Term t2) {
|
|||||||
default:
|
default:
|
||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
zero_divisor:
|
|
||||||
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is div 0");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Term
|
static Term
|
||||||
@ -179,7 +179,8 @@ p_rem(Term t1, Term t2) {
|
|||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
Int mod;
|
Int mod;
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " rem 0", i1);
|
||||||
if (i1 == Int_MIN && i2 == -1) {
|
if (i1 == Int_MIN && i2 == -1) {
|
||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
return Yap_gmp_add_ints(Int_MAX, 1);
|
return Yap_gmp_add_ints(Int_MAX, 1);
|
||||||
@ -207,6 +208,8 @@ p_rem(Term t1, Term t2) {
|
|||||||
#ifdef USE_GMP
|
#ifdef USE_GMP
|
||||||
switch (ETypeOfTerm(t2)) {
|
switch (ETypeOfTerm(t2)) {
|
||||||
case long_int_e:
|
case long_int_e:
|
||||||
|
if (IntegerOfTerm(t2) == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... rem 0");
|
||||||
return Yap_gmp_rem_big_int(t1, IntegerOfTerm(t2));
|
return Yap_gmp_rem_big_int(t1, IntegerOfTerm(t2));
|
||||||
case (CELL)big_int_e:
|
case (CELL)big_int_e:
|
||||||
/* two bignums */
|
/* two bignums */
|
||||||
@ -220,8 +223,6 @@ p_rem(Term t1, Term t2) {
|
|||||||
default:
|
default:
|
||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
zero_divisor:
|
|
||||||
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is mod 0");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -239,7 +240,8 @@ p_rdiv(Term t1, Term t2) {
|
|||||||
Int i1 = IntegerOfTerm(t1);
|
Int i1 = IntegerOfTerm(t1);
|
||||||
Int i2 = IntegerOfTerm(t2);
|
Int i2 = IntegerOfTerm(t2);
|
||||||
|
|
||||||
if (i2 == 0) goto zero_divisor;
|
if (i2 == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is " Int_FORMAT " rdiv 0", i1);
|
||||||
return Yap_gmq_rdiv_int_int(i1, i2);
|
return Yap_gmq_rdiv_int_int(i1, i2);
|
||||||
}
|
}
|
||||||
case (CELL)big_int_e:
|
case (CELL)big_int_e:
|
||||||
@ -252,6 +254,8 @@ p_rdiv(Term t1, Term t2) {
|
|||||||
case (CELL)big_int_e:
|
case (CELL)big_int_e:
|
||||||
switch (ETypeOfTerm(t2)) {
|
switch (ETypeOfTerm(t2)) {
|
||||||
case long_int_e:
|
case long_int_e:
|
||||||
|
if (IntegerOfTerm(t2) == 0)
|
||||||
|
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is ... rdiv 0");
|
||||||
/* I know the term is much larger, so: */
|
/* I know the term is much larger, so: */
|
||||||
return Yap_gmq_rdiv_big_int(t1, IntegerOfTerm(t2));
|
return Yap_gmq_rdiv_big_int(t1, IntegerOfTerm(t2));
|
||||||
case (CELL)big_int_e:
|
case (CELL)big_int_e:
|
||||||
@ -264,8 +268,6 @@ p_rdiv(Term t1, Term t2) {
|
|||||||
default:
|
default:
|
||||||
RERROR();
|
RERROR();
|
||||||
}
|
}
|
||||||
zero_divisor:
|
|
||||||
return Yap_ArithError(EVALUATION_ERROR_ZERO_DIVISOR, t2, "X is mod 0");
|
|
||||||
#else
|
#else
|
||||||
RERROR();
|
RERROR();
|
||||||
#endif
|
#endif
|
||||||
|
Reference in New Issue
Block a user