From 1f4adc1bbcbc519d6d38569bfcd1aa0a07fac1d4 Mon Sep 17 00:00:00 2001 From: Hai Shi Date: Sun, 19 Jan 2020 19:21:52 +0800 Subject: [PATCH 1/2] Port _collections extension module to multiphase initialization(PEP 489) --- Modules/_collectionsmodule.c | 69 +++++++++++++++++++----------------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c index 1d23973fd05661..4d95c6f5930098 100644 --- a/Modules/_collectionsmodule.c +++ b/Modules/_collectionsmodule.c @@ -2518,55 +2518,60 @@ static struct PyMethodDef module_functions[] = { {NULL, NULL} /* sentinel */ }; -static struct PyModuleDef _collectionsmodule = { - PyModuleDef_HEAD_INIT, - "_collections", - module_doc, - -1, - module_functions, - NULL, - NULL, - NULL, - NULL -}; - -PyMODINIT_FUNC -PyInit__collections(void) +static int +_collections_exec(PyObject *module) { - PyObject *m; - - m = PyModule_Create(&_collectionsmodule); - if (m == NULL) - return NULL; - if (PyType_Ready(&deque_type) < 0) - return NULL; + return -1; Py_INCREF(&deque_type); - PyModule_AddObject(m, "deque", (PyObject *)&deque_type); + PyModule_AddObject(module, "deque", (PyObject *)&deque_type); defdict_type.tp_base = &PyDict_Type; if (PyType_Ready(&defdict_type) < 0) - return NULL; + return -1; Py_INCREF(&defdict_type); - PyModule_AddObject(m, "defaultdict", (PyObject *)&defdict_type); + PyModule_AddObject(module, "defaultdict", (PyObject *)&defdict_type); Py_INCREF(&PyODict_Type); - PyModule_AddObject(m, "OrderedDict", (PyObject *)&PyODict_Type); + PyModule_AddObject(module, "OrderedDict", (PyObject *)&PyODict_Type); if (PyType_Ready(&dequeiter_type) < 0) - return NULL; + return -1; Py_INCREF(&dequeiter_type); - PyModule_AddObject(m, "_deque_iterator", (PyObject *)&dequeiter_type); + PyModule_AddObject(module, "_deque_iterator", (PyObject *)&dequeiter_type); if (PyType_Ready(&dequereviter_type) < 0) - return NULL; + return -1; Py_INCREF(&dequereviter_type); - PyModule_AddObject(m, "_deque_reverse_iterator", (PyObject *)&dequereviter_type); + PyModule_AddObject(module, "_deque_reverse_iterator", (PyObject *)&dequereviter_type); if (PyType_Ready(&tuplegetter_type) < 0) - return NULL; + return -1; Py_INCREF(&tuplegetter_type); - PyModule_AddObject(m, "_tuplegetter", (PyObject *)&tuplegetter_type); + PyModule_AddObject(module, "_tuplegetter", (PyObject *)&tuplegetter_type); + + return 0; +} + +static PyModuleDef_Slot _collections_slots[] = { + {Py_mod_exec, _collections_exec}, + {0, NULL} +}; - return m; +static struct PyModuleDef _collectionsmodule = { + PyModuleDef_HEAD_INIT, + "_collections", + module_doc, + 0, + module_functions, + _collections_slots, + NULL, + NULL, + NULL +}; + +PyMODINIT_FUNC +PyInit__collections(void) +{ + return PyModuleDef_Init(&_collectionsmodule); } From fa235e1ec0ab5ebffbbe34ae9fa08c0ef8074530 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Sun, 19 Jan 2020 11:26:07 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Core and Builtins/2020-01-19-11-26-04.bpo-1635741.v8SgAj.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-26-04.bpo-1635741.v8SgAj.rst diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-26-04.bpo-1635741.v8SgAj.rst b/Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-26-04.bpo-1635741.v8SgAj.rst new file mode 100644 index 00000000000000..06f748eb3e0bee --- /dev/null +++ b/Misc/NEWS.d/next/Core and Builtins/2020-01-19-11-26-04.bpo-1635741.v8SgAj.rst @@ -0,0 +1 @@ +Port _collections extension module to multiphase initialization (:pep:`489`). \ No newline at end of file