8000 bpo-1635741: Port _functools module to multiphase initialization (PEP… · python/cpython@7dd549e · GitHub
[go: up one dir, main page]

Skip to content

Commit 7dd549e

Browse files
author
Paulo Henrique Silva
authored
bpo-1635741: Port _functools module to multiphase initialization (PEP 489) (GH-19151)
1 parent f3d5ac4 commit 7dd549e

File tree

2 files changed

+34
-28
lines changed

2 files changed

+34
-28
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Port _functools module to multiphase initialization (PEP 489). Patch by
2+
Paulo Henrique Silva.

Modules/_functoolsmodule.c

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,58 +1400,62 @@ static PyTypeObject lru_cache_type = {
14001400

14011401
/* module level code ********************************************************/
14021402

1403-
PyDoc_STRVAR(module_doc,
1403+
PyDoc_STRVAR(_functools_doc,
14041404
"Tools that operate on functions.");
14051405

1406-
static PyMethodDef module_methods[] = {
1406+
static PyMethodDef _functools_methods[] = {
14071407
{"reduce", functools_reduce, METH_VARARGS, functools_reduce_doc},
14081408
{"cmp_to_key", (PyCFunction)(void(*)(void))functools_cmp_to_key,
14091409
METH_VARARGS | METH_KEYWORDS, functools_cmp_to_key_doc},
14101410
{NULL, NULL} /* sentinel */
14111411
};
14121412

14131413
static void
1414-
module_free(void *m)
1414+
_functools_free(void *m)
14151415
{
14161416
Py_CLEAR(kwd_mark);
14171417
}
14181418

1419-
static struct PyModuleDef _functoolsmodule = {
1420-
PyModuleDef_HEAD_INIT,
1421-
"_functools",
1422-
module_doc,
1423-
-1,
1424-
module_methods,
1425-
NULL,
1426-
NULL,
1427-
NULL,
1428-
module_free,
1429-
};
1430-
1431-
PyMODINIT_FUNC
1432-
PyInit__functools(void)
1419+
static int
1420+
_functools_exec(PyObject *module)
14331421
{
1434-
PyObject *m;
14351422
PyTypeObject *typelist[] = {
14361423
&partial_type,
14371424
&lru_cache_type
14381425
};
14391426

1440-
m = PyModule_Create(&_functoolsmodule);
1441-
if (m == NULL)
1442-
return NULL;
1443-
14441427
kwd_mark = _PyObject_CallNoArg((PyObject *)&PyBaseObject_Type);
14451428
if (!kwd_mark) {
1446-
Py_DECREF(m);
1447-
return NULL;
1429+
return -1;
14481430
}
14491431

14501432
for (size_t i = 0; i < Py_ARRAY_LENGTH(typelist); i++) {
1451-
if (PyModule_AddType(m, typelist[i]) < 0) {
1452-
Py_DECREF(m);
1453-
return NULL;
1433+
if (PyModule_AddType(module, typelist[i]) < 0) {
1434+
return -1;
14541435
}
14551436
}
1456-
return m;
1437+
return 0;
1438+
}
1439+
1440+
static struct PyModuleDef_Slot _functools_slots[] = {
1441+
{Py_mod_exec, _functools_exec},
1442+
{0, NULL}
1443+
};
1444+
1445+
static struct PyModuleDef _functools_module = {
1446+
PyModuleDef_HEAD_INIT,
1447+
"_functools",
1448+
_functools_doc,
1449+
0,
1450+
_functools_methods,
1451+
_functools_slots,
1452+
NULL,
1453+
NULL,
1454+
_functools_free,
1455+
};
1456+
1457+
PyMODINIT_FUNC
1458+
PyInit__functools(void)
1459+
{
1460+
return PyModuleDef_Init(&_functools_module);
14571461
}

0 commit comments

Comments
 (0)
0