#2831: add start argument to enumerate(). Patch by Scott Dial and me.

This commit is contained in:
Georg Brandl 2008-05-13 19:04:54 +00:00
parent ef9764f1a4
commit 913835763a
3 changed files with 45 additions and 11 deletions

View file

@ -15,18 +15,36 @@ enum_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
enumobject *en;
PyObject *seq = NULL;
static char *kwlist[] = {"sequence", 0};
PyObject *start = NULL;
static char *kwlist[] = {"sequence", "start", 0};
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O:enumerate", kwlist,
&seq))
if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:enumerate", kwlist,
&seq, &start))
return NULL;
en = (enumobject *)type->tp_alloc(type, 0);
if (en == NULL)
return NULL;
en->en_index = 0;
if (start) {
start = PyNumber_Index(start);
if (start == NULL) {
Py_DECREF(en);
return NULL;
}
if (PyLong_Check(start)) {
en->en_index = LONG_MAX;
en->en_longindex = start;
} else {
assert(PyInt_Check(start));
en->en_index = PyInt_AsLong(start);
en->en_longindex = NULL;
Py_DECREF(start);
}
} else {
en->en_index = 0;
en->en_longindex = NULL;
}
en->en_sit = PyObject_GetIter(seq);
en->en_longindex = NULL;
if (en->en_sit == NULL) {
Py_DECREF(en);
return NULL;