]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-1635741: Port _bz2 extension module to multiphase initialization(PEP 489) (GH...
authorHai Shi <shihai1992@gmail.com>
Tue, 18 Feb 2020 11:17:39 +0000 (19:17 +0800)
committerGitHub <noreply@github.com>
Tue, 18 Feb 2020 11:17:38 +0000 (03:17 -0800)
https://bugs.python.org/issue1635741

Misc/NEWS.d/next/Core and Builtins/2020-01-18-11-06-28.bpo-1635741.OKROOt.rst [new file with mode: 0644]
Modules/_bz2module.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-18-11-06-28.bpo-1635741.OKROOt.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-18-11-06-28.bpo-1635741.OKROOt.rst
new file mode 100644 (file)
index 0000000..d3f12a7
--- /dev/null
@@ -0,0 +1 @@
+Port _bz2 extension module to multiphase initialization (:pep:`489`).
\ No newline at end of file
index 31bbf66104119cd1c97328241ed0da688c3c2c97..fe5880989873e7b6994e23795935efa62c6a0c1a 100644 (file)
@@ -728,13 +728,45 @@ static PyTypeObject BZ2Decompressor_Type = {
 
 /* Module initialization. */
 
+static int
+_bz2_exec(PyObject *module)
+{
+    if (PyType_Ready(&BZ2Compressor_Type) < 0) {
+        return -1;
+    }
+    if (PyType_Ready(&BZ2Decompressor_Type) < 0) {
+        return -1;
+    }
+
+    Py_INCREF(&BZ2Compressor_Type);
+    if (PyModule_AddObject(module, "BZ2Compressor",
+                           (PyObject *)&BZ2Compressor_Type) < 0) {
+        Py_DECREF(&BZ2Compressor_Type);
+        return -1;
+    }
+
+    Py_INCREF(&BZ2Decompressor_Type);
+    if (PyModule_AddObject(module, "BZ2Decompressor",
+                           (PyObject *)&BZ2Decompressor_Type) < 0) {
+        Py_INCREF(&BZ2Decompressor_Type);
+        return -1;
+    }
+
+    return 0;
+}
+
+static struct PyModuleDef_Slot _bz2_slots[] = {
+    {Py_mod_exec, _bz2_exec},
+    {0, NULL}
+};
+
 static struct PyModuleDef _bz2module = {
     PyModuleDef_HEAD_INIT,
     "_bz2",
     NULL,
-    -1,
-    NULL,
+    0,
     NULL,
+    _bz2_slots,
     NULL,
     NULL,
     NULL
@@ -743,23 +775,5 @@ static struct PyModuleDef _bz2module = {
 PyMODINIT_FUNC
 PyInit__bz2(void)
 {
-    PyObject *m;
-
-    if (PyType_Ready(&BZ2Compressor_Type) < 0)
-        return NULL;
-    if (PyType_Ready(&BZ2Decompressor_Type) < 0)
-        return NULL;
-
-    m = PyModule_Create(&_bz2module);
-    if (m == NULL)
-        return NULL;
-
-    Py_INCREF(&BZ2Compressor_Type);
-    PyModule_AddObject(m, "BZ2Compressor", (PyObject *)&BZ2Compressor_Type);
-
-    Py_INCREF(&BZ2Decompressor_Type);
-    PyModule_AddObject(m, "BZ2Decompressor",
-                       (PyObject *)&BZ2Decompressor_Type);
-
-    return m;
+    return PyModuleDef_Init(&_bz2module);
 }