Robert Bradshaw wrote:
> Of course, there may already be code out there that counts on the  
> true PyList_SET_ITEM semantics.

Certainly.


> Another option:
> 
> cdef extern from *:
>      ctypedef void stolen_object "PyObject*"
> 
> cdef inline stolen_object steal(object):
>      Py_INCREF(o)
>      return <stolen_object>o
> 
> cdef extern void PyList_SET_ITEM(object, Py_ssize_t, stolen_object)
> 
> 
> One would then call it as
> 
> PyList_SET_ITEM(L, 0, steal(item))
> 
> (Of course, PyList_SET_ITEM is worse than this, as one needs to  
> manually (x)decref the original spot in the list as well... This  
> makes me lean towards not providing it as a friendly function taking  
> ordinary objects).

That's because it's a macro. It's a different situation for functions -
although I can't currently find any in the C-API that really steal
references. If users actually have to special case stolen references
anyway, maybe this whole "stolen" business is really a non-problem...

Stefan

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to