bpo-1635741: Port _collections module to multiphase initialization (GH-19074)
This commit is contained in:
parent
9052f7a41b
commit
77248a2889
|
@ -0,0 +1 @@
|
|||
Port _collections module to multiphase initialization (:pep:`489`).
|
|
@ -2546,24 +2546,59 @@ static PyTypeObject tuplegetter_type = {
|
|||
|
||||
/* module level code ********************************************************/
|
||||
|
||||
PyDoc_STRVAR(module_doc,
|
||||
PyDoc_STRVAR(collections_doc,
|
||||
"High performance data structures.\n\
|
||||
- deque: ordered collection accessible from endpoints only\n\
|
||||
- defaultdict: dict subclass with a default value factory\n\
|
||||
");
|
||||
|
||||
static struct PyMethodDef module_functions[] = {
|
||||
static struct PyMethodDef collections_methods[] = {
|
||||
_COLLECTIONS__COUNT_ELEMENTS_METHODDEF
|
||||
{NULL, NULL} /* sentinel */
|
||||
};
|
||||
|
||||
static int
|
||||
collections_exec(PyObject *module) {
|
||||
PyTypeObject *typelist[] = {
|
||||
&deque_type,
|
||||
&defdict_type,
|
||||
&PyODict_Type,
|
||||
&dequeiter_type,
|
||||
&dequereviter_type,
|
||||
&tuplegetter_type,
|
||||
NULL,
|
||||
};
|
||||
|
||||
defdict_type.tp_base = &PyDict_Type;
|
||||
|
||||
for (int i = 0; typelist[i] != NULL; i++) {
|
||||
PyTypeObject *type = typelist[i];
|
||||
if (PyType_Ready(type) < 0) {
|
||||
return -1;
|
||||
}
|
||||
const char *name = _PyType_Name(type);
|
||||
Py_INCREF(type);
|
||||
if (PyModule_AddObject(module, name, (PyObject *)type) < 0) {
|
||||
Py_DECREF(type);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct PyModuleDef_Slot collections_slots[] = {
|
||||
{Py_mod_exec, collections_exec},
|
||||
{0, NULL}
|
||||
};
|
||||
|
||||
static struct PyModuleDef _collectionsmodule = {
|
||||
PyModuleDef_HEAD_INIT,
|
||||
"_collections",
|
||||
module_doc,
|
||||
-1,
|
||||
module_functions,
|
||||
NULL,
|
||||
collections_doc,
|
||||
0,
|
||||
collections_methods,
|
||||
collections_slots,
|
||||
NULL,
|
||||
NULL,
|
||||
NULL
|
||||
|
@ -2572,40 +2607,5 @@ static struct PyModuleDef _collectionsmodule = {
|
|||
PyMODINIT_FUNC
|
||||
PyInit__collections(void)
|
||||
{
|
||||
PyObject *m;
|
||||
|
||||
m = PyModule_Create(&_collectionsmodule);
|
||||
if (m == NULL)
|
||||
return NULL;
|
||||
|
||||
if (PyType_Ready(&deque_type) < 0)
|
||||
return NULL;
|
||||
Py_INCREF(&deque_type);
|
||||
PyModule_AddObject(m, "deque", (PyObject *)&deque_type);
|
||||
|
||||
defdict_type.tp_base = &PyDict_Type;
|
||||
if (PyType_Ready(&defdict_type) < 0)
|
||||
return NULL;
|
||||
Py_INCREF(&defdict_type);
|
||||
PyModule_AddObject(m, "defaultdict", (PyObject *)&defdict_type);
|
||||
|
||||
Py_INCREF(&PyODict_Type);
|
||||
PyModule_AddObject(m, "OrderedDict", (PyObject *)&PyODict_Type);
|
||||
|
||||
if (PyType_Ready(&dequeiter_type) < 0)
|
||||
return NULL;
|
||||
Py_INCREF(&dequeiter_type);
|
||||
PyModule_AddObject(m, "_deque_iterator", (PyObject *)&dequeiter_type);
|
||||
|
||||
if (PyType_Ready(&dequereviter_type) < 0)
|
||||
return NULL;
|
||||
Py_INCREF(&dequereviter_type);
|
||||
PyModule_AddObject(m, "_deque_reverse_iterator", (PyObject *)&dequereviter_type);
|
||||
|
||||
if (PyType_Ready(&tuplegetter_type) < 0)
|
||||
return NULL;
|
||||
Py_INCREF(&tuplegetter_type);
|
||||
PyModule_AddObject(m, "_tuplegetter", (PyObject *)&tuplegetter_type);
|
||||
|
||||
return m;
|
||||
return PyModuleDef_Init(&_collectionsmodule);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue