I had the inheritance cycle stuff backwards. Oops!

This commit is contained in:
Michael W. Hudson 2002-11-27 10:24:44 +00:00
parent e16e01fac6
commit caf17be1b7
2 changed files with 14 additions and 4 deletions

View File

@ -3452,6 +3452,7 @@ def mutable_bases():
pass
d = D()
e = E()
D.__bases__ = (C,)
D.__bases__ = (C2,)
vereq(d.meth(), 1)
vereq(e.meth(), 1)
@ -3492,6 +3493,13 @@ def mutable_bases():
# actually, we'll have crashed by here...
raise TestFailed, "shouldn't be able to create inheritance cycles"
try:
D.__bases__ = (E,)
except TypeError:
pass
else:
raise TestFailed, "shouldn't be able to create inheritance cycles"
# let's throw a classic class into the mix:
class Classic:
def meth2(self):

View File

@ -208,10 +208,12 @@ type_set_bases(PyTypeObject *type, PyObject *value, void *context)
type->tp_name, ob->ob_type->tp_name);
return -1;
}
if (PyType_IsSubtype(type, (PyTypeObject*)ob)) {
PyErr_SetString(PyExc_TypeError,
"a __bases__ item causes an inheritance cycle");
return -1;
if (PyType_Check(ob)) {
if (PyType_IsSubtype((PyTypeObject*)ob, type)) {
PyErr_SetString(PyExc_TypeError,
"a __bases__ item causes an inheritance cycle");
return -1;
}
}
}