Commit 7ba30431 authored by Guido van Rossum's avatar Guido van Rossum

Recompute the special getattr/setattr/delattr cache slots after

changing __dict__ *or* __bases__.
parent b77a68e6
...@@ -227,21 +227,26 @@ set_slot(slot, v) ...@@ -227,21 +227,26 @@ set_slot(slot, v)
Py_XDECREF(temp); Py_XDECREF(temp);
} }
static char * static void
set_dict(c, v) set_attr_slots(c)
PyClassObject *c; PyClassObject *c;
PyObject *v;
{ {
PyClassObject *dummy; 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_getattr, class_lookup(c, getattrstr, &dummy));
set_slot(&c->cl_setattr, class_lookup(c, setattrstr, &dummy)); set_slot(&c->cl_setattr, class_lookup(c, setattrstr, &dummy));
set_slot(&c->cl_delattr, class_lookup(c, delattrstr, &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 ""; return "";
} }
...@@ -263,6 +268,7 @@ set_bases(c, v) ...@@ -263,6 +268,7 @@ set_bases(c, v)
return "a __bases__ item causes an inheritance cycle"; return "a __bases__ item causes an inheritance cycle";
} }
set_slot(&c->cl_bases, v); set_slot(&c->cl_bases, v);
set_attr_slots(c);
return ""; return "";
} }
......
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