[Cython] [cython-users] Re: Bringing Cython and PyPy closer together
Stefan Behnel
stefan_ml at behnel.de
Sun Mar 29 15:10:49 CEST 2015
Lisandro Dalcin schrieb am 29.03.2015 um 14:52:
>> Lisandro Dalcin schrieb am 29.03.2015 um 12:23:
>>> One thing that Cython developers really need is PyPy defining a macro
>>> such as PYPY_VERSION_HEX in such a way us we can properly use
>>> conditional compilation. For example, a few days ago I was pushing
>>> PyPy fixes to Cython. I tried to use _PyLong_Sign in my patch, but the
>>> interpreter broke at runtime.
>
> however I do require _PyLong_Sign to work if I want to
> report correct overflow error messages when converting PyLong values
> to a C integral type. In CPython, we are using Py_SIZE for that, not
> only for speed, but also to figure out the right overflow kind when
> converting to unsigned integers.
>
> diff --git a/Cython/Utility/TypeConversion.c b/Cython/Utility/TypeConversion.c
> index 4cd8229..fbac649 100644
> --- a/Cython/Utility/TypeConversion.c
> +++ b/Cython/Utility/TypeConversion.c
> @@ -560,6 +560,10 @@ static CYTHON_INLINE {{TYPE}}
> {{FROM_PY_FUNCTION}}(PyObject *x) {
> if (unlikely(Py_SIZE(x) < 0)) {
> goto raise_neg_overflow;
> }
> +#elif CYTHON_COMPILING_IN_PYPY
> + if (unlikely(_PyLong_Sign(x) < 0)) {
> + goto raise_neg_overflow;
> + }
> #endif
> if (sizeof({{TYPE}}) <= sizeof(unsigned long)) {
> __PYX_VERIFY_RETURN_INT({{TYPE}}, unsigned long,
> PyLong_AsUnsignedLong(x))
Why not call PyObject_RichCompareBool() to make cpyext itself compare the
value to 0?
Stefan
More information about the cython-devel
mailing list