summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHai Shi <shihai1992@gmail.com>2020-02-18 19:17:39 +0800
committerGitHub <noreply@github.com>2020-02-18 03:17:38 -0800
commit5d38517aa1836542a5417b724c093bcb245f0f47 (patch)
tree914b583c5f482d08fb0d4ab048f44b7d1587f1bd
parent8edfc47baec7ff4cb1b9db83dd35c8ffc1d498a4 (diff)
downloadcpython-git-5d38517aa1836542a5417b724c093bcb245f0f47.tar.gz
bpo-1635741: Port _bz2 extension module to multiphase initialization(PEP 489) (GH-18050)
https://bugs.python.org/issue1635741
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2020-01-18-11-06-28.bpo-1635741.OKROOt.rst1
-rw-r--r--Modules/_bz2module.c56
2 files changed, 36 insertions, 21 deletions
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
index 0000000000..d3f12a7479
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-18-11-06-28.bpo-1635741.OKROOt.rst
@@ -0,0 +1 @@
+Port _bz2 extension module to multiphase initialization (:pep:`489`). \ No newline at end of file
diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c
index 31bbf66104..fe58809898 100644
--- a/Modules/_bz2module.c
+++ b/Modules/_bz2module.c
@@ -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);
}