]> granicus.if.org Git - python/commitdiff
Remove the next() method -- one is supplied automatically by
authorGuido van Rossum <guido@python.org>
Tue, 16 Jul 2002 21:02:42 +0000 (21:02 +0000)
committerGuido van Rossum <guido@python.org>
Tue, 16 Jul 2002 21:02:42 +0000 (21:02 +0000)
PyType_Ready() because the tp_iternext slot is set (fortunately,
because using the tp_iternext implementation for the the next()
implementation is buggy).  Also changed the allocation order in
enum_next() so that the underlying iterator is only moved ahead when
we have successfully allocated the result tuple and index.

Objects/enumobject.c

index 148ac3c74208db37b71b218432b98555a3da82f9..f69a002a2ce673e3569dffbc361d5a026499f4f9 100644 (file)
@@ -54,25 +54,26 @@ enum_next(enumobject *en)
 {
        PyObject *result;
        PyObject *next_index;
+       PyObject *next_item;
 
-       PyObject *next_item = PyIter_Next(en->en_sit);
-       if (next_item == NULL)
+       result = PyTuple_New(2);
+       if (result == NULL)
                return NULL;
 
-       result = PyTuple_New(2);
-       if (result == NULL) {
-               Py_DECREF(next_item);
+       next_index = PyInt_FromLong(en->en_index);
+       if (next_index == NULL) {
+               Py_DECREF(result);
                return NULL;
        }
+       PyTuple_SET_ITEM(result, 0, next_index);
 
-       next_index = PyInt_FromLong(en->en_index++);
-       if (next_index == NULL) {
-               Py_DECREF(next_item);
+       next_item = PyIter_Next(en->en_sit);
+       if (next_item == NULL) {
                Py_DECREF(result);
                return NULL;
        }
 
-       PyTuple_SET_ITEM(result, 0, next_index);
+       en->en_index++;
        PyTuple_SET_ITEM(result, 1, next_item);
        return result;
 }
@@ -84,12 +85,6 @@ enum_getiter(PyObject *en)
        return en;
 }
 
-static PyMethodDef enum_methods[] = {
-       {"next",    (PyCFunction)enum_next, METH_NOARGS,
-        "return the next (index, value) pair, or raise StopIteration"},
-       {NULL,      NULL}       /* sentinel */
-};
-
 PyDoc_STRVAR(enum_doc,
 "enumerate(iterable) -> create an enumerating-iterator");
 
@@ -124,7 +119,7 @@ PyTypeObject PyEnum_Type = {
        0,                              /* tp_weaklistoffset */
        (getiterfunc)enum_getiter,      /* tp_iter */
        (iternextfunc)enum_next,        /* tp_iternext */
-       enum_methods,                   /* tp_methods */
+       0,                              /* tp_methods */
        0,                              /* tp_members */
        0,                              /* tp_getset */
        0,                              /* tp_base */