diff options
author | Paulo Henrique Silva <ph.silva@carta.com> | 2020-03-25 02:18:47 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-25 02:18:47 (GMT) |
commit | f3d5ac47720045a72f7ef5af13046d9531e6007b (patch) | |
tree | df79243f48412b811f32e41c3a1d57da3dac3103 | |
parent | 8f1ed21ecf57cc8b8095d9d1058af2b9b3ed0413 (diff) | |
download | cpython-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.rst | 2 | ||||
-rw-r--r-- | Modules/_operator.c | 49 |
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); } |