diff Modules/itertoolsmodule.c @ 57526:6536a1cd47cd

Issue 7410: deepcopy of itertools.count() reset the count.
author Raymond Hettinger <python@rcn.com>
date Mon, 30 Nov 2009 22:02:31 +0000
parents a790f84fbafa
children cab14be0ada1
line wrap: on
line diff
--- a/Modules/itertoolsmodule.c	Mon Nov 30 21:53:52 2009 +0000
+++ b/Modules/itertoolsmodule.c	Mon Nov 30 22:02:31 2009 +0000
@@ -3049,6 +3049,22 @@
 								lz->long_cnt, lz->long_step);
 }
 
+static PyObject *
+count_reduce(countobject *lz)
+{
+	if (lz->cnt == PY_SSIZE_T_MAX)
+		return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->long_cnt, lz->long_step);
+	return Py_BuildValue("O(n)", Py_TYPE(lz), lz->cnt);
+}
+
+PyDoc_STRVAR(count_reduce_doc, "Return state information for pickling.");
+
+static PyMethodDef count_methods[] = {
+	{"__reduce__",	(PyCFunction)count_reduce,	METH_NOARGS,
+	 count_reduce_doc},
+	{NULL,		NULL}	/* sentinel */
+};
+
 PyDoc_STRVAR(count_doc,
 			 "count(start=0, step=1]) --> count object\n\
 \n\
@@ -3090,7 +3106,7 @@
 	0,				/* tp_weaklistoffset */
 	PyObject_SelfIter,		/* tp_iter */
 	(iternextfunc)count_next,	/* tp_iternext */
-	0,				/* tp_methods */
+	count_methods,				/* tp_methods */
 	0,				/* tp_members */
 	0,				/* tp_getset */
 	0,				/* tp_base */