Author: Armin Rigo <[email protected]>
Branch: py3.5
Changeset: r94443:a07f07034d28
Date: 2018-04-24 10:00 +0200
http://bitbucket.org/pypy/pypy/changeset/a07f07034d28/
Log: Fix _PyLong_Sign() to accept any app-level 'int' object
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
@@ -2,7 +2,6 @@
from pypy.module.cpyext.api import (
cpython_api, PyObject, build_type_checkers_flags, Py_ssize_t,
CONST_STRING, ADDR, CANNOT_FAIL)
-from pypy.objspace.std.longobject import W_LongObject
from pypy.interpreter.error import OperationError, oefmt
from rpython.rlib.rbigint import rbigint, InvalidSignednessError
@@ -234,8 +233,8 @@
@cpython_api([PyObject], rffi.INT_real, error=CANNOT_FAIL)
def _PyLong_Sign(space, w_long):
- assert isinstance(w_long, W_LongObject)
- return w_long.num.sign
+ bigint = space.bigint_w(w_long)
+ return bigint.sign
CONST_UCHARP = lltype.Ptr(lltype.Array(rffi.UCHAR, hints={'nolength': True,
'render_as_const': True}))
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
@@ -136,6 +136,9 @@
assert api._PyLong_Sign(space.wraplong(0L)) == 0
assert api._PyLong_Sign(space.wraplong(2L)) == 1
assert api._PyLong_Sign(space.wraplong(-2L)) == -1
+ assert api._PyLong_Sign(space.wrap(0)) == 0
+ assert api._PyLong_Sign(space.wrap(42)) == 1
+ assert api._PyLong_Sign(space.wrap(-42)) == -1
assert api._PyLong_NumBits(space.wrap(0)) == 0
assert api._PyLong_NumBits(space.wrap(1)) == 1
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit