[bump]

Stefan Behnel, 10.01.2010 18:23:
> [...] why not just represent a borrowed reference as a pointer?
> So you could write
> 
>      cdef list some_list = []
>      cdef list* borrowed_ref = some_list
> 
> and borrowed_ref would be a non-refcounted pointer to a Python list. 
> Assignments back to a normal reference would be allowed:
> 
>      cdef list my_list = borrowed_ref   # increfs the pointer
> 
> After all, a non-refcounted reference to a Python object is not more than a 
> bare pointer to a well-defined Python builtin/extension type (including 
> "object*").

What do the others think about this?

Note that this does not relate to the "stolen reference" case, for which
Robert already proposed a "steal()" function (and which I expect to be a
rare use case anyway). It only deals with borrowed references, where e.g.
PyTuple_GET_ITEM() would be declared as

    cdef object* PyTuple_GET_ITEM(object t, Py_ssize_t index)

and Cython would automatically do the right thing when you write

    cdef object x = PyTuple_GET_ITEM(t, 0)

or

    cdef object* x = PyTuple_GET_ITEM(t, 0)

respectively. The only drawback I see with this syntax is that you can't write

    cdef object x = PyTuple_GET_ITEM(t, 0)[0]

which you'd normally do with a pointer...

Stefan

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

Reply via email to