[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