Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r90686:9cc33cbcd4a7 Date: 2017-03-14 22:11 +0100 http://bitbucket.org/pypy/pypy/changeset/9cc33cbcd4a7/
Log: test and fix diff --git a/pypy/module/cpyext/test/test_typeobject.py b/pypy/module/cpyext/test/test_typeobject.py --- a/pypy/module/cpyext/test/test_typeobject.py +++ b/pypy/module/cpyext/test/test_typeobject.py @@ -1221,3 +1221,25 @@ pass bases = module.foo(C) assert bases == (A, B) + + def test_multiple_inheritance_old_style_base(self): + module = self.import_extension('foo', [ + ("foo", "METH_O", + ''' + PyTypeObject *tp; + tp = (PyTypeObject*)args; + Py_INCREF(tp->tp_bases); + return tp->tp_bases; + ''' + )]) + # used to segfault after some iterations + for i in range(11): + print i + class A(object): + pass + class B: + pass + class C(A, B): + pass + bases = module.foo(C) + assert bases == (A, B) diff --git a/pypy/module/cpyext/typeobject.py b/pypy/module/cpyext/typeobject.py --- a/pypy/module/cpyext/typeobject.py +++ b/pypy/module/cpyext/typeobject.py @@ -931,7 +931,10 @@ if base: inherit_special(space, pto, base) for w_base in space.fixedview(from_ref(space, pto.c_tp_bases)): - inherit_slots(space, pto, w_base) + if isinstance(w_base, W_TypeObject): + inherit_slots(space, pto, w_base) + #else: + # w_base is a W_ClassObject, ignore it if not pto.c_tp_setattro: from pypy.module.cpyext.object import PyObject_GenericSetAttr _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit