summaryrefslogtreecommitdiff
path: root/Objects/listobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r--Objects/listobject.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c
index ed6ed3e561..2f2097d0d5 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -715,6 +715,7 @@ listextend(PyListObject *self, PyObject *b)
int n; /* guess for size of b */
int mn; /* m + n */
int i;
+ PyObject *(*iternext)(PyObject *);
/* Special cases:
1) lists and tuples which can use PySequence_Fast ops
@@ -732,6 +733,7 @@ listextend(PyListObject *self, PyObject *b)
it = PyObject_GetIter(b);
if (it == NULL)
return NULL;
+ iternext = *it->ob_type->tp_iternext;
/* Guess a result list size. */
n = PyObject_Size(b);
@@ -747,10 +749,14 @@ listextend(PyListObject *self, PyObject *b)
/* Run iterator to exhaustion. */
for (i = m; ; i++) {
- PyObject *item = PyIter_Next(it);
+ PyObject *item = iternext(it);
if (item == NULL) {
- if (PyErr_Occurred())
- goto error;
+ if (PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches(PyExc_StopIteration))
+ PyErr_Clear();
+ else
+ goto error;
+ }
break;
}
if (i < mn)