STINNER Victor <[email protected]> added the comment:
Oh and obviously, it's not possible possible to define structures which
*include* PyObject or PyVarObject if PyObject and PyVarObject become opaque.
Example:
typedef struct {
PyObject ob_base;
Py_ssize_t ob_size; /* Number of items in variable part */
} PyVarObject;
This C code requires the PyObject structure to be fully defined (not being
opaque).
A new C API and ABI where structures *don't* include PyObject or PyVarObject
should be designed to allocate their members "before" the PyObject* pointer
value. Something like the current PyGC_Head structure which is excluded from
PyObject and stored *before* the "PyObject*" pointer.
Simplified code which allocates memory for an object implementin the GC
protocol:
static PyObject *
_PyObject_GC_Malloc(size_t basicsize)
{
...
size_t size = sizeof(PyGC_Head) + basicsize;
...
PyGC_Head *g = (PyGC_Head *)PyObject_Malloc(size);
...
PyObject *op = (PyObject *)(g + 1);
return op;
}
----------
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue39573>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com