[Cython] incorrect C code generated on method assignment (cython 0.11.1)
Stefan Behnel
stefan_ml at behnel.de
Fri Apr 17 17:06:39 CEST 2009
Lisandro Dalcin wrote:
> On Fri, Apr 17, 2009 at 10:09 AM, Stefan Behnel wrote:
>> ... and that's a feature request, it would be nice to make that work.
>> Could you create two tickets for those?
What I meant was: add support for setting special methods by assignment,
at least in some cases. I didn't specifically mean "__int__" and
"__long__".
> Mmm... we will have to have care here... In Py3k, nb_long was renamed
> to nb_reserved (moreover, now it is a bare void* pointer).
Yes, they removed all sorts of stuff (and I lobbied for removing all sorts
of dead meat), but they forgot to remove that one in time. It's still in
3.1a1.
> So, In
> Py3k, if a class only defines one of __int__() or __long__(), Cython
> should generate code filling the 'nb_int' slot,
Sure.
> and put a NULL in 'nb_reserved'.
Always in Py3.
> What I do not know is what to do
> if a class defines both special methods...
Good question. I think if __long__ is defined, that's what best resembles
nb_int in Py3. People are more likely to expect C-int compatibility in
__int__, so the only reason why one would define __long__ is to pass
larger numbers.
If both are defined, I'd vote for using __long__ in Py3.
> Also note that the in implementation of __Pyx_PyNumber_Int() (from my
> patch for C-int conversion), "nb_long" takes precedence over "nb_int"
> in Python 2. IMHO, that was the best thing to do...
What's CPython doing here?
Stefan
More information about the Cython-dev
mailing list