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

Reply via email to