[Cython] cdef class tp_new should call PyBaseObject_Type.tp_new?

Simon Jagoe simon at simonjagoe.com
Fri Jan 10 11:51:59 CET 2014


Thanks, Stefan. Let me know if I can help in any way. I will track Cython master
while I continue my port from C to Cython.

On 10 January 2014 09:52, Stefan Behnel <stefan_ml at behnel.de> wrote:
> Stefan Behnel, 10.01.2014 10:11:
>> Simon Jagoe, 09.01.2014 14:04:
>>>> Looking at the code in Py3, ISTM that it would be sufficient to do this iff
>>>>
>>>>         (t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) != 0
>>>>
>>>> which should be rare enough.
>>>>
>>>> Obviously requires some user side testing to see if it breaks any other code...
>>>
>>> Thanks for looking at this. I am wondering if there is a reason why the
>>> tp_alloc can't be replaced with the PyBaseObject_Type->tp_new directly?
>>
>> I don't know. At least, it's some unnecessary overhead in almost all cases.
>> Not sure if that matters, there's enough costly stuff happening at this
>> point anyway.
>>
>> ISTM that we'd also have to fix the issue that Nils Bruin found, otherwise
>> we'd risk even more trouble on user side.
>>
>> http://thread.gmane.org/gmane.comp.python.cython.user/10267
>>
>>
>>> My understanding is that initially, object's tp_new essentially just
>>> called tp_alloc as Cython does now.  Later the abc feature was added
>>> with the abstract check happening in object's tp_new, while not changing
>>> previous (non-abstract class) behavior.  If Cython were to use this
>>> instead of tp_alloc, it would be forward-compatible with future changes
>>> to object.
>>
>> Agreed.
>
> Let's see what Jenkins has to say about it.
>
> https://github.com/cython/cython/commit/ddaffbe78c06e580ca0d9cd334c7a28a4de5c40b
>
> Stefan
>
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> https://mail.python.org/mailman/listinfo/cython-devel


More information about the cython-devel mailing list