]> granicus.if.org Git - python/commitdiff
Add -3 warnings that set.copy(), dict.copy(), and defaultdict.copy() will go away...
authorRaymond Hettinger <python@rcn.com>
Sat, 9 Feb 2008 04:37:49 +0000 (04:37 +0000)
committerRaymond Hettinger <python@rcn.com>
Sat, 9 Feb 2008 04:37:49 +0000 (04:37 +0000)
Modules/_collectionsmodule.c
Objects/dictobject.c
Objects/setobject.c

index 67700de72858f80225b145be00c2b76668b41d10..9cdabdf3d12d7a1f8b4980d9f050c2b271240f03 100644 (file)
@@ -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},
index eaa490e320d41b9a270e4c9ed5afc77cf3410815..165221e8d48cdda8e18fc2b75d4900c674a8b5d3 100644 (file)
@@ -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);
 }
 
index cc2c2ee8681964cd4a9d5ee2485aa01746f83f98..3869b3b6be4eaa21a74cc9e713ec3369379bf1e7 100644 (file)
@@ -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},