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