From 4657a8a0d006c76699ba3d1d4d21a04860bb2586 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Wed, 18 Mar 2020 23:29:34 +0900 Subject: [PATCH] bpo-1635741: Port _heapq module to multiphase initialization (GH19057) --- ...2020-03-18-19-48-53.bpo-1635741.ELEihr.rst | 1 + Modules/_heapqmodule.c | 31 ++++++++++++------- 2 files changed, 20 insertions(+), 12 deletions(-) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-03-18-19-48-53.bpo-1635741.ELEihr.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-03-18-19-48-53.bpo-1635741.ELEihr.rst b/Misc/NEWS.d/next/Core and Builtins/2020-03-18-19-48-53.bpo-1635741.ELEihr.rst new file mode 100644 index 00000000000..a30559db558 --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-03-18-19-48-53.bpo-1635741.ELEihr.rst @@ -0,0 +1 @@ +Port _heapq module to multiphase initialization. diff --git a/Modules/_heapqmodule.c b/Modules/_heapqmodule.c index 6bc18b5f82f..4e85e046d38 100644 --- a/Modules/_heapqmodule.c +++ b/Modules/_heapqmodule.c @@ -555,7 +555,6 @@ _heapq__heapify_max(PyObject *module, PyObject *heap) return heapify_internal(heap, siftup_max); } - static PyMethodDef heapq_methods[] = { _HEAPQ_HEAPPUSH_METHODDEF _HEAPQ_HEAPPUSHPOP_METHODDEF @@ -694,13 +693,29 @@ Believe me, real good tape sorts were quite spectacular to watch!\n\ From all times, sorting has always been a Great Art! :-)\n"); +static int +heapq_exec(PyObject *m) +{ + PyObject *about = PyUnicode_FromString(__about__); + if (PyModule_AddObject(m, "__about__", about) < 0) { + Py_DECREF(about); + return -1; + } + return 0; +} + +static struct PyModuleDef_Slot heapq_slots[] = { + {Py_mod_exec, heapq_exec}, + {0, NULL} +}; + static struct PyModuleDef _heapqmodule = { PyModuleDef_HEAD_INIT, "_heapq", module_doc, - -1, + 0, heapq_methods, - NULL, + heapq_slots, NULL, NULL, NULL @@ -709,13 +724,5 @@ static struct PyModuleDef _heapqmodule = { PyMODINIT_FUNC PyInit__heapq(void) { - PyObject *m, *about; - - m = PyModule_Create(&_heapqmodule); - if (m == NULL) - return NULL; - about = PyUnicode_DecodeUTF8(__about__, strlen(__about__), NULL); - PyModule_AddObject(m, "__about__", about); - return m; + return PyModuleDef_Init(&_heapqmodule); } -