I don't think we want to be mutating w_type on an OperationError, I'm not even sure what it does, since w_value will have a different type from w_type.
Alex On Wed, Jan 30, 2013 at 10:41 PM, bdkearns <[email protected]>wrote: > Author: Brian Kearns <[email protected]> > Branch: > Changeset: r60748:c8febcb60f46 > Date: 2013-01-31 00:59 -0500 > http://bitbucket.org/pypy/pypy/changeset/c8febcb60f46/ > > Log: fix test_capi's test_long/test_longlong > > diff --git a/lib-python/2.7/test/test_capi.py > b/lib-python/2.7/test/test_capi.py > --- a/lib-python/2.7/test/test_capi.py > +++ b/lib-python/2.7/test/test_capi.py > @@ -19,8 +19,6 @@ > 'test_broken_memoryview', > 'test_capsule', > 'test_lazy_hash_inheritance', > - 'test_long_api', > - 'test_longlong_api', > 'test_widechar', > 'TestThreadState', > 'TestPendingCalls', > diff --git a/pypy/module/cpyext/longobject.py > b/pypy/module/cpyext/longobject.py > --- a/pypy/module/cpyext/longobject.py > +++ b/pypy/module/cpyext/longobject.py > @@ -47,7 +47,12 @@ > Return a C unsigned long representation of the contents of pylong. > If pylong is greater than ULONG_MAX, an OverflowError is > raised.""" > - return rffi.cast(rffi.ULONG, space.uint_w(w_long)) > + try: > + return rffi.cast(rffi.ULONG, space.uint_w(w_long)) > + except OperationError, e: > + if e.match(space, space.w_ValueError): > + e.w_type = space.w_OverflowError > + raise > > @cpython_api([PyObject], rffi.ULONG, error=-1) > def PyLong_AsUnsignedLongMask(space, w_long): > @@ -86,7 +91,12 @@ > Return a C unsigned long representation of the contents of pylong. > If pylong is greater than ULONG_MAX, an OverflowError is > raised.""" > - return rffi.cast(rffi.ULONGLONG, space.r_ulonglong_w(w_long)) > + try: > + return rffi.cast(rffi.ULONGLONG, space.r_ulonglong_w(w_long)) > + except OperationError, e: > + if e.match(space, space.w_ValueError): > + e.w_type = space.w_OverflowError > + raise > > @cpython_api([PyObject], rffi.ULONGLONG, error=-1) > def PyLong_AsUnsignedLongLongMask(space, w_long): > diff --git a/pypy/module/cpyext/test/test_longobject.py > b/pypy/module/cpyext/test/test_longobject.py > --- a/pypy/module/cpyext/test/test_longobject.py > +++ b/pypy/module/cpyext/test/test_longobject.py > @@ -31,6 +31,8 @@ > value = api.PyLong_AsUnsignedLong(w_value) > assert value == (sys.maxint - 1) * 2 > > + self.raises(space, api, OverflowError, api.PyLong_AsUnsignedLong, > space.wrap(-1)) > + > def test_as_ssize_t(self, space, api): > w_value = space.newlong(2) > value = api.PyLong_AsSsize_t(w_value) > @@ -46,11 +48,11 @@ > w_l = space.wrap(sys.maxint + 1) > assert api.PyLong_Check(w_l) > assert api.PyLong_CheckExact(w_l) > - > + > w_i = space.wrap(sys.maxint) > assert not api.PyLong_Check(w_i) > assert not api.PyLong_CheckExact(w_i) > - > + > L = space.appexec([], """(): > class L(long): > pass > @@ -73,6 +75,8 @@ > assert api.PyLong_AsUnsignedLongLongMask( > space.wrap(1<<64)) == 0 > > + self.raises(space, api, OverflowError, > api.PyLong_AsUnsignedLongLong, space.wrap(-1)) > + > def test_as_long_and_overflow(self, space, api): > overflow = lltype.malloc(rffi.CArrayPtr(rffi.INT_real).TO, 1, > flavor='raw') > assert api.PyLong_AsLongAndOverflow( > _______________________________________________ > pypy-commit mailing list > [email protected] > http://mail.python.org/mailman/listinfo/pypy-commit > -- "I disapprove of what you say, but I will defend to the death your right to say it." -- Evelyn Beatrice Hall (summarizing Voltaire) "The people's good is the highest law." -- Cicero
_______________________________________________ pypy-commit mailing list [email protected] http://mail.python.org/mailman/listinfo/pypy-commit
