Commit f0cba67d authored by Victor Stinner's avatar Victor Stinner

Backed out changeset 70f88b097f60 (map_next)

parent e62b8526
...@@ -1156,43 +1156,27 @@ map_traverse(mapobject *lz, visitproc visit, void *arg) ...@@ -1156,43 +1156,27 @@ map_traverse(mapobject *lz, visitproc visit, void *arg)
static PyObject * static PyObject *
map_next(mapobject *lz) map_next(mapobject *lz)
{ {
PyObject *small_stack[5]; PyObject *val;
PyObject **stack; PyObject *argtuple;
Py_ssize_t niters, nargs, i; PyObject *result;
PyObject *result = NULL; Py_ssize_t numargs, i;
niters = PyTuple_GET_SIZE(lz->iters); numargs = PyTuple_GET_SIZE(lz->iters);
if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) { argtuple = PyTuple_New(numargs);
stack = small_stack; if (argtuple == NULL)
} return NULL;
else {
stack = PyMem_Malloc(niters * sizeof(PyObject*));
if (stack == NULL) {
PyErr_NoMemory();
return NULL;
}
}
nargs = 0; for (i=0 ; i<numargs ; i++) {
for (i=0; i < niters; i++) {
PyObject *it = PyTuple_GET_ITEM(lz->iters, i); PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
PyObject *val = Py_TYPE(it)->tp_iternext(it); val = Py_TYPE(it)->tp_iternext(it);
if (val == NULL) { if (val == NULL) {
goto exit; Py_DECREF(argtuple);
return NULL;
} }
stack[i] = val; PyTuple_SET_ITEM(argtuple, i, val);
nargs++;
}
result = _PyObject_FastCall(lz->func, stack, nargs);
exit:
for (i=0; i < nargs; i++) {
Py_DECREF(stack[i]);
}
if (stack != small_stack) {
PyMem_Free(stack);
} }
result = PyObject_Call(lz->func, argtuple, NULL);
Py_DECREF(argtuple);
return result; return result;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment