More bug 460020. When I is a subclass of int, disable the +I(whatever),

I(0) << whatever, I(0) >> whatever, I(whatever) << 0 and I(whatever) >> 0
optimizations.
This commit is contained in:
Tim Peters 2001-09-11 21:44:14 +00:00
parent 95fefc7a7a
commit 73a1dfe367
2 changed files with 15 additions and 10 deletions

View file

@ -681,8 +681,12 @@ int_neg(PyIntObject *v)
static PyObject *
int_pos(PyIntObject *v)
{
Py_INCREF(v);
return (PyObject *)v;
if (PyInt_CheckExact(v)) {
Py_INCREF(v);
return (PyObject *)v;
}
else
return PyInt_FromLong(v->ob_ival);
}
static PyObject *
@ -716,10 +720,8 @@ int_lshift(PyIntObject *v, PyIntObject *w)
PyErr_SetString(PyExc_ValueError, "negative shift count");
return NULL;
}
if (a == 0 || b == 0) {
Py_INCREF(v);
return (PyObject *) v;
}
if (a == 0 || b == 0)
return int_pos(v);
if (b >= LONG_BIT) {
return PyInt_FromLong(0L);
}
@ -737,10 +739,8 @@ int_rshift(PyIntObject *v, PyIntObject *w)
PyErr_SetString(PyExc_ValueError, "negative shift count");
return NULL;
}
if (a == 0 || b == 0) {
Py_INCREF(v);
return (PyObject *) v;
}
if (a == 0 || b == 0)
return int_pos(v);
if (b >= LONG_BIT) {
if (a < 0)
a = -1;