| #include "pyconfig.h" // Py_GIL_DISABLED |
| #ifndef Py_GIL_DISABLED |
| // Need limited C API 3.5 for PyModule_AddFunctions() |
| # define Py_LIMITED_API 0x03050000 |
| #endif |
| |
| #include "parts.h" |
| #include "util.h" |
| |
| |
| static PyObject * |
| pyweakref_check(PyObject *module, PyObject *obj) |
| { |
| NULLABLE(obj); |
| return PyLong_FromLong(PyWeakref_Check(obj)); |
| } |
| |
| static PyObject * |
| pyweakref_checkref(PyObject *module, PyObject *obj) |
| { |
| NULLABLE(obj); |
| return PyLong_FromLong(PyWeakref_CheckRef(obj)); |
| } |
| |
| static PyObject * |
| pyweakref_checkrefexact(PyObject *module, PyObject *obj) |
| { |
| NULLABLE(obj); |
| return PyLong_FromLong(PyWeakref_CheckRefExact(obj)); |
| } |
| |
| static PyObject * |
| pyweakref_checkproxy(PyObject *module, PyObject *obj) |
| { |
| NULLABLE(obj); |
| return PyLong_FromLong(PyWeakref_CheckProxy(obj)); |
| } |
| |
| static PyObject * |
| pyweakref_newref(PyObject *module, PyObject *args) |
| { |
| PyObject *obj; |
| PyObject *callback = NULL; |
| if (!PyArg_ParseTuple(args, "O|O", &obj, &callback)) { |
| return NULL; |
| } |
| NULLABLE(obj); |
| return PyWeakref_NewRef(obj, callback); |
| } |
| |
| static PyObject * |
| pyweakref_newproxy(PyObject *module, PyObject *args) |
| { |
| PyObject *obj; |
| PyObject *callback = NULL; |
| if (!PyArg_ParseTuple(args, "O|O", &obj, &callback)) { |
| return NULL; |
| } |
| NULLABLE(obj); |
| return PyWeakref_NewProxy(obj, callback); |
| } |
| |
| |
| static PyMethodDef test_methods[] = { |
| {"pyweakref_check", pyweakref_check, METH_O}, |
| {"pyweakref_checkref", pyweakref_checkref, METH_O}, |
| {"pyweakref_checkrefexact", pyweakref_checkrefexact, METH_O}, |
| {"pyweakref_checkproxy", pyweakref_checkproxy, METH_O}, |
| {"pyweakref_newref", pyweakref_newref, METH_VARARGS}, |
| {"pyweakref_newproxy", pyweakref_newproxy, METH_VARARGS}, |
| {NULL}, |
| }; |
| |
| int |
| _PyTestLimitedCAPI_Init_Weakref(PyObject *m) |
| { |
| return PyModule_AddFunctions(m, test_methods); |
| } |