diff Modules/_collectionsmodule.c @ 55537:5345e3bc9e41

Issue 6637: defaultdict.copy() failed with an empty factory.
author Raymond Hettinger <python@rcn.com>
date Tue, 04 Aug 2009 19:16:39 +0000
parents 21850d6d5b4d
children bc716d8f4345 816303a07762
line wrap: on
line diff
--- a/Modules/_collectionsmodule.c	Mon Aug 03 17:50:20 2009 +0000
+++ b/Modules/_collectionsmodule.c	Tue Aug 04 19:16:39 2009 +0000
@@ -1170,6 +1170,9 @@
 	   whose class constructor has the same signature.  Subclasses that
 	   define a different constructor signature must override copy().
 	*/
+
+	if (dd->default_factory == NULL)
+		return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd), Py_None, dd, NULL);
 	return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd),
 					    dd->default_factory, dd, NULL);
 }
@@ -1316,7 +1319,7 @@
 		Py_ssize_t n = PyTuple_GET_SIZE(args);
 		if (n > 0) {
 			newdefault = PyTuple_GET_ITEM(args, 0);
-			if (!PyCallable_Check(newdefault)) {
+			if (!PyCallable_Check(newdefault) && newdefault != Py_None) {
 				PyErr_SetString(PyExc_TypeError,
 					"first argument must be callable");                           
 				return -1;