summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDong-hee Na <donghee.na92@gmail.com>2020-03-18 14:29:34 (GMT)
committerGitHub <noreply@github.com>2020-03-18 14:29:34 (GMT)
commit4657a8a0d006c76699ba3d1d4d21a04860bb2586 (patch)
tree140718e08140bae6876cc2377176139c23d4edc9
parent56bfdebfb17ea9d3245b1f222e92b8e3b1ed6118 (diff)
downloadcpython-4657a8a0d006c76699ba3d1d4d21a04860bb2586.zip
cpython-4657a8a0d006c76699ba3d1d4d21a04860bb2586.tar.gz
cpython-4657a8a0d006c76699ba3d1d4d21a04860bb2586.tar.bz2
bpo-1635741: Port _heapq module to multiphase initialization (GH19057)
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2020-03-18-19-48-53.bpo-1635741.ELEihr.rst1
-rw-r--r--Modules/_heapqmodule.c31
2 files changed, 20 insertions, 12 deletions
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 0000000..a30559d
--- /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 6bc18b5..4e85e04 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);
}
-