@@ -1400,58 +1400,62 @@ static PyTypeObject lru_cache_type = {
14001400
14011401/* module level code ********************************************************/
14021402
1403- PyDoc_STRVAR (module_doc ,
1403+ PyDoc_STRVAR (_functools_doc ,
14041404"Tools that operate on functions." );
14051405
1406- static PyMethodDef module_methods [] = {
1406+ static PyMethodDef _functools_methods [] = {
14071407 {"reduce" , functools_reduce , METH_VARARGS , functools_reduce_doc },
14081408 {"cmp_to_key" , (PyCFunction )(void (* )(void ))functools_cmp_to_key ,
14091409 METH_VARARGS | METH_KEYWORDS , functools_cmp_to_key_doc },
14101410 {NULL , NULL } /* sentinel */
14111411};
14121412
14131413static void
1414- module_free (void * m )
1414+ _functools_free (void * m )
14151415{
14161416 Py_CLEAR (kwd_mark );
14171417}
14181418
1419- static struct PyModuleDef _functoolsmodule = {
1420- PyModuleDef_HEAD_INIT ,
1421- "_functools" ,
1422- module_doc ,
1423- -1 ,
1424- module_methods ,
1425- NULL ,
1426- NULL ,
1427- NULL ,
1428- module_free ,
1429- };
1430-
1431- PyMODINIT_FUNC
1432- PyInit__functools (void )
1419+ static int
1420+ _functools_exec (PyObject * module )
14331421{
1434- PyObject * m ;
14351422 PyTypeObject * typelist [] = {
14361423 & partial_type ,
14371424 & lru_cache_type
14381425 };
14391426
1440- m = PyModule_Create (& _functoolsmodule );
1441- if (m == NULL )
1442- return NULL ;
1443-
14441427 kwd_mark = _PyObject_CallNoArg ((PyObject * )& PyBaseObject_Type );
14451428 if (!kwd_mark ) {
1446- Py_DECREF (m );
1447- return NULL ;
1429+ return -1 ;
14481430 }
14491431
14501432 for (size_t i = 0 ; i < Py_ARRAY_LENGTH (typelist ); i ++ ) {
1451- if (PyModule_AddType (m , typelist [i ]) < 0 ) {
1452- Py_DECREF (m );
1453- return NULL ;
1433+ if (PyModule_AddType (module , typelist [i ]) < 0 ) {
1434+ return -1 ;
14541435 }
14551436 }
1456- return m ;
1437+ return 0 ;
1438+ }
1439+
1440+ static struct PyModuleDef_Slot _functools_slots [] = {
1441+ {Py_mod_exec , _functools_exec },
1442+ {0 , NULL }
1443+ };
1444+
1445+ static struct PyModuleDef _functools_module = {
1446+ PyModuleDef_HEAD_INIT ,
1447+ "_functools" ,
1448+ _functools_doc ,
1449+ 0 ,
1450+ _functools_methods ,
1451+ _functools_slots ,
1452+ NULL ,
1453+ NULL ,
1454+ _functools_free ,
1455+ };
1456+
1457+ PyMODINIT_FUNC
1458+ PyInit__functools (void )
1459+ {
1460+ return PyModuleDef_Init (& _functools_module );
14571461}
0 commit comments