mirror of
https://github.com/python/cpython.git
synced 2025-10-12 01:43:12 +00:00
bpo-1635741: Port itertools module to multiphase initialization (GH-19044)
This commit is contained in:
parent
ebf6bb9f5e
commit
514c469719
2 changed files with 43 additions and 35 deletions
|
@ -0,0 +1 @@
|
||||||
|
Port itertools module to multiphase initialization (:pep:`489`).
|
|
@ -4701,31 +4701,9 @@ combinations(p, r)\n\
|
||||||
combinations_with_replacement(p, r)\n\
|
combinations_with_replacement(p, r)\n\
|
||||||
");
|
");
|
||||||
|
|
||||||
|
static int
|
||||||
static PyMethodDef module_methods[] = {
|
itertoolsmodule_exec(PyObject *m)
|
||||||
ITERTOOLS_TEE_METHODDEF
|
|
||||||
{NULL, NULL} /* sentinel */
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static struct PyModuleDef itertoolsmodule = {
|
|
||||||
PyModuleDef_HEAD_INIT,
|
|
||||||
"itertools",
|
|
||||||
module_doc,
|
|
||||||
-1,
|
|
||||||
module_methods,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
PyMODINIT_FUNC
|
|
||||||
PyInit_itertools(void)
|
|
||||||
{
|
{
|
||||||
int i;
|
|
||||||
PyObject *m;
|
|
||||||
const char *name;
|
|
||||||
PyTypeObject *typelist[] = {
|
PyTypeObject *typelist[] = {
|
||||||
&accumulate_type,
|
&accumulate_type,
|
||||||
&combinations_type,
|
&combinations_type,
|
||||||
|
@ -4751,19 +4729,48 @@ PyInit_itertools(void)
|
||||||
};
|
};
|
||||||
|
|
||||||
Py_SET_TYPE(&teedataobject_type, &PyType_Type);
|
Py_SET_TYPE(&teedataobject_type, &PyType_Type);
|
||||||
m = PyModule_Create(&itertoolsmodule);
|
|
||||||
if (m == NULL) {
|
for (int i = 0; typelist[i] != NULL; i++) {
|
||||||
return NULL;
|
PyTypeObject *type = typelist[i];
|
||||||
|
if (PyType_Ready(type) < 0) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
const char *name = _PyType_Name(type);
|
||||||
|
Py_INCREF(type);
|
||||||
|
if (PyModule_AddObject(m, name, (PyObject *)type) < 0) {
|
||||||
|
Py_DECREF(type);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0 ; typelist[i] != NULL ; i++) {
|
return 0;
|
||||||
if (PyType_Ready(typelist[i]) < 0) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
name = _PyType_Name(typelist[i]);
|
|
||||||
Py_INCREF(typelist[i]);
|
|
||||||
PyModule_AddObject(m, name, (PyObject *)typelist[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return m;
|
static struct PyModuleDef_Slot itertoolsmodule_slots[] = {
|
||||||
|
{Py_mod_exec, itertoolsmodule_exec},
|
||||||
|
{0, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
static PyMethodDef module_methods[] = {
|
||||||
|
ITERTOOLS_TEE_METHODDEF
|
||||||
|
{NULL, NULL} /* sentinel */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
static struct PyModuleDef itertoolsmodule = {
|
||||||
|
PyModuleDef_HEAD_INIT,
|
||||||
|
"itertools",
|
||||||
|
module_doc,
|
||||||
|
0,
|
||||||
|
module_methods,
|
||||||
|
itertoolsmodule_slots,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
PyMODINIT_FUNC
|
||||||
|
PyInit_itertools(void)
|
||||||
|
{
|
||||||
|
return PyModuleDef_Init(&itertoolsmodule);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue