New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add PyType_GetModuleByDef() to the limited C API #20
Comments
We use this in |
@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. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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: python/cpython#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.
The text was updated successfully, but these errors were encountered: