Author: Armin Rigo <ar...@tunes.org> 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 pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit