Merge 65215: convert uses of int to Py_Ssize_t.

This commit is contained in:
Raymond Hettinger 2008-07-24 19:38:45 +00:00
parent 6e6f59b1c9
commit d4d478d1c6
1 changed files with 15 additions and 8 deletions

View File

@ -4,10 +4,10 @@
typedef struct { typedef struct {
PyObject_HEAD PyObject_HEAD
long en_index; /* current index of enumeration */ Py_ssize_t en_index; /* current index of enumeration */
PyObject* en_sit; /* secondary iterator of enumeration */ PyObject* en_sit; /* secondary iterator of enumeration */
PyObject* en_result; /* result tuple */ PyObject* en_result; /* result tuple */
PyObject* en_longindex; /* index for sequences >= LONG_MAX */ PyObject* en_longindex; /* index for sequences >= PY_SSIZE_T_MAX */
} enumobject; } enumobject;
static PyObject * static PyObject *
@ -25,14 +25,21 @@ enum_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
en = (enumobject *)type->tp_alloc(type, 0); en = (enumobject *)type->tp_alloc(type, 0);
if (en == NULL) if (en == NULL)
return NULL; return NULL;
if (start) { if (start != NULL) {
start = PyNumber_Index(start); start = PyNumber_Index(start);
if (start == NULL) { if (start == NULL) {
Py_DECREF(en); Py_DECREF(en);
return NULL; return NULL;
} }
en->en_index = LONG_MAX; en->en_index = PyLong_AsSsize_t(start);
if (en->en_index == -1 && PyErr_Occurred()) {
PyErr_Clear();
en->en_index = PY_SSIZE_T_MAX;
en->en_longindex = start; en->en_longindex = start;
} else {
en->en_longindex = NULL;
Py_DECREF(start);
}
} else { } else {
en->en_index = 0; en->en_index = 0;
en->en_longindex = NULL; en->en_longindex = NULL;
@ -78,7 +85,7 @@ enum_next_long(enumobject *en, PyObject* next_item)
PyObject *stepped_up; PyObject *stepped_up;
if (en->en_longindex == NULL) { if (en->en_longindex == NULL) {
en->en_longindex = PyLong_FromLong(LONG_MAX); en->en_longindex = PyLong_FromSsize_t(PY_SSIZE_T_MAX);
if (en->en_longindex == NULL) if (en->en_longindex == NULL)
return NULL; return NULL;
} }
@ -123,10 +130,10 @@ enum_next(enumobject *en)
if (next_item == NULL) if (next_item == NULL)
return NULL; return NULL;
if (en->en_index == LONG_MAX) if (en->en_index == PY_SSIZE_T_MAX)
return enum_next_long(en, next_item); return enum_next_long(en, next_item);
next_index = PyLong_FromLong(en->en_index); next_index = PyLong_FromSsize_t(en->en_index);
if (next_index == NULL) { if (next_index == NULL) {
Py_DECREF(next_item); Py_DECREF(next_item);
return NULL; return NULL;