mirror of
https://github.com/python/cpython
synced 2026-09-29 11:35:29 +03:00
Improved exceptions.
This commit is contained in:
parent
9a9faddbcb
commit
3a62845094
1 changed files with 15 additions and 13 deletions
|
|
@ -39,16 +39,18 @@ intobject TrueObject = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
err_ovf()
|
err_ovf(msg)
|
||||||
|
char *msg;
|
||||||
{
|
{
|
||||||
err_setstr(OverflowError, "integer overflow");
|
err_setstr(OverflowError, msg);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static object *
|
static object *
|
||||||
err_zdiv()
|
err_zdiv(msg)
|
||||||
|
char *msg;
|
||||||
{
|
{
|
||||||
err_setstr(ZeroDivisionError, "integer division by zero");
|
err_setstr(ZeroDivisionError, msg);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -162,7 +164,7 @@ int_add(v, w)
|
||||||
b = ((intobject *)w) -> ob_ival;
|
b = ((intobject *)w) -> ob_ival;
|
||||||
x = a + b;
|
x = a + b;
|
||||||
if ((x^a) < 0 && (x^b) < 0)
|
if ((x^a) < 0 && (x^b) < 0)
|
||||||
return err_ovf();
|
return err_ovf("integer addition");
|
||||||
return newintobject(x);
|
return newintobject(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -180,7 +182,7 @@ int_sub(v, w)
|
||||||
b = ((intobject *)w) -> ob_ival;
|
b = ((intobject *)w) -> ob_ival;
|
||||||
x = a - b;
|
x = a - b;
|
||||||
if ((x^a) < 0 && (x^~b) < 0)
|
if ((x^a) < 0 && (x^~b) < 0)
|
||||||
return err_ovf();
|
return err_ovf("integer subtraction");
|
||||||
return newintobject(x);
|
return newintobject(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -199,7 +201,7 @@ int_mul(v, w)
|
||||||
b = ((intobject *)w) -> ob_ival;
|
b = ((intobject *)w) -> ob_ival;
|
||||||
x = (double)a * (double)b;
|
x = (double)a * (double)b;
|
||||||
if (x > 0x7fffffff || x < (double) (long) 0x80000000)
|
if (x > 0x7fffffff || x < (double) (long) 0x80000000)
|
||||||
return err_ovf();
|
return err_ovf("integer multiplication");
|
||||||
return newintobject(a * b);
|
return newintobject(a * b);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -214,7 +216,7 @@ int_div(v, w)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (((intobject *)w) -> ob_ival == 0)
|
if (((intobject *)w) -> ob_ival == 0)
|
||||||
return err_zdiv();
|
return err_zdiv("integer division");
|
||||||
a = v->ob_ival;
|
a = v->ob_ival;
|
||||||
b = ((intobject *)w) -> ob_ival;
|
b = ((intobject *)w) -> ob_ival;
|
||||||
/* Make sure we always truncate towards zero */
|
/* Make sure we always truncate towards zero */
|
||||||
|
|
@ -244,7 +246,7 @@ int_rem(v, w)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (((intobject *)w) -> ob_ival == 0)
|
if (((intobject *)w) -> ob_ival == 0)
|
||||||
return err_zdiv();
|
return err_zdiv("integer remainder");
|
||||||
/* XXX Need to fix this similar to int_div */
|
/* XXX Need to fix this similar to int_div */
|
||||||
return newintobject(v->ob_ival % ((intobject *)w) -> ob_ival);
|
return newintobject(v->ob_ival % ((intobject *)w) -> ob_ival);
|
||||||
}
|
}
|
||||||
|
|
@ -263,7 +265,7 @@ int_divmod(x, y)
|
||||||
xi = x->ob_ival;
|
xi = x->ob_ival;
|
||||||
yi = getintvalue(y);
|
yi = getintvalue(y);
|
||||||
if (yi == 0)
|
if (yi == 0)
|
||||||
return err_zdiv();
|
return err_zdiv("integer divmod()");
|
||||||
if (yi < 0) {
|
if (yi < 0) {
|
||||||
xdivy = -xi / -yi;
|
xdivy = -xi / -yi;
|
||||||
}
|
}
|
||||||
|
|
@ -302,7 +304,7 @@ int_pow(v, w)
|
||||||
iv = v->ob_ival;
|
iv = v->ob_ival;
|
||||||
iw = ((intobject *)w)->ob_ival;
|
iw = ((intobject *)w)->ob_ival;
|
||||||
if (iw < 0) {
|
if (iw < 0) {
|
||||||
err_setstr(RuntimeError, "integer to the negative power");
|
err_setstr(ValueError, "integer to the negative power");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
ix = 1;
|
ix = 1;
|
||||||
|
|
@ -312,7 +314,7 @@ int_pow(v, w)
|
||||||
if (iv == 0)
|
if (iv == 0)
|
||||||
break; /* 0 to some power -- avoid ix / 0 */
|
break; /* 0 to some power -- avoid ix / 0 */
|
||||||
if (ix / iv != prev)
|
if (ix / iv != prev)
|
||||||
return err_ovf();
|
return err_ovf("integer pow()");
|
||||||
}
|
}
|
||||||
return newintobject(ix);
|
return newintobject(ix);
|
||||||
}
|
}
|
||||||
|
|
@ -325,7 +327,7 @@ int_neg(v)
|
||||||
a = v->ob_ival;
|
a = v->ob_ival;
|
||||||
x = -a;
|
x = -a;
|
||||||
if (a < 0 && x < 0)
|
if (a < 0 && x < 0)
|
||||||
return err_ovf();
|
return err_ovf("integer negation");
|
||||||
return newintobject(x);
|
return newintobject(x);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue