diff options
author | Hai Shi <shihai1992@gmail.com> | 2020-02-18 11:17:39 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-18 11:17:38 (GMT) |
commit | 5d38517aa1836542a5417b724c093bcb245f0f47 (patch) | |
tree | 914b583c5f482d08fb0d4ab048f44b7d1587f1bd /Modules | |
parent | 8edfc47baec7ff4cb1b9db83dd35c8ffc1d498a4 (diff) | |
download | cpython-5d38517aa1836542a5417b724c093bcb245f0f47.zip cpython-5d38517aa1836542a5417b724c093bcb245f0f47.tar.gz cpython-5d38517aa1836542a5417b724c093bcb245f0f47.tar.bz2 |
bpo-1635741: Port _bz2 extension module to multiphase initialization(PEP 489) (GH-18050)
https://bugs.python.org/issue1635741
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_bz2module.c | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/Modules/_bz2module.c b/Modules/_bz2module.c index 31bbf66..fe58809 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); } |