bpo-1635741: Port _weakref extension module to multiphase initialization (PEP 489) (GH-19084)

This commit is contained in:
Hai Shi 2020-03-20 16:16:45 +08:00 committed by GitHub
parent 2de7ac9798
commit 8334f30a74
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 21 deletions

View file

@ -0,0 +1 @@
Port _weakref extension module to multiphase initialization (:pep:`489`).

View file

@ -136,14 +136,48 @@ weakref_functions[] = {
{NULL, NULL, 0, NULL} {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 = { static struct PyModuleDef weakrefmodule = {
PyModuleDef_HEAD_INIT, PyModuleDef_HEAD_INIT,
"_weakref", "_weakref",
"Weak-reference support module.", "Weak-reference support module.",
-1, 0,
weakref_functions, weakref_functions,
NULL, weakref_slots,
NULL, NULL,
NULL, NULL,
NULL NULL
@ -152,23 +186,5 @@ static struct PyModuleDef weakrefmodule = {
PyMODINIT_FUNC PyMODINIT_FUNC
PyInit__weakref(void) PyInit__weakref(void)
{ {
PyObject *m; return PyModuleDef_Init(&weakrefmodule);
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;
} }