@@ -4701,31 +4701,9 @@ combinations(p, r)\n\
4701
4701
combinations_with_replacement(p, r)\n\
4702
4702
" );
4703
4703
4704
-
4705
- static PyMethodDef module_methods [] = {
4706
- ITERTOOLS_TEE_METHODDEF
4707
- {NULL , NULL } /* sentinel */
4708
- };
4709
-
4710
-
4711
- static struct PyModuleDef itertoolsmodule = {
4712
- PyModuleDef_HEAD_INIT ,
4713
- "itertools" ,
4714
- module_doc ,
4715
- -1 ,
4716
- module_methods ,
4717
- NULL ,
4718
- NULL ,
4719
- NULL ,
4720
- NULL
4721
- };
4722
-
4723
- PyMODINIT_FUNC
4724
- PyInit_itertools (void )
4704
+ static int
4705
+ itertoolsmodule_exec (PyObject * m )
4725
4706
{
4726
- int i ;
4727
- PyObject * m ;
4728
- const char * name ;
4729
4707
PyTypeObject * typelist [] = {
4730
4708
& accumulate_type ,
4731
4709
& combinations_type ,
@@ -4751,19 +4729,48 @@ PyInit_itertools(void)
4751
4729
};
4752
4730
4753
4731
Py_SET_TYPE (& teedataobject_type , & PyType_Type );
4754
- m = PyModule_Create (& itertoolsmodule );
4755
- if (m == NULL ) {
4756
- return NULL ;
4757
- }
4758
4732
4759
- for (i = 0 ; typelist [i ] != NULL ; i ++ ) {
4760
- if (PyType_Ready (typelist [i ]) < 0 ) {
4761
- return NULL ;
4733
+ for (int i = 0 ; typelist [i ] != NULL ; i ++ ) {
4734
+ PyTypeObject * type = typelist [i ];
4735
+ if (PyType_Ready (type ) < 0 ) {
4736
+ return -1 ;
4737
+ }
4738
+ const char * name = _PyType_Name (type );
4739
+ Py_INCREF (type );
4740
+ if (PyModule_AddObject (m , name , (PyObject * )type ) < 0 ) {
4741
+ Py_DECREF (type );
4742
+ return -1 ;
4762
4743
}
4763
- name = _PyType_Name (typelist [i ]);
4764
- Py_INCREF (typelist [i ]);
4765
- PyModule_AddObject (m , name , (PyObject * )typelist [i ]);
4766
4744
}
4767
4745
4768
- return m ;
4746
+ return 0 ;
4747
+ }
4748
+
4749
+ static struct PyModuleDef_Slot itertoolsmodule_slots [] = {
4750
+ {Py_mod_exec , itertoolsmodule_exec },
4751
+ {0 , NULL }
4752
+ };
4753
+
4754
+ static PyMethodDef module_methods [] = {
4755
+ ITERTOOLS_TEE_METHODDEF
4756
+ {NULL , NULL } /* sentinel */
4757
+ };
4758
+
4759
+
4760
+ static struct PyModuleDef itertoolsmodule = {
4761
+ PyModuleDef_HEAD_INIT ,
4762
+ "itertools" ,
4763
+ module_doc ,
4764
+ 0 ,
4765
+ module_methods ,
4766
+ itertoolsmodule_slots ,
4767
+ NULL ,
4768
+ NULL ,
4769
+ NULL
4770
+ };
4771
+
4772
+ PyMODINIT_FUNC
4773
+ PyInit_itertools (void )
4774
+ {
4775
+ return PyModuleDef_Init (& itertoolsmodule );
4769
4776
}
0 commit comments