Mercurial > cpython-lru_cache-weakref
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;
