Consolidate the int and long sequence repeat code. Before the change,

integers checked for integer overflow but longs did not.
This commit is contained in:
Neil Schemenauer 2002-12-30 20:19:02 +00:00
parent 9911fc4a41
commit 0df295889c
2 changed files with 0 additions and 65 deletions

View file

@ -354,14 +354,6 @@ one that can lose catastrophic amounts of information, it's the native long
product that must have overflowed.
*/
/* Return true if the sq_repeat method should be used */
#define USE_SQ_REPEAT(o) (!PyInt_Check(o) && \
o->ob_type->tp_as_sequence && \
o->ob_type->tp_as_sequence->sq_repeat && \
!(o->ob_type->tp_as_number && \
o->ob_type->tp_flags & Py_TPFLAGS_CHECKTYPES && \
o->ob_type->tp_as_number->nb_multiply))
static PyObject *
int_mul(PyObject *v, PyObject *w)
{
@ -370,44 +362,6 @@ int_mul(PyObject *v, PyObject *w)
double doubled_longprod; /* (double)longprod */
double doubleprod; /* (double)a * (double)b */
if (USE_SQ_REPEAT(v)) {
repeat:
/* sequence * int */
a = PyInt_AsLong(w);
#if LONG_MAX != INT_MAX
if (a > INT_MAX) {
PyErr_SetString(PyExc_ValueError,
"sequence repeat count too large");
return NULL;
}
else if (a < INT_MIN)
a = INT_MIN;
/* XXX Why don't I either
- set a to -1 whenever it's negative (after all,
sequence repeat usually treats negative numbers
as zero(); or
- raise an exception when it's less than INT_MIN?
I'm thinking about a hypothetical use case where some
sequence type might use a negative value as a flag of
some kind. In those cases I don't want to break the
code by mapping all negative values to -1. But I also
don't want to break e.g. []*(-sys.maxint), which is
perfectly safe, returning []. As a compromise, I do
map out-of-range negative values.
*/
#endif
return (*v->ob_type->tp_as_sequence->sq_repeat)(v, a);
}
if (USE_SQ_REPEAT(w)) {
PyObject *tmp = v;
v = w;
w = tmp;
goto repeat;
}
CONVERT_TO_LONG(v, a);
CONVERT_TO_LONG(w, b);
longprod = a * b;