17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(_weakref_getweakrefcount__doc__,
67db96d56Sopenharmony_ci"getweakrefcount($module, object, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Return the number of weak references to \'object\'.");
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci#define _WEAKREF_GETWEAKREFCOUNT_METHODDEF    \
127db96d56Sopenharmony_ci    {"getweakrefcount", (PyCFunction)_weakref_getweakrefcount, METH_O, _weakref_getweakrefcount__doc__},
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_cistatic Py_ssize_t
157db96d56Sopenharmony_ci_weakref_getweakrefcount_impl(PyObject *module, PyObject *object);
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_cistatic PyObject *
187db96d56Sopenharmony_ci_weakref_getweakrefcount(PyObject *module, PyObject *object)
197db96d56Sopenharmony_ci{
207db96d56Sopenharmony_ci    PyObject *return_value = NULL;
217db96d56Sopenharmony_ci    Py_ssize_t _return_value;
227db96d56Sopenharmony_ci
237db96d56Sopenharmony_ci    _return_value = _weakref_getweakrefcount_impl(module, object);
247db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
257db96d56Sopenharmony_ci        goto exit;
267db96d56Sopenharmony_ci    }
277db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
287db96d56Sopenharmony_ci
297db96d56Sopenharmony_ciexit:
307db96d56Sopenharmony_ci    return return_value;
317db96d56Sopenharmony_ci}
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ciPyDoc_STRVAR(_weakref__remove_dead_weakref__doc__,
347db96d56Sopenharmony_ci"_remove_dead_weakref($module, dct, key, /)\n"
357db96d56Sopenharmony_ci"--\n"
367db96d56Sopenharmony_ci"\n"
377db96d56Sopenharmony_ci"Atomically remove key from dict if it points to a dead weakref.");
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ci#define _WEAKREF__REMOVE_DEAD_WEAKREF_METHODDEF    \
407db96d56Sopenharmony_ci    {"_remove_dead_weakref", _PyCFunction_CAST(_weakref__remove_dead_weakref), METH_FASTCALL, _weakref__remove_dead_weakref__doc__},
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_cistatic PyObject *
437db96d56Sopenharmony_ci_weakref__remove_dead_weakref_impl(PyObject *module, PyObject *dct,
447db96d56Sopenharmony_ci                                   PyObject *key);
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_cistatic PyObject *
477db96d56Sopenharmony_ci_weakref__remove_dead_weakref(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
487db96d56Sopenharmony_ci{
497db96d56Sopenharmony_ci    PyObject *return_value = NULL;
507db96d56Sopenharmony_ci    PyObject *dct;
517db96d56Sopenharmony_ci    PyObject *key;
527db96d56Sopenharmony_ci
537db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("_remove_dead_weakref", nargs, 2, 2)) {
547db96d56Sopenharmony_ci        goto exit;
557db96d56Sopenharmony_ci    }
567db96d56Sopenharmony_ci    if (!PyDict_Check(args[0])) {
577db96d56Sopenharmony_ci        _PyArg_BadArgument("_remove_dead_weakref", "argument 1", "dict", args[0]);
587db96d56Sopenharmony_ci        goto exit;
597db96d56Sopenharmony_ci    }
607db96d56Sopenharmony_ci    dct = args[0];
617db96d56Sopenharmony_ci    key = args[1];
627db96d56Sopenharmony_ci    return_value = _weakref__remove_dead_weakref_impl(module, dct, key);
637db96d56Sopenharmony_ci
647db96d56Sopenharmony_ciexit:
657db96d56Sopenharmony_ci    return return_value;
667db96d56Sopenharmony_ci}
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ciPyDoc_STRVAR(_weakref_getweakrefs__doc__,
697db96d56Sopenharmony_ci"getweakrefs($module, object, /)\n"
707db96d56Sopenharmony_ci"--\n"
717db96d56Sopenharmony_ci"\n"
727db96d56Sopenharmony_ci"Return a list of all weak reference objects pointing to \'object\'.");
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ci#define _WEAKREF_GETWEAKREFS_METHODDEF    \
757db96d56Sopenharmony_ci    {"getweakrefs", (PyCFunction)_weakref_getweakrefs, METH_O, _weakref_getweakrefs__doc__},
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ciPyDoc_STRVAR(_weakref_proxy__doc__,
787db96d56Sopenharmony_ci"proxy($module, object, callback=None, /)\n"
797db96d56Sopenharmony_ci"--\n"
807db96d56Sopenharmony_ci"\n"
817db96d56Sopenharmony_ci"Create a proxy object that weakly references \'object\'.\n"
827db96d56Sopenharmony_ci"\n"
837db96d56Sopenharmony_ci"\'callback\', if given, is called with a reference to the\n"
847db96d56Sopenharmony_ci"proxy when \'object\' is about to be finalized.");
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci#define _WEAKREF_PROXY_METHODDEF    \
877db96d56Sopenharmony_ci    {"proxy", _PyCFunction_CAST(_weakref_proxy), METH_FASTCALL, _weakref_proxy__doc__},
887db96d56Sopenharmony_ci
897db96d56Sopenharmony_cistatic PyObject *
907db96d56Sopenharmony_ci_weakref_proxy_impl(PyObject *module, PyObject *object, PyObject *callback);
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_cistatic PyObject *
937db96d56Sopenharmony_ci_weakref_proxy(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
947db96d56Sopenharmony_ci{
957db96d56Sopenharmony_ci    PyObject *return_value = NULL;
967db96d56Sopenharmony_ci    PyObject *object;
977db96d56Sopenharmony_ci    PyObject *callback = NULL;
987db96d56Sopenharmony_ci
997db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("proxy", nargs, 1, 2)) {
1007db96d56Sopenharmony_ci        goto exit;
1017db96d56Sopenharmony_ci    }
1027db96d56Sopenharmony_ci    object = args[0];
1037db96d56Sopenharmony_ci    if (nargs < 2) {
1047db96d56Sopenharmony_ci        goto skip_optional;
1057db96d56Sopenharmony_ci    }
1067db96d56Sopenharmony_ci    callback = args[1];
1077db96d56Sopenharmony_ciskip_optional:
1087db96d56Sopenharmony_ci    return_value = _weakref_proxy_impl(module, object, callback);
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ciexit:
1117db96d56Sopenharmony_ci    return return_value;
1127db96d56Sopenharmony_ci}
1137db96d56Sopenharmony_ci/*[clinic end generated code: output=f4be6b8177fbceb8 input=a9049054013a1b77]*/
114