]> granicus.if.org Git - python/commitdiff
Recompute the special getattr/setattr/delattr cache slots after
authorGuido van Rossum <guido@python.org>
Wed, 8 Jul 1998 13:34:48 +0000 (13:34 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 8 Jul 1998 13:34:48 +0000 (13:34 +0000)
changing __dict__ *or* __bases__.

Objects/classobject.c

index f6fc5d8f31bc4ea7ef385c2aca56f1cbb9db0378..21542994777ea5512901065fc2599de3efc44c0c 100644 (file)
@@ -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 "";
 }