Closed vstinner closed 3 months ago
We use this in _asynciomodule.c
and it serves its purpose. So +1 from me.
@zooba: Are you fine with this it? Apparently, the other SC members are fine with it according 👍️ reactions and comments :-)
Yeah, it's fine by me
The whole working group is in favor of adding the function. Let me add this function in this case. I close the issue.
I propose adding
PyType_GetModuleByDef()
to the limited C API version 3.13. The function was added to Python 3.9, the function is now well tested. We could add it way earlier to the limited C API.PR: https://github.com/python/cpython/pull/116937
The
PyType_GetModuleByDef()
function is needed to access the module state in C function which don't get a module as first parameter, but only an instance of a heap type. Heap types should be created withPyType_FromModuleAndSpec(module, spec, bases)
to store the module in the type.PyType_GetModuleByDef(type)
gives the module and thenPyModule_GetState()
gives the moulde state.Examples of functions which don't get a
module
argument:tp_new
,tp_richcompare
,tp_iternext
, etc.PyGetSetDef
getter and setter functionsWithout
PyType_GetModuleByDef()
, many static types cannot be converted to heap types.For example, the following stdlib extensions use
PyType_GetModuleByDef()
In PyPI top 8,000 projects (at 2024-03-16), I found one project using it: pyzstd (0.15.9). I suppose that other projects still use static types (as Cython), they were not updated to use heap types yet. PyType_FromMetaclass() and PyType_GetModuleByDef() were only added "recently": Python 3.12 and 3.11. I suppose that it's hard to move to heap types without these functions, and support Python up to Python 3.6.