cpython/Modules/_testcapi/weakref.c
Miss Islington (bot) 2d432f21db
[3.15] gh-151130: Add more tests for PyWeakref_* C API (GH-151131) (GH-151140)
(cherry picked from commit c3cd75afdf)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
2026-06-09 11:37:56 +00:00

46 lines
963 B
C

#include "parts.h"
#include "util.h"
static PyObject *
pyweakref_getref(PyObject *module, PyObject *ref)
{
NULLABLE(ref);
PyObject *obj = UNINITIALIZED_PTR;
int rc = PyWeakref_GetRef(ref, &obj);
if (rc == -1 && PyErr_Occurred()) {
assert(obj == NULL);
return NULL;
}
if (obj == NULL) {
return Py_BuildValue("i", rc);
}
else {
assert(obj != UNINITIALIZED_PTR);
return Py_BuildValue("iN", rc, obj);
}
}
static PyObject *
pyweakref_isdead(PyObject *module, PyObject *obj)
{
NULLABLE(obj);
int rc = PyWeakref_IsDead(obj);
if (rc == -1 && PyErr_Occurred()) {
return NULL;
}
return PyLong_FromLong(rc);
}
static PyMethodDef test_methods[] = {
{"pyweakref_getref", pyweakref_getref, METH_O},
{"pyweakref_isdead", pyweakref_isdead, METH_O},
{NULL},
};
int
_PyTestCapi_Init_Weakref(PyObject *m)
{
return PyModule_AddFunctions(m, test_methods);
}