From a2ec3f07f7f028ff6229d6be2a7cfbda1f4efaeb Mon Sep 17 00:00:00 2001 From: Pablo Galindo Date: Tue, 14 Jan 2020 12:06:45 +0000 Subject: bpo-39322: Add gc.is_finalized to check if an object has been finalised by the gc (GH-17989) --- Modules/gcmodule.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'Modules/gcmodule.c') diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c index 5fef114d73..4ad9d228f5 100644 --- a/Modules/gcmodule.c +++ b/Modules/gcmodule.c @@ -1869,6 +1869,25 @@ gc_is_tracked(PyObject *module, PyObject *obj) return result; } +/*[clinic input] +gc.is_finalized + + obj: object + / + +Returns true if the object has been already finalized by the GC. +[clinic start generated code]*/ + +static PyObject * +gc_is_finalized(PyObject *module, PyObject *obj) +/*[clinic end generated code: output=e1516ac119a918ed input=201d0c58f69ae390]*/ +{ + if (PyObject_IS_GC(obj) && _PyGCHead_FINALIZED(AS_GC(obj))) { + Py_RETURN_TRUE; + } + Py_RETURN_FALSE; +} + /*[clinic input] gc.freeze @@ -1961,6 +1980,7 @@ static PyMethodDef GcMethods[] = { GC_GET_OBJECTS_METHODDEF GC_GET_STATS_METHODDEF GC_IS_TRACKED_METHODDEF + GC_IS_FINALIZED_METHODDEF {"get_referrers", gc_get_referrers, METH_VARARGS, gc_get_referrers__doc__}, {"get_referents", gc_get_referents, METH_VARARGS, -- cgit v1.2.1