From 7ba30431ec821ba00c833d451abe047a9ae60aba Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 8 Jul 1998 13:34:48 +0000 Subject: Recompute the special getattr/setattr/delattr cache slots after changing __dict__ *or* __bases__. --- Objects/classobject.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/Objects/classobject.c b/Objects/classobject.c index f6fc5d8..2154299 100644 --- a/Objects/classobject.c +++ b/Objects/classobject.c @@ -227,21 +227,26 @@ set_slot(slot, v) Py_XDECREF(temp); } -static char * -set_dict(c, v) +static void +set_attr_slots(c) PyClassObject *c; - PyObject *v; { PyClassObject *dummy; - if (v == NULL || !PyDict_Check(v)) - return "__dict__ must be a dictionary object"; - set_slot(&c->cl_dict, v); - set_slot(&c->cl_getattr, class_lookup(c, getattrstr, &dummy)); set_slot(&c->cl_setattr, class_lookup(c, setattrstr, &dummy)); set_slot(&c->cl_delattr, class_lookup(c, delattrstr, &dummy)); +} +static char * +set_dict(c, v) + PyClassObject *c; + PyObject *v; +{ + if (v == NULL || !PyDict_Check(v)) + return "__dict__ must be a dictionary object"; + set_slot(&c->cl_dict, v); + set_attr_slots(c); return ""; } @@ -263,6 +268,7 @@ set_bases(c, v) return "a __bases__ item causes an inheritance cycle"; } set_slot(&c->cl_bases, v); + set_attr_slots(c); return ""; } -- cgit v0.12