Author: Amaury Forgeot d'Arc <amaur...@gmail.com> Branch: cpyext-ext Changeset: r81496:8520e2b4b038 Date: 2015-12-30 01:36 +0100 http://bitbucket.org/pypy/pypy/changeset/8520e2b4b038/
Log: Un-skip some appdirect tests: TP_FLAGS_DEFAULT is really really needed for all types since Python 2.2... diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py --- a/pypy/module/cpyext/slotdefs.py +++ b/pypy/module/cpyext/slotdefs.py @@ -92,7 +92,7 @@ res = generic_cpy_call(space, func_inquiry, w_self) res = rffi.cast(lltype.Signed, res) if res == -1: - space.fromcache(State).check_and_raise_exception() + space.fromcache(State).check_and_raise_exception(always=True) return space.wrap(bool(res)) def wrap_getattr(space, w_self, w_args, func): 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 @@ -502,12 +502,11 @@ assert module.tp_str(C()) == "text" def test_mp_ass_subscript(self): - if self.runappdirect: - py.test.xfail('segfault') module = self.import_extension('foo', [ ("new_obj", "METH_NOARGS", ''' PyObject *obj; + Foo_Type.tp_flags = Py_TPFLAGS_DEFAULT; Foo_Type.tp_as_mapping = &tp_as_mapping; tp_as_mapping.mp_ass_subscript = mp_ass_subscript; if (PyType_Ready(&Foo_Type) < 0) return NULL; @@ -537,12 +536,11 @@ assert res is None def test_sq_contains(self): - if self.runappdirect: - py.test.xfail('segfault') module = self.import_extension('foo', [ ("new_obj", "METH_NOARGS", ''' PyObject *obj; + Foo_Type.tp_flags = Py_TPFLAGS_DEFAULT; Foo_Type.tp_as_sequence = &tp_as_sequence; tp_as_sequence.sq_contains = sq_contains; if (PyType_Ready(&Foo_Type) < 0) return NULL; @@ -596,18 +594,17 @@ raises(StopIteration, module.tp_iternext, it) def test_bool(self): - if self.runappdirect: - py.test.xfail('segfault') module = self.import_extension('foo', [ ("newInt", "METH_VARARGS", """ IntLikeObject *intObj; - long intval; + int intval; PyObject *name; if (!PyArg_ParseTuple(args, "i", &intval)) return NULL; + IntLike_Type.tp_flags |= Py_TPFLAGS_DEFAULT; IntLike_Type.tp_as_number = &intlike_as_number; intlike_as_number.nb_nonzero = intlike_nb_nonzero; if (PyType_Ready(&IntLike_Type) < 0) return NULL; @@ -633,6 +630,7 @@ PyErr_SetNone(PyExc_ValueError); return -1; } + /* Returning -1 should be for exceptions only! */ return v->value; } @@ -646,12 +644,10 @@ """) assert not bool(module.newInt(0)) assert bool(module.newInt(1)) - assert bool(module.newInt(-1)) + raises(SystemError, bool, module.newInt(-1)) raises(ValueError, bool, module.newInt(-42)) def test_binaryfunc(self): - if self.runappdirect: - py.test.xfail('segfault') module = self.import_extension('foo', [ ("newInt", "METH_VARARGS", """ @@ -662,7 +658,7 @@ return NULL; IntLike_Type.tp_as_number = &intlike_as_number; - IntLike_Type.tp_flags |= Py_TPFLAGS_CHECKTYPES; + IntLike_Type.tp_flags |= Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES; intlike_as_number.nb_add = intlike_nb_add; if (PyType_Ready(&IntLike_Type) < 0) return NULL; intObj = PyObject_New(IntLikeObject, &IntLike_Type); @@ -681,7 +677,7 @@ if (!PyArg_ParseTuple(args, "l", &intval)) return NULL; - IntLike_Type_NoOp.tp_flags |= Py_TPFLAGS_CHECKTYPES; + IntLike_Type_NoOp.tp_flags |= Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES; if (PyType_Ready(&IntLike_Type_NoOp) < 0) return NULL; intObjNoOp = PyObject_New(IntLikeObjectNoOp, &IntLike_Type_NoOp); if (!intObjNoOp) { _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit