@@ -3421,6 +3421,29 @@ math_ulp_impl(PyObject *module, double x)
3421
3421
return x2 - x ;
3422
3422
}
3423
3423
3424
+ static int
3425
+ math_exec (PyObject * module )
3426
+ {
3427
+ if (PyModule_AddObject (module , "pi" , PyFloat_FromDouble (Py_MATH_PI )) < 0 ) {
3428
+ return -1 ;
3429
+ }
3430
+ if (PyModule_AddObject (module , "e" , PyFloat_FromDouble (Py_MATH_E )) < 0 ) {
3431
+ return -1 ;
3432
+ }
3433
+ // 2pi
3434
+ if (PyModule_AddObject (module , "tau" , PyFloat_FromDouble (Py_MATH_TAU )) < 0 ) {
3435
+ return -1 ;
3436
+ }
3437
+ if (PyModule_AddObject (module , "inf" , PyFloat_FromDouble (m_inf ())) < 0 ) {
3438
+ return -1 ;
3439
+ }
3440
+ #if !defined(PY_NO_SHORT_FLOAT_REPR ) || defined(Py_NAN )
3441
+ if (PyModule_AddObject (module , "nan" , PyFloat_FromDouble (m_nan ())) < 0 ) {
3442
+ return -1 ;
3443
+ }
3444
+ #endif
3445
+ return 0 ;
3446
+ }
3424
3447
3425
3448
static PyMethodDef math_methods [] = {
3426
3449
{"acos" , math_acos , METH_O , math_acos_doc },
@@ -3479,41 +3502,26 @@ static PyMethodDef math_methods[] = {
3479
3502
{NULL , NULL } /* sentinel */
3480
3503
};
3481
3504
3505
+ static PyModuleDef_Slot math_slots [] = {
3506
+ {Py_mod_exec , math_exec },
3507
+ {0 , NULL }
3508
+ };
3482
3509
3483
3510
PyDoc_STRVAR (module_doc ,
3484
3511
"This module provides access to the mathematical functions\n"
3485
3512
"defined by the C standard." );
3486
3513
3487
-
3488
3514
static struct PyModuleDef mathmodule = {
3489
3515
PyModuleDef_HEAD_INIT ,
3490
- "math" ,
3491
- module_doc ,
3492
- -1 ,
3493
- math_methods ,
3494
- NULL ,
3495
- NULL ,
3496
- NULL ,
3497
- NULL
3516
+ .m_name = "math" ,
3517
+ .m_doc = module_doc ,
3518
+ .m_size = 0 ,
3519
+ .m_methods = math_methods ,
3520
+ .m_slots = math_slots ,
3498
3521
};
3499
3522
3500
3523
PyMODINIT_FUNC
3501
3524
PyInit_math (void )
3502
3525
{
3503
- PyObject * m ;
3504
-
3505
- m = PyModule_Create (& mathmodule );
3506
- if (m == NULL )
3507
- goto finally ;
3508
-
3509
- PyModule_AddObject (m , "pi" , PyFloat_FromDouble (Py_MATH_PI ));
3510
- PyModule_AddObject (m , "e" , PyFloat_FromDouble (Py_MATH_E ));
3511
- PyModule_AddObject (m , "tau" , PyFloat_FromDouble (Py_MATH_TAU )); /* 2pi */
3512
- PyModule_AddObject (m , "inf" , PyFloat_FromDouble (m_inf ()));
3513
- #if !defined(PY_NO_SHORT_FLOAT_REPR ) || defined(Py_NAN )
3514
- PyModule_AddObject (m , "nan" , PyFloat_FromDouble (m_nan ()));
3515
- #endif
3516
-
3517
- finally :
3518
- return m ;
3526
+ return PyModuleDef_Init (& mathmodule );
3519
3527
}
0 commit comments