[Python-checkins] python/dist/src/Modules itertoolsmodule.c,1.2,1.3
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Thu, 06 Feb 2003 23:26:27 -0800
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv1779
Modified Files:
itertoolsmodule.c
Log Message:
* Eliminated tuple re-use in imap(). Doing it correctly made the code
too hard to read.
* Simplified previous changes to izip() to make it easier to read.
Index: itertoolsmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/itertoolsmodule.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** itertoolsmodule.c 7 Feb 2003 05:32:57 -0000 1.2
--- itertoolsmodule.c 7 Feb 2003 07:26:25 -0000 1.3
***************
*** 638,642 ****
PyObject_HEAD
PyObject *iters;
- PyObject *argtuple;
PyObject *func;
} imapobject;
--- 638,641 ----
***************
*** 647,651 ****
imap_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
! PyObject *it, *iters, *argtuple, *func;
imapobject *lz;
int numargs, i;
--- 646,650 ----
imap_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
{
! PyObject *it, *iters, *func;
imapobject *lz;
int numargs, i;
***************
*** 662,682 ****
return NULL;
- argtuple = PyTuple_New(numargs-1);
- if (argtuple == NULL) {
- Py_DECREF(iters);
- return NULL;
- }
-
for (i=1 ; i<numargs ; i++) {
/* Get iterator. */
it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
if (it == NULL) {
- Py_DECREF(argtuple);
Py_DECREF(iters);
return NULL;
}
PyTuple_SET_ITEM(iters, i-1, it);
- Py_INCREF(Py_None);
- PyTuple_SET_ITEM(argtuple, i-1, Py_None);
}
--- 661,672 ----
***************
*** 684,693 ****
lz = (imapobject *)type->tp_alloc(type, 0);
if (lz == NULL) {
- Py_DECREF(argtuple);
Py_DECREF(iters);
return NULL;
}
lz->iters = iters;
- lz->argtuple = argtuple;
func = PyTuple_GET_ITEM(args, 0);
Py_INCREF(func);
--- 674,681 ----
***************
*** 701,705 ****
{
PyObject_GC_UnTrack(lz);
- Py_XDECREF(lz->argtuple);
Py_XDECREF(lz->iters);
Py_XDECREF(lz->func);
--- 689,692 ----
***************
*** 717,725 ****
return err;
}
- if (lz->argtuple) {
- err = visit(lz->argtuple, arg);
- if (err)
- return err;
- }
if (lz->func) {
err = visit(lz->func, arg);
--- 704,707 ----
***************
*** 759,795 ****
{
PyObject *val;
! PyObject *argtuple=lz->argtuple;
int numargs, i;
numargs = PyTuple_Size(lz->iters);
! if (lz->func == Py_None) {
! argtuple = PyTuple_New(numargs);
! if (argtuple == NULL)
! return NULL;
! for (i=0 ; i<numargs ; i++) {
! val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
! if (val == NULL) {
! Py_DECREF(argtuple);
! return NULL;
! }
! PyTuple_SET_ITEM(argtuple, i, val);
! }
! return argtuple;
! } else {
! if (argtuple->ob_refcnt > 1) {
! argtuple = PyTuple_New(numargs);
! if (argtuple == NULL)
! return NULL;
! }
! for (i=0 ; i<numargs ; i++) {
! val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
! if (val == NULL)
! return NULL;
! Py_DECREF(PyTuple_GET_ITEM(argtuple, i));
! PyTuple_SET_ITEM(argtuple, i, val);
}
! return PyObject_Call(lz->func, argtuple, NULL);
}
}
--- 741,766 ----
{
PyObject *val;
! PyObject *argtuple;
! PyObject *result;
int numargs, i;
numargs = PyTuple_Size(lz->iters);
! argtuple = PyTuple_New(numargs);
! if (argtuple == NULL)
! return NULL;
! for (i=0 ; i<numargs ; i++) {
! val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
! if (val == NULL) {
! Py_DECREF(argtuple);
! return NULL;
}
! PyTuple_SET_ITEM(argtuple, i, val);
}
+ if (lz->func == Py_None)
+ return argtuple;
+ result = PyObject_Call(lz->func, argtuple, NULL);
+ Py_DECREF(argtuple);
+ return result;
}
***************
*** 1332,1361 ****
PyObject *item;
- assert(result->ob_refcnt >= 1);
if (result->ob_refcnt == 1) {
for (i=0 ; i < tuplesize ; i++) {
Py_DECREF(PyTuple_GET_ITEM(result, i));
! PyTuple_SET_ITEM(result, i, NULL);
}
Py_INCREF(result);
} else {
- Py_DECREF(result);
result = PyTuple_New(tuplesize);
if (result == NULL)
return NULL;
! Py_INCREF(result);
! lz->result = result;
! }
! assert(lz->result == result);
! assert(result->ob_refcnt == 2);
!
! for (i=0 ; i < tuplesize ; i++) {
! it = PyTuple_GET_ITEM(lz->ittuple, i);
! item = PyIter_Next(it);
! if (item == NULL) {
! Py_DECREF(result);
! return NULL;
}
- PyTuple_SET_ITEM(result, i, item);
}
return result;
--- 1303,1329 ----
PyObject *item;
if (result->ob_refcnt == 1) {
for (i=0 ; i < tuplesize ; i++) {
+ it = PyTuple_GET_ITEM(lz->ittuple, i);
+ item = PyIter_Next(it);
+ if (item == NULL)
+ return NULL;
Py_DECREF(PyTuple_GET_ITEM(result, i));
! PyTuple_SET_ITEM(result, i, item);
}
Py_INCREF(result);
} else {
result = PyTuple_New(tuplesize);
if (result == NULL)
return NULL;
! for (i=0 ; i < tuplesize ; i++) {
! it = PyTuple_GET_ITEM(lz->ittuple, i);
! item = PyIter_Next(it);
! if (item == NULL) {
! Py_DECREF(result);
! return NULL;
! }
! PyTuple_SET_ITEM(result, i, item);
}
}
return result;