From 17a74c395eafa98e7dcdeaa8a48110e95b142b66 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 9 Feb 2008 04:37:49 +0000 Subject: [PATCH] Add -3 warnings that set.copy(), dict.copy(), and defaultdict.copy() will go away in Py3.x --- Modules/_collectionsmodule.c | 14 ++++++++++++-- Objects/dictobject.c | 4 ++++ Objects/setobject.c | 16 +++++++++++++++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 67700de728..9cdabdf3d1 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -1186,12 +1186,22 @@ defdict_copy(defdictobject *dd) { /* This calls the object's class. That only works for subclasses whose class constructor has the same signature. Subclasses that - define a different constructor signature must override copy(). + define a different constructor signature must override __copy__(). */ return PyObject_CallFunctionObjArgs((PyObject*)Py_TYPE(dd), dd->default_factory, dd, NULL); } +static PyObject * +defdict_copy_method(defdictobject *dd) +{ + if (Py_Py3kWarningFlag && + PyErr_Warn(PyExc_DeprecationWarning, + "defaultdict.copy() not supported in 3.x") < 0) + return NULL; + return defdict_copy(dd); +} + static PyObject * defdict_reduce(defdictobject *dd) { @@ -1241,7 +1251,7 @@ defdict_reduce(defdictobject *dd) static PyMethodDef defdict_methods[] = { {"__missing__", (PyCFunction)defdict_missing, METH_O, defdict_missing_doc}, - {"copy", (PyCFunction)defdict_copy, METH_NOARGS, + {"copy", (PyCFunction)defdict_copy_method, METH_NOARGS, defdict_copy_doc}, {"__copy__", (PyCFunction)defdict_copy, METH_NOARGS, defdict_copy_doc}, diff --git a/Objects/dictobject.c b/Objects/dictobject.c index eaa490e320..165221e8d4 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -1528,6 +1528,10 @@ PyDict_Merge(PyObject *a, PyObject *b, int override) static PyObject * dict_copy(register PyDictObject *mp) { + if (Py_Py3kWarningFlag && + PyErr_Warn(PyExc_DeprecationWarning, + "dict.copy() not supported in 3.x") < 0) + return NULL; return PyDict_Copy((PyObject*)mp); } diff --git a/Objects/setobject.c b/Objects/setobject.c index cc2c2ee868..3869b3b6be 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -1130,9 +1130,23 @@ set_copy(PySetObject *so) return make_new_set(Py_TYPE(so), (PyObject *)so); } +static PyObject * +set_copy_method(PySetObject *so) +{ + if (Py_Py3kWarningFlag && + PyErr_Warn(PyExc_DeprecationWarning, + "set.copy() not supported in 3.x") < 0) + return NULL; + return make_new_set(Py_TYPE(so), (PyObject *)so); +} + static PyObject * frozenset_copy(PySetObject *so) { + if (Py_Py3kWarningFlag && + PyErr_Warn(PyExc_DeprecationWarning, + "frozenset.copy() not supported in 3.x") < 0) + return NULL; if (PyFrozenSet_CheckExact(so)) { Py_INCREF(so); return (PyObject *)so; @@ -1911,7 +1925,7 @@ static PyMethodDef set_methods[] = { clear_doc}, {"__contains__",(PyCFunction)set_direct_contains, METH_O | METH_COEXIST, contains_doc}, - {"copy", (PyCFunction)set_copy, METH_NOARGS, + {"copy", (PyCFunction)set_copy_method, METH_NOARGS, copy_doc}, {"discard", (PyCFunction)set_discard, METH_O, discard_doc}, -- 2.50.0