-
- Notifications
You must be signed in to change notification settings - Fork 33.5k
Description
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.
cc @encukou
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 with PyType_FromModuleAndSpec(module, spec, bases) to store the module in the type. PyType_GetModuleByDef(type) gives the module and then PyModule_GetState() gives the moulde state.
Examples of functions which don't get a module argument:
- Class methods
- Most slots, examples:
tp_new,tp_richcompare,tp_iternext, etc. PyGetSetDefgetter and setter functions
Without PyType_GetModuleByDef(), many static types cannot be converted to heap types.
The following stdlib extensions use PyType_GetModuleByDef()
Modules/_asynciomodule.c Modules/_bz2module.c Modules/_collectionsmodule.c Modules/_csv.c Modules/_decimal/_decimal.c Modules/_elementtree.c Modules/_functoolsmodule.c Modules/_io/_iomodule.h Modules/_pickle.c Modules/_queuemodule.c Modules/_randommodule.c Modules/_sqlite/module.h Modules/_ssl.c Modules/_ssl.h Modules/_struct.c Modules/_testmultiphase.c Modules/_threadmodule.c Modules/_xxinterpchannelsmodule.c Modules/_zoneinfo.c Modules/arraymodule.c Modules/cjkcodecs/multibytecodec.c Modules/clinic/_testmultiphase.c.h Modules/itertoolsmodule.c Modules/socketmodule.c Python/Python-tokenize.c