diff --git a/Modules/itertoolsmodule.c b/Modules/itertoolsmodule.c --- a/Modules/itertoolsmodule.c +++ b/Modules/itertoolsmodule.c @@ -401,7 +401,7 @@ typedef struct { PyObject_HEAD PyObject *it; - int numread; + Py_ssize_t numread; PyObject *nextlink; PyObject *(values[LINKCELLS]); } teedataobject; @@ -409,7 +409,7 @@ typedef struct { PyObject_HEAD teedataobject *dataobj; - int index; + Py_ssize_t index; PyObject *weakreflist; } teeobject; @@ -442,7 +442,7 @@ } static PyObject * -teedataobject_getitem(teedataobject *tdo, int i) +teedataobject_getitem(teedataobject *tdo, Py_ssize_t i) { PyObject *value; @@ -465,7 +465,7 @@ static int teedataobject_traverse(teedataobject *tdo, visitproc visit, void * arg) { - int i; + Py_ssize_t i; Py_VISIT(tdo->it); for (i = 0; i < tdo->numread; i++) Py_VISIT(tdo->values[i]); @@ -489,7 +489,7 @@ static int teedataobject_clear(teedataobject *tdo) { - int i; + Py_ssize_t i; PyObject *tmp; Py_CLEAR(tdo->it); @@ -512,7 +512,7 @@ static PyObject * teedataobject_reduce(teedataobject *tdo) { - int i; + Py_ssize_t i; /* create a temporary list of already iterated values */ PyObject *values = PyList_New(tdo->numread); if (!values) @@ -550,8 +550,7 @@ tdo->values[i] = PyList_GET_ITEM(values, i); Py_INCREF(tdo->values[i]); } - /* len <= LINKCELLS < INT_MAX */ - tdo->numread = Py_SAFE_DOWNCAST(len, Py_ssize_t, int); + tdo->numread = len; if (len == LINKCELLS) { if (next != Py_None) { @@ -741,8 +740,8 @@ tee_setstate(teeobject *to, PyObject *state) { teedataobject *tdo; - int index; - if (!PyArg_ParseTuple(state, "O!i", &teedataobject_type, &tdo, &index)) + Py_ssize_t index; + if (!PyArg_ParseTuple(state, "O!n", &teedataobject_type, &tdo, &index)) return NULL; if (index < 0 || index > LINKCELLS) { PyErr_SetString(PyExc_ValueError, "Index out of range");