[Python-3000-checkins] r65221 - python/branches/py3k/Objects/enumobject.c

raymond.hettinger python-3000-checkins at python.org
Thu Jul 24 21:38:46 CEST 2008


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;


More information about the Python-3000-checkins mailing list