Author: Matti Picus <matti.pi...@gmail.com>
Branch: PyTuple_Type-subclass
Changeset: r85340:18b7886e7acd
Date: 2016-06-22 23:21 +0300
http://bitbucket.org/pypy/pypy/changeset/18b7886e7acd/

Log:    make sure itemsize is inherited

diff --git a/pypy/module/cpyext/test/foo.c b/pypy/module/cpyext/test/foo.c
--- a/pypy/module/cpyext/test/foo.c
+++ b/pypy/module/cpyext/test/foo.c
@@ -637,7 +637,8 @@
 static PyObject * is_TupleLike(PyObject *self, PyObject * t)
 {
     int tf = t->ob_type == &TupleLike;
-    Py_DECREF(t);
+    if (t->ob_type->tp_itemsize == 0)
+        return PyInt_FromLong(-1);
     return PyInt_FromLong(tf);
 }
 
diff --git a/pypy/module/cpyext/test/test_tupleobject.py 
b/pypy/module/cpyext/test/test_tupleobject.py
--- a/pypy/module/cpyext/test/test_tupleobject.py
+++ b/pypy/module/cpyext/test/test_tupleobject.py
@@ -155,4 +155,4 @@
     def test_tuple_subclass(self):
         module = self.import_module(name='foo')
         a = module.TupleLike([1, 2, 3])
-        assert module.is_TupleLike(a)
+        assert module.is_TupleLike(a) == 1
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
@@ -371,6 +371,8 @@
     # (minimally, if tp_basicsize is zero we copy it from the base)
     if not pto.c_tp_basicsize:
         pto.c_tp_basicsize = base_pto.c_tp_basicsize
+    if pto.c_tp_itemsize < base_pto.c_tp_itemsize:
+        pto.c_tp_itemsize = base_pto.c_tp_itemsize
     flags = rffi.cast(lltype.Signed, pto.c_tp_flags)
     base_object_pyo = make_ref(space, space.w_object)
     base_object_pto = rffi.cast(PyTypeObjectPtr, base_object_pyo)
_______________________________________________
pypy-commit mailing list
pypy-commit@python.org
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to