]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-1635741: Port _heapq module to multiphase initialization (GH19057)
authorDong-hee Na <donghee.na92@gmail.com>
Wed, 18 Mar 2020 14:29:34 +0000 (23:29 +0900)
committerGitHub <noreply@github.com>
Wed, 18 Mar 2020 14:29:34 +0000 (15:29 +0100)
Misc/NEWS.d/next/Core and Builtins/2020-03-18-19-48-53.bpo-1635741.ELEihr.rst [new file with mode: 0644]
Modules/_heapqmodule.c

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 (file)
index 0000000..a30559d
--- /dev/null
@@ -0,0 +1 @@
+Port _heapq module to multiphase initialization.
index 6bc18b5f82fb82db52cec8b6a90256db928196b9..4e85e046d385a7a1d3da7926d28079efc25888ef 100644 (file)
@@ -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);
 }
-