| #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); | |
| } |