From caf17be1b7886f4c51558fb10ec8a51483102d38 Mon Sep 17 00:00:00 2001 From: "Michael W. Hudson" Date: Wed, 27 Nov 2002 10:24:44 +0000 Subject: [PATCH] I had the inheritance cycle stuff backwards. Oops! --- Lib/test/test_descr.py | 8 ++++++++ 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 f77d6a478c8..dde165d251d 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 a5779ef3fe2..82237c870cd 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; + } } }