Kaydet (Commit) b900d6a7 authored tarafından Benjamin Peterson's avatar Benjamin Peterson

initialize __dict__ if needed

üst 488a56d2
...@@ -1444,6 +1444,7 @@ order (MRO) for bases """ ...@@ -1444,6 +1444,7 @@ order (MRO) for bases """
self.fail("classmethod shouldn't accept keyword args") self.fail("classmethod shouldn't accept keyword args")
cm = classmethod(f) cm = classmethod(f)
self.assertEqual(cm.__dict__, {})
cm.x = 42 cm.x = 42
self.assertEqual(cm.x, 42) self.assertEqual(cm.x, 42)
self.assertEqual(cm.__dict__, {"x" : 42}) self.assertEqual(cm.__dict__, {"x" : 42})
...@@ -1482,6 +1483,7 @@ order (MRO) for bases """ ...@@ -1482,6 +1483,7 @@ order (MRO) for bases """
self.assertEqual(d.foo(1), (d, 1)) self.assertEqual(d.foo(1), (d, 1))
self.assertEqual(D.foo(d, 1), (d, 1)) self.assertEqual(D.foo(d, 1), (d, 1))
sm = staticmethod(None) sm = staticmethod(None)
self.assertEqual(sm.__dict__, {})
sm.x = 42 sm.x = 42
self.assertEqual(sm.x, 42) self.assertEqual(sm.x, 42)
self.assertEqual(sm.__dict__, {"x" : 42}) self.assertEqual(sm.__dict__, {"x" : 42})
......
...@@ -832,10 +832,13 @@ cm_get___isabstractmethod__(classmethod *cm, void *closure) ...@@ -832,10 +832,13 @@ cm_get___isabstractmethod__(classmethod *cm, void *closure)
} }
static PyObject * static PyObject *
cm_get___dict__(classmethod *cm, void *closure) cm_get___dict__(PyObject *cm, void *closure)
{ {
Py_INCREF(cm->cm_dict); PyObject **dictptr = _PyObject_GetDictPtr(cm);
return cm->cm_dict; if (*dictptr == NULL)
*dictptr = PyDict_New();
Py_XINCREF(*dictptr);
return *dictptr;
} }
static PyGetSetDef cm_getsetlist[] = { static PyGetSetDef cm_getsetlist[] = {
...@@ -1018,10 +1021,13 @@ sm_get___isabstractmethod__(staticmethod *sm, void *closure) ...@@ -1018,10 +1021,13 @@ sm_get___isabstractmethod__(staticmethod *sm, void *closure)
} }
static PyObject * static PyObject *
sm_get___dict__(staticmethod *sm, void *closure) sm_get___dict__(PyObject *sm, void *closure)
{ {
Py_INCREF(sm->sm_dict); PyObject **dictptr = _PyObject_GetDictPtr(sm);
return sm->sm_dict; if (*dictptr == NULL)
*dictptr = PyDict_New();
Py_XINCREF(*dictptr);
return *dictptr;
} }
static PyGetSetDef sm_getsetlist[] = { static PyGetSetDef sm_getsetlist[] = {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment