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

Reply via email to