On 2 March 2012 10:09, Stefan Behnel <[email protected]> wrote: > Stefan Behnel, 02.03.2012 10:45: >> the builtin Py_buffer struct type is currently defined as follows: >> >> """ >> builtin_structs_table = [ >> ('Py_buffer', 'Py_buffer', >> [("buf", PyrexTypes.c_void_ptr_type), >> ("obj", PyrexTypes.py_object_type), >> ("len", PyrexTypes.c_py_ssize_t_type), >> ... >> """ >> >> I hadn't noticed this before, but when you actually use it in a >> "__getbuffer__()" special method, you have to assign the buffer owner (i.e. >> self) to the .obj field, which is currently defined as "object". > > Oh, well, I should really learn to read code before composing a lengthy > e-mail... > > "__getbuffer__()" is already special-cased and sets the value to None. I > think I even recall that we discussed this back when Dag implemented > support for buffers. The reason I had originally noticed this was this > recent change in Py3.3: > > """ > static PyObject * > _PyManagedBuffer_FromObject(PyObject *base) > { > _PyManagedBufferObject *mbuf; > > mbuf = mbuf_alloc(); > if (mbuf == NULL) > return NULL; > > if (PyObject_GetBuffer(base, &mbuf->master, PyBUF_FULL_RO) < 0) { > /* mbuf->master.obj must be NULL. */ > Py_DECREF(mbuf); > return NULL; > } > > /* Assume that master.obj is a new reference to base. */ > assert(mbuf->master.obj == base); > > return (PyObject *)mbuf; > } > """ > > Note the assertion (which is unreleased as of now, so it may still be > subject to changes). Is there any reason the value should be set to None by > Cython's special casing code instead of self?
It sets it to None to it can later reset it to NULL. Python 3.3 is the first version to document the 'obj' Py_buffer attribute, and it mentions that the exporter may set it to NULL. The code above is not the PyObject_GetBuffer function, so setting it to NULL should still work. Defaulting it to 'self' instead would work equally well I'd think. > Stefan > _______________________________________________ > cython-devel mailing list > [email protected] > http://mail.python.org/mailman/listinfo/cython-devel _______________________________________________ cython-devel mailing list [email protected] http://mail.python.org/mailman/listinfo/cython-devel
