mirror of https://github.com/python/cpython
bpo-46937: convert remaining functions to AC in _weakref (GH-31705)
This commit is contained in:
parent
496c428de3
commit
5c06dba21b
|
@ -76,12 +76,17 @@ _weakref__remove_dead_weakref_impl(PyObject *module, PyObject *dct,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(weakref_getweakrefs__doc__,
|
/*[clinic input]
|
||||||
"getweakrefs(object) -- return a list of all weak reference objects\n"
|
_weakref.getweakrefs
|
||||||
"that point to 'object'.");
|
object: object
|
||||||
|
/
|
||||||
|
|
||||||
|
Return a list of all weak reference objects pointing to 'object'.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
weakref_getweakrefs(PyObject *self, PyObject *object)
|
_weakref_getweakrefs(PyObject *module, PyObject *object)
|
||||||
|
/*[clinic end generated code: output=25c7731d8e011824 input=00c6d0e5d3206693]*/
|
||||||
{
|
{
|
||||||
PyObject *result = NULL;
|
PyObject *result = NULL;
|
||||||
|
|
||||||
|
@ -107,22 +112,24 @@ weakref_getweakrefs(PyObject *self, PyObject *object)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
PyDoc_STRVAR(weakref_proxy__doc__,
|
/*[clinic input]
|
||||||
"proxy(object[, callback]) -- create a proxy object that weakly\n"
|
|
||||||
"references 'object'. 'callback', if given, is called with a\n"
|
_weakref.proxy
|
||||||
"reference to the proxy when 'object' is about to be finalized.");
|
object: object
|
||||||
|
callback: object(c_default="NULL") = None
|
||||||
|
/
|
||||||
|
|
||||||
|
Create a proxy object that weakly references 'object'.
|
||||||
|
|
||||||
|
'callback', if given, is called with a reference to the
|
||||||
|
proxy when 'object' is about to be finalized.
|
||||||
|
[clinic start generated code]*/
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
weakref_proxy(PyObject *self, PyObject *args)
|
_weakref_proxy_impl(PyObject *module, PyObject *object, PyObject *callback)
|
||||||
|
/*[clinic end generated code: output=d68fa4ad9ea40519 input=4808adf22fd137e7]*/
|
||||||
{
|
{
|
||||||
PyObject *object;
|
return PyWeakref_NewProxy(object, callback);
|
||||||
PyObject *callback = NULL;
|
|
||||||
PyObject *result = NULL;
|
|
||||||
|
|
||||||
if (PyArg_UnpackTuple(args, "proxy", 1, 2, &object, &callback)) {
|
|
||||||
result = PyWeakref_NewProxy(object, callback);
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -130,10 +137,8 @@ static PyMethodDef
|
||||||
weakref_functions[] = {
|
weakref_functions[] = {
|
||||||
_WEAKREF_GETWEAKREFCOUNT_METHODDEF
|
_WEAKREF_GETWEAKREFCOUNT_METHODDEF
|
||||||
_WEAKREF__REMOVE_DEAD_WEAKREF_METHODDEF
|
_WEAKREF__REMOVE_DEAD_WEAKREF_METHODDEF
|
||||||
{"getweakrefs", weakref_getweakrefs, METH_O,
|
_WEAKREF_GETWEAKREFS_METHODDEF
|
||||||
weakref_getweakrefs__doc__},
|
_WEAKREF_PROXY_METHODDEF
|
||||||
{"proxy", weakref_proxy, METH_VARARGS,
|
|
||||||
weakref_proxy__doc__},
|
|
||||||
{NULL, NULL, 0, NULL}
|
{NULL, NULL, 0, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -64,4 +64,50 @@ _weakref__remove_dead_weakref(PyObject *module, PyObject *const *args, Py_ssize_
|
||||||
exit:
|
exit:
|
||||||
return return_value;
|
return return_value;
|
||||||
}
|
}
|
||||||
/*[clinic end generated code: output=c543dc2cd6ece975 input=a9049054013a1b77]*/
|
|
||||||
|
PyDoc_STRVAR(_weakref_getweakrefs__doc__,
|
||||||
|
"getweakrefs($module, object, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Return a list of all weak reference objects pointing to \'object\'.");
|
||||||
|
|
||||||
|
#define _WEAKREF_GETWEAKREFS_METHODDEF \
|
||||||
|
{"getweakrefs", (PyCFunction)_weakref_getweakrefs, METH_O, _weakref_getweakrefs__doc__},
|
||||||
|
|
||||||
|
PyDoc_STRVAR(_weakref_proxy__doc__,
|
||||||
|
"proxy($module, object, callback=None, /)\n"
|
||||||
|
"--\n"
|
||||||
|
"\n"
|
||||||
|
"Create a proxy object that weakly references \'object\'.\n"
|
||||||
|
"\n"
|
||||||
|
"\'callback\', if given, is called with a reference to the\n"
|
||||||
|
"proxy when \'object\' is about to be finalized.");
|
||||||
|
|
||||||
|
#define _WEAKREF_PROXY_METHODDEF \
|
||||||
|
{"proxy", (PyCFunction)(void(*)(void))_weakref_proxy, METH_FASTCALL, _weakref_proxy__doc__},
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_weakref_proxy_impl(PyObject *module, PyObject *object, PyObject *callback);
|
||||||
|
|
||||||
|
static PyObject *
|
||||||
|
_weakref_proxy(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
||||||
|
{
|
||||||
|
PyObject *return_value = NULL;
|
||||||
|
PyObject *object;
|
||||||
|
PyObject *callback = NULL;
|
||||||
|
|
||||||
|
if (!_PyArg_CheckPositional("proxy", nargs, 1, 2)) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
object = args[0];
|
||||||
|
if (nargs < 2) {
|
||||||
|
goto skip_optional;
|
||||||
|
}
|
||||||
|
callback = args[1];
|
||||||
|
skip_optional:
|
||||||
|
return_value = _weakref_proxy_impl(module, object, callback);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
return return_value;
|
||||||
|
}
|
||||||
|
/*[clinic end generated code: output=5a10a1fa43722399 input=a9049054013a1b77]*/
|
||||||
|
|
Loading…
Reference in New Issue