From: Guido van Rossum Date: Wed, 8 Jul 1998 13:34:48 +0000 (+0000) Subject: Recompute the special getattr/setattr/delattr cache slots after X-Git-Tag: v1.5.2a1~324 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7ba30431ec821ba00c833d451abe047a9ae60aba;p=python Recompute the special getattr/setattr/delattr cache slots after changing __dict__ *or* __bases__. --- diff --git a/Objects/classobject.c b/Objects/classobject.c index f6fc5d8f31..2154299477 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 ""; }