summaryrefslogtreecommitdiffstats
path: root/Objects
diff options
context:
space:
mode:
Diffstat (limited to 'Objects')
-rw-r--r--Objects/typeobject.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index 5952b4e..ba2834a 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -674,8 +674,31 @@ subtype_dict(PyObject *obj, void *context)
return dict;
}
+static int
+subtype_setdict(PyObject *obj, PyObject *value, void *context)
+{
+ PyObject **dictptr = _PyObject_GetDictPtr(obj);
+ PyObject *dict;
+
+ if (dictptr == NULL) {
+ PyErr_SetString(PyExc_AttributeError,
+ "This object has no __dict__");
+ return -1;
+ }
+ if (value == NULL || !PyDict_Check(value)) {
+ PyErr_SetString(PyExc_TypeError,
+ "__dict__ must be set to a dictionary");
+ return -1;
+ }
+ dict = *dictptr;
+ Py_INCREF(value);
+ *dictptr = value;
+ Py_XDECREF(dict);
+ return 0;
+}
+
static PyGetSetDef subtype_getsets[] = {
- {"__dict__", subtype_dict, NULL, NULL},
+ {"__dict__", subtype_dict, subtype_setdict, NULL},
{0},
};