diff options
author | Michael W. Hudson <mwh@python.net> | 2002-11-27 10:24:44 (GMT) |
---|---|---|
committer | Michael W. Hudson <mwh@python.net> | 2002-11-27 10:24:44 (GMT) |
commit | caf17be1b7886f4c51558fb10ec8a51483102d38 (patch) | |
tree | 9297bddcaf3338451dd27e8b382ebd5a54de174d | |
parent | e16e01fac6685e83a0121d1c6feca984fef8b946 (diff) | |
download | cpython-caf17be1b7886f4c51558fb10ec8a51483102d38.zip cpython-caf17be1b7886f4c51558fb10ec8a51483102d38.tar.gz cpython-caf17be1b7886f4c51558fb10ec8a51483102d38.tar.bz2 |
I had the inheritance cycle stuff backwards. Oops!
-rw-r--r-- | Lib/test/test_descr.py | 8 | ||||
-rw-r--r-- | Objects/typeobject.c | 10 |
2 files changed, 14 insertions, 4 deletions
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py index f77d6a4..dde165d 100644 --- a/Lib/test/test_descr.py +++ b/Lib/test/test_descr.py @@ -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): diff --git a/Objects/typeobject.c b/Objects/typeobject.c index a5779ef..82237c8 100644 --- a/Objects/typeobject.c +++ b/Objects/typeobject.c @@ -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; + } } } |