diff options
author | Dong-hee Na <donghee.na92@gmail.com> | 2020-03-31 14:33:22 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-31 14:33:22 (GMT) |
commit | 5be8241392453751beea21d2e32096c15a8d47db (patch) | |
tree | d075d5b4a008712b3b28525a2ddb1c0b2f2df30d | |
parent | 1cb763b8808745b9a368c1158fda19d329f63f6f (diff) | |
download | cpython-5be8241392453751beea21d2e32096c15a8d47db.zip cpython-5be8241392453751beea21d2e32096c15a8d47db.tar.gz cpython-5be8241392453751beea21d2e32096c15a8d47db.tar.bz2 |
bpo-1635741: Port math module to multiphase initialization (GH-19243)
-rw-r--r-- | Misc/NEWS.d/next/Core and Builtins/2020-03-31-22-15-04.bpo-1635741.8Ir1a0.rst | 1 | ||||
-rw-r--r-- | Modules/mathmodule.c | 58 |
2 files changed, 34 insertions, 25 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-03-31-22-15-04.bpo-1635741.8Ir1a0.rst b/Misc/NEWS.d/next/Core and Builtins/2020-03-31-22-15-04.bpo-1635741.8Ir1a0.rst new file mode 100644 index 0000000..e1c5a29 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-03-31-22-15-04.bpo-1635741.8Ir1a0.rst @@ -0,0 +1 @@ +Port :mod:`math` to multiphase initialization (:pep:`489`). diff --git a/Modules/mathmodule.c b/Modules/mathmodule.c index 2a73a98..f1d59c0 100644 --- a/Modules/mathmodule.c +++ b/Modules/mathmodule.c @@ -3421,6 +3421,29 @@ math_ulp_impl(PyObject *module, double x) return x2 - x; } +static int +math_exec(PyObject *module) +{ + if (PyModule_AddObject(module, "pi", PyFloat_FromDouble(Py_MATH_PI)) < 0) { + return -1; + } + if (PyModule_AddObject(module, "e", PyFloat_FromDouble(Py_MATH_E)) < 0) { + return -1; + } + // 2pi + if (PyModule_AddObject(module, "tau", PyFloat_FromDouble(Py_MATH_TAU)) < 0) { + return -1; + } + if (PyModule_AddObject(module, "inf", PyFloat_FromDouble(m_inf())) < 0) { + return -1; + } +#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) + if (PyModule_AddObject(module, "nan", PyFloat_FromDouble(m_nan())) < 0) { + return -1; + } +#endif + return 0; +} static PyMethodDef math_methods[] = { {"acos", math_acos, METH_O, math_acos_doc}, @@ -3479,41 +3502,26 @@ static PyMethodDef math_methods[] = { {NULL, NULL} /* sentinel */ }; +static PyModuleDef_Slot math_slots[] = { + {Py_mod_exec, math_exec}, + {0, NULL} +}; PyDoc_STRVAR(module_doc, "This module provides access to the mathematical functions\n" "defined by the C standard."); - static struct PyModuleDef mathmodule = { PyModuleDef_HEAD_INIT, - "math", - module_doc, - -1, - math_methods, - NULL, - NULL, - NULL, - NULL + .m_name = "math", + .m_doc = module_doc, + .m_size = 0, + .m_methods = math_methods, + .m_slots = math_slots, }; PyMODINIT_FUNC PyInit_math(void) { - PyObject *m; - - m = PyModule_Create(&mathmodule); - if (m == NULL) - goto finally; - - PyModule_AddObject(m, "pi", PyFloat_FromDouble(Py_MATH_PI)); - PyModule_AddObject(m, "e", PyFloat_FromDouble(Py_MATH_E)); - PyModule_AddObject(m, "tau", PyFloat_FromDouble(Py_MATH_TAU)); /* 2pi */ - PyModule_AddObject(m, "inf", PyFloat_FromDouble(m_inf())); -#if !defined(PY_NO_SHORT_FLOAT_REPR) || defined(Py_NAN) - PyModule_AddObject(m, "nan", PyFloat_FromDouble(m_nan())); -#endif - - finally: - return m; + return PyModuleDef_Init(&mathmodule); } |