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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy