summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaulo Henrique Silva <ph.silva@carta.com>2020-03-25 02:18:47 (GMT)
committerGitHub <noreply@github.com>2020-03-25 02:18:47 (GMT)
commitf3d5ac47720045a72f7ef5af13046d9531e6007b (patch)
treedf79243f48412b811f32e41c3a1d57da3dac3103
parent8f1ed21ecf57cc8b8095d9d1058af2b9b3ed0413 (diff)
downloadcpython-f3d5ac47720045a72f7ef5af13046d9531e6007b.zip
cpython-f3d5ac47720045a72f7ef5af13046d9531e6007b.tar.gz
cpython-f3d5ac47720045a72f7ef5af13046d9531e6007b.tar.bz2
bpo-1635741: Port operator module to multiphase initialization (PEP 489) (GH-19150)
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2020-03-24-22-17-12.bpo-1635741.jWaMRV.rst2
-rw-r--r--Modules/_operator.c49
2 files changed, 28 insertions, 23 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-03-24-22-17-12.bpo-1635741.jWaMRV.rst b/Misc/NEWS.d/next/Core and Builtins/2020-03-24-22-17-12.bpo-1635741.jWaMRV.rst
new file mode 100644
index 0000000..d84626a
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-03-24-22-17-12.bpo-1635741.jWaMRV.rst
@@ -0,0 +1,2 @@
+Port operator module to multiphase initialization (PEP 489). Patch by Paulo
+Henrique Silva.
diff --git a/Modules/_operator.c b/Modules/_operator.c
index 9c54aac..007c21b 100644
--- a/Modules/_operator.c
+++ b/Modules/_operator.c
@@ -1746,16 +1746,38 @@ static PyTypeObject methodcaller_type = {
};
-/* Initialization function for the module (*must* be called PyInit__operator) */
+static int
+operator_exec(PyObject *module)
+{
+ PyTypeObject *types[] = {
+ &itemgetter_type,
+ &attrgetter_type,
+ &methodcaller_type
+ };
+
+ for (size_t i = 0; i < Py_ARRAY_LENGTH(types); i++) {
+ if (PyModule_AddType(module, types[i]) < 0) {
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+
+static struct PyModuleDef_Slot operator_slots[] = {
+ {Py_mod_exec, operator_exec},
+ {0, NULL}
+};
static struct PyModuleDef operatormodule = {
PyModuleDef_HEAD_INIT,
"_operator",
operator_doc,
- -1,
+ 0,
operator_methods,
- NULL,
+ operator_slots,
NULL,
NULL,
NULL
@@ -1764,24 +1786,5 @@ static struct PyModuleDef operatormodule = {
PyMODINIT_FUNC
PyInit__operator(void)
{
- PyObject *m;
-
- /* Create the module and add the functions */
- m = PyModule_Create(&operatormodule);
- if (m == NULL)
- return NULL;
-
- PyTypeObject *types[] = {
- &itemgetter_type,
- &attrgetter_type,
- &methodcaller_type
- };
-
- for (size_t i = 0; i < Py_ARRAY_LENGTH(types); i++) {
- if (PyModule_AddType(m, types[i]) < 0) {
- return NULL;
- }
- }
-
- return m;
+ return PyModuleDef_Init(&operatormodule);
}