[Python-checkins] cpython: use new generic __dict__ descriptor implementations

benjamin.peterson python-checkins at python.org
Mon Feb 20 02:04:45 CET 2012


http://hg.python.org/cpython/rev/f029312764b4
changeset:   75051:f029312764b4
user:        Benjamin Peterson <benjamin at python.org>
date:        Sun Feb 19 20:02:57 2012 -0500
summary:
  use new generic __dict__ descriptor implementations

files:
  Modules/_functoolsmodule.c |  38 +---------------
  Modules/_io/iobase.c       |  15 +-----
  Objects/exceptions.c       |  32 +-------------
  Objects/funcobject.c       |  62 +------------------------
  4 files changed, 6 insertions(+), 141 deletions(-)


diff --git a/Modules/_functoolsmodule.c b/Modules/_functoolsmodule.c
--- a/Modules/_functoolsmodule.c
+++ b/Modules/_functoolsmodule.c
@@ -155,44 +155,8 @@
     {NULL}  /* Sentinel */
 };
 
-static PyObject *
-partial_get_dict(partialobject *pto)
-{
-    if (pto->dict == NULL) {
-        pto->dict = PyDict_New();
-        if (pto->dict == NULL)
-            return NULL;
-    }
-    Py_INCREF(pto->dict);
-    return pto->dict;
-}
-
-static int
-partial_set_dict(partialobject *pto, PyObject *value)
-{
-    PyObject *tmp;
-
-    /* It is illegal to del p.__dict__ */
-    if (value == NULL) {
-        PyErr_SetString(PyExc_TypeError,
-                        "a partial object's dictionary may not be deleted");
-        return -1;
-    }
-    /* Can only set __dict__ to a dictionary */
-    if (!PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "setting partial object's dictionary to a non-dict");
-        return -1;
-    }
-    tmp = pto->dict;
-    Py_INCREF(value);
-    pto->dict = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-
 static PyGetSetDef partial_getsetlist[] = {
-    {"__dict__", (getter)partial_get_dict, (setter)partial_set_dict},
+    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
     {NULL} /* Sentinel */
 };
 
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -159,19 +159,6 @@
     return PyBool_FromLong(IS_CLOSED(self));
 }
 
-static PyObject *
-iobase_get_dict(PyObject *self)
-{
-    PyObject **dictptr = _PyObject_GetDictPtr(self);
-    PyObject *dict;
-    assert(dictptr);
-    dict = *dictptr;
-    if (dict == NULL)
-        dict = *dictptr = PyDict_New();
-    Py_XINCREF(dict);
-    return dict;
-}
-
 PyObject *
 _PyIOBase_check_closed(PyObject *self, PyObject *args)
 {
@@ -714,7 +701,7 @@
 };
 
 static PyGetSetDef iobase_getset[] = {
-    {"__dict__", (getter)iobase_get_dict, NULL, NULL},
+    {"__dict__", PyObject_GenericGetDict, NULL, NULL},
     {"closed", (getter)iobase_closed_get, NULL, NULL},
     {NULL}
 };
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -177,36 +177,6 @@
    {NULL, NULL, 0, NULL},
 };
 
-
-static PyObject *
-BaseException_get_dict(PyBaseExceptionObject *self)
-{
-    if (self->dict == NULL) {
-        self->dict = PyDict_New();
-        if (!self->dict)
-            return NULL;
-    }
-    Py_INCREF(self->dict);
-    return self->dict;
-}
-
-static int
-BaseException_set_dict(PyBaseExceptionObject *self, PyObject *val)
-{
-    if (val == NULL) {
-        PyErr_SetString(PyExc_TypeError, "__dict__ may not be deleted");
-        return -1;
-    }
-    if (!PyDict_Check(val)) {
-        PyErr_SetString(PyExc_TypeError, "__dict__ must be a dictionary");
-        return -1;
-    }
-    Py_CLEAR(self->dict);
-    Py_INCREF(val);
-    self->dict = val;
-    return 0;
-}
-
 static PyObject *
 BaseException_get_args(PyBaseExceptionObject *self)
 {
@@ -320,7 +290,7 @@
 
 
 static PyGetSetDef BaseException_getset[] = {
-    {"__dict__", (getter)BaseException_get_dict, (setter)BaseException_set_dict},
+    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
     {"args", (getter)BaseException_get_args, (setter)BaseException_set_args},
     {"__traceback__", (getter)BaseException_get_tb, (setter)BaseException_set_tb},
     {"__context__", (getter)BaseException_get_context,
diff --git a/Objects/funcobject.c b/Objects/funcobject.c
--- a/Objects/funcobject.c
+++ b/Objects/funcobject.c
@@ -245,42 +245,6 @@
 };
 
 static PyObject *
-func_get_dict(PyFunctionObject *op)
-{
-    if (op->func_dict == NULL) {
-        op->func_dict = PyDict_New();
-        if (op->func_dict == NULL)
-            return NULL;
-    }
-    Py_INCREF(op->func_dict);
-    return op->func_dict;
-}
-
-static int
-func_set_dict(PyFunctionObject *op, PyObject *value)
-{
-    PyObject *tmp;
-
-    /* It is illegal to del f.func_dict */
-    if (value == NULL) {
-        PyErr_SetString(PyExc_TypeError,
-                        "function's dictionary may not be deleted");
-        return -1;
-    }
-    /* Can only set func_dict to a dictionary */
-    if (!PyDict_Check(value)) {
-        PyErr_SetString(PyExc_TypeError,
-                        "setting function's dictionary to a non-dict");
-        return -1;
-    }
-    tmp = op->func_dict;
-    Py_INCREF(value);
-    op->func_dict = value;
-    Py_XDECREF(tmp);
-    return 0;
-}
-
-static PyObject *
 func_get_code(PyFunctionObject *op)
 {
     Py_INCREF(op->func_code);
@@ -476,7 +440,7 @@
      (setter)func_set_kwdefaults},
     {"__annotations__", (getter)func_get_annotations,
      (setter)func_set_annotations},
-    {"__dict__", (getter)func_get_dict, (setter)func_set_dict},
+    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
     {"__name__", (getter)func_get_name, (setter)func_set_name},
     {"__qualname__", (getter)func_get_qualname, (setter)func_set_qualname},
     {NULL} /* Sentinel */
@@ -831,22 +795,12 @@
     Py_RETURN_FALSE;
 }
 
-static PyObject *
-cm_get___dict__(PyObject *cm, void *closure)
-{
-    PyObject **dictptr = _PyObject_GetDictPtr(cm);
-    if (*dictptr == NULL)
-        *dictptr = PyDict_New();
-    Py_XINCREF(*dictptr);
-    return *dictptr;
-}
-
 static PyGetSetDef cm_getsetlist[] = {
     {"__isabstractmethod__",
      (getter)cm_get___isabstractmethod__, NULL,
      NULL,
      NULL},
-    {"__dict__", (getter)cm_get___dict__, NULL, NULL, NULL},
+    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL},
     {NULL} /* Sentinel */
 };
 
@@ -1020,22 +974,12 @@
     Py_RETURN_FALSE;
 }
 
-static PyObject *
-sm_get___dict__(PyObject *sm, void *closure)
-{
-    PyObject **dictptr = _PyObject_GetDictPtr(sm);
-    if (*dictptr == NULL)
-        *dictptr = PyDict_New();
-    Py_XINCREF(*dictptr);
-    return *dictptr;
-}
-
 static PyGetSetDef sm_getsetlist[] = {
     {"__isabstractmethod__",
      (getter)sm_get___isabstractmethod__, NULL,
      NULL,
      NULL},
-    {"__dict__", (getter)sm_get___dict__, NULL, NULL, NULL},
+    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL},
     {NULL} /* Sentinel */
 };
 

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list