@@ -4312,19 +4312,6 @@ static PyMethodDef _functions[] = {
43124312 {NULL , NULL }
43134313};
43144314
4315-
4316- static struct PyModuleDef elementtreemodule = {
4317- PyModuleDef_HEAD_INIT ,
4318- "_elementtree" ,
4319- NULL ,
4320- sizeof (elementtreestate ),
4321- _functions ,
4322- NULL ,
4323- elementtree_traverse ,
4324- elementtree_clear ,
4325- elementtree_free
4326- };
4327-
43284315#define CREATE_TYPE (module , type , spec ) \
43294316do { \
43304317 if (type != NULL) { \
@@ -4336,21 +4323,10 @@ do { \
43364323 } \
43374324} while (0)
43384325
4339- PyMODINIT_FUNC
4340- PyInit__elementtree ( void )
4326+ static int
4327+ module_exec ( PyObject * m )
43414328{
4342- PyObject * m = NULL ;
4343- elementtreestate * st = NULL ;
4344-
4345- m = PyState_FindModule (& elementtreemodule );
4346- if (m ) {
4347- return Py_NewRef (m );
4348- }
4349-
4350- m = PyModule_Create (& elementtreemodule );
4351- if (!m )
4352- goto error ;
4353- st = get_elementtree_state (m );
4329+ elementtreestate * st = get_elementtree_state (m );
43544330
43554331 /* Initialize object types */
43564332 CREATE_TYPE (m , st -> ElementIter_Type , & elementiter_spec );
@@ -4435,9 +4411,30 @@ PyInit__elementtree(void)
44354411 }
44364412 }
44374413
4438- return m ;
4414+ return 0 ;
44394415
44404416error :
4441- Py_XDECREF (m );
4442- return NULL ;
4417+ return -1 ;
4418+ }
4419+
4420+ static struct PyModuleDef_Slot elementtree_slots [] = {
4421+ {Py_mod_exec , module_exec },
4422+ {0 , NULL },
4423+ };
4424+
4425+ static struct PyModuleDef elementtreemodule = {
4426+ .m_base = PyModuleDef_HEAD_INIT ,
4427+ .m_name = "_elementtree" ,
4428+ .m_size = sizeof (elementtreestate ),
4429+ .m_methods = _functions ,
4430+ .m_slots = elementtree_slots ,
4431+ .m_traverse = elementtree_traverse ,
4432+ .m_clear = elementtree_clear ,
4433+ .m_free = elementtree_free ,
4434+ };
4435+
4436+ PyMODINIT_FUNC
4437+ PyInit__elementtree (void )
4438+ {
4439+ return PyModuleDef_Init (& elementtreemodule );
44434440}
0 commit comments