Discussion:
[Python-3000-checkins] r65221 - python/branches/py3k/Objects/enumobject.c
raymond.hettinger
2008-07-24 19:38:46 UTC
Permalink
Author: raymond.hettinger
Date: Thu Jul 24 21:38:45 2008
New Revision: 65221

Log:
Merge 65215: convert uses of int to Py_Ssize_t.

Modified:
python/branches/py3k/Objects/enumobject.c

Modified: python/branches/py3k/Objects/enumobject.c
==============================================================================
--- python/branches/py3k/Objects/enumobject.c (original)
+++ python/branches/py3k/Objects/enumobject.c Thu Jul 24 21:38:45 2008
@@ -4,10 +4,10 @@

typedef struct {
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_result; /* result tuple */
- PyObject* en_longindex; /* index for sequences >= LONG_MAX */
+ PyObject* en_longindex; /* index for sequences >= PY_SSIZE_T_MAX */
} enumobject;

static PyObject *
@@ -25,14 +25,21 @@
en = (enumobject *)type->tp_alloc(type, 0);
if (en == NULL)
return NULL;
- if (start) {
+ if (start != NULL) {
start = PyNumber_Index(start);
if (start == NULL) {
Py_DECREF(en);
return NULL;
}
- en->en_index = LONG_MAX;
- en->en_longindex = start;
+ 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;
+ } else {
+ en->en_longindex = NULL;
+ Py_DECREF(start);
+ }
} else {
en->en_index = 0;
en->en_longindex = NULL;
@@ -78,7 +85,7 @@
PyObject *stepped_up;

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)
return NULL;
}
@@ -123,10 +130,10 @@
if (next_item == NULL)
return NULL;

- if (en->en_index == LONG_MAX)
+ if (en->en_index == PY_SSIZE_T_MAX)
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) {
Py_DECREF(next_item);
return NULL;

Loading...