Skip to content

Commit

Permalink
bpo-1635741: Port _weakref extension module to multiphase initializat…
Browse files Browse the repository at this point in the history
…ion (PEP 489) (pythonGH-19084)
  • Loading branch information
shihai1991 committed Mar 20, 2020
1 parent 2de7ac9 commit 8334f30
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Port _weakref extension module to multiphase initialization (:pep:`489`).
58 changes: 37 additions & 21 deletions Modules/_weakref.c
Original file line number Diff line number Diff line change
Expand Up @@ -136,14 +136,48 @@ weakref_functions[] = {
{NULL, NULL, 0, NULL}
};

static int
weakref_exec(PyObject *module)
{
Py_INCREF(&_PyWeakref_RefType);
if (PyModule_AddObject(module, "ref", (PyObject *) &_PyWeakref_RefType) < 0) {
Py_DECREF(&_PyWeakref_RefType);
return -1;
}
Py_INCREF(&_PyWeakref_RefType);
if (PyModule_AddObject(module, "ReferenceType",
(PyObject *) &_PyWeakref_RefType) < 0) {
Py_DECREF(&_PyWeakref_RefType);
return -1;
}
Py_INCREF(&_PyWeakref_ProxyType);
if (PyModule_AddObject(module, "ProxyType",
(PyObject *) &_PyWeakref_ProxyType) < 0) {
Py_DECREF(&_PyWeakref_ProxyType);
return -1;
}
Py_INCREF(&_PyWeakref_CallableProxyType);
if (PyModule_AddObject(module, "CallableProxyType",
(PyObject *) &_PyWeakref_CallableProxyType) < 0) {
Py_DECREF(&_PyWeakref_CallableProxyType);
return -1;
}

return 0;
}

static struct PyModuleDef_Slot weakref_slots[] = {
{Py_mod_exec, weakref_exec},
{0, NULL}
};

static struct PyModuleDef weakrefmodule = {
PyModuleDef_HEAD_INIT,
"_weakref",
"Weak-reference support module.",
-1,
0,
weakref_functions,
NULL,
weakref_slots,
NULL,
NULL,
NULL
Expand All @@ -152,23 +186,5 @@ static struct PyModuleDef weakrefmodule = {
PyMODINIT_FUNC
PyInit__weakref(void)
{
PyObject *m;

m = PyModule_Create(&weakrefmodule);

if (m != NULL) {
Py_INCREF(&_PyWeakref_RefType);
PyModule_AddObject(m, "ref",
(PyObject *) &_PyWeakref_RefType);
Py_INCREF(&_PyWeakref_RefType);
PyModule_AddObject(m, "ReferenceType",
(PyObject *) &_PyWeakref_RefType);
Py_INCREF(&_PyWeakref_ProxyType);
PyModule_AddObject(m, "ProxyType",
(PyObject *) &_PyWeakref_ProxyType);
Py_INCREF(&_PyWeakref_CallableProxyType);
PyModule_AddObject(m, "CallableProxyType",
(PyObject *) &_PyWeakref_CallableProxyType);
}
return m;
return PyModuleDef_Init(&weakrefmodule);
}

0 comments on commit 8334f30

Please sign in to comment.