https://github.com/python/cpython/commit/df5212df6c6f08308c68de4b3ed8a1b51ac6334b
commit: df5212df6c6f08308c68de4b3ed8a1b51ac6334b
branch: main
author: Sam Gross <[email protected]>
committer: colesbury <[email protected]>
date: 2024-02-28T15:37:59-05:00
summary:
gh-112529: Simplify PyObject_GC_IsTracked and PyObject_GC_IsFinalized (#114732)
files:
M Modules/clinic/gcmodule.c.h
M Modules/gcmodule.c
M Python/gc_free_threading.c
diff --git a/Modules/clinic/gcmodule.c.h b/Modules/clinic/gcmodule.c.h
index d50d170589a2cd..9fff4da616ba00 100644
--- a/Modules/clinic/gcmodule.c.h
+++ b/Modules/clinic/gcmodule.c.h
@@ -469,6 +469,25 @@ PyDoc_STRVAR(gc_is_tracked__doc__,
#define GC_IS_TRACKED_METHODDEF \
{"is_tracked", (PyCFunction)gc_is_tracked, METH_O, gc_is_tracked__doc__},
+static int
+gc_is_tracked_impl(PyObject *module, PyObject *obj);
+
+static PyObject *
+gc_is_tracked(PyObject *module, PyObject *obj)
+{
+ PyObject *return_value = NULL;
+ int _return_value;
+
+ _return_value = gc_is_tracked_impl(module, obj);
+ if ((_return_value == -1) && PyErr_Occurred()) {
+ goto exit;
+ }
+ return_value = PyBool_FromLong((long)_return_value);
+
+exit:
+ return return_value;
+}
+
PyDoc_STRVAR(gc_is_finalized__doc__,
"is_finalized($module, obj, /)\n"
"--\n"
@@ -478,6 +497,25 @@ PyDoc_STRVAR(gc_is_finalized__doc__,
#define GC_IS_FINALIZED_METHODDEF \
{"is_finalized", (PyCFunction)gc_is_finalized, METH_O,
gc_is_finalized__doc__},
+static int
+gc_is_finalized_impl(PyObject *module, PyObject *obj);
+
+static PyObject *
+gc_is_finalized(PyObject *module, PyObject *obj)
+{
+ PyObject *return_value = NULL;
+ int _return_value;
+
+ _return_value = gc_is_finalized_impl(module, obj);
+ if ((_return_value == -1) && PyErr_Occurred()) {
+ goto exit;
+ }
+ return_value = PyBool_FromLong((long)_return_value);
+
+exit:
+ return return_value;
+}
+
PyDoc_STRVAR(gc_freeze__doc__,
"freeze($module, /)\n"
"--\n"
@@ -547,4 +585,4 @@ gc_get_freeze_count(PyObject *module, PyObject
*Py_UNUSED(ignored))
exit:
return return_value;
}
-/*[clinic end generated code: output=258f92524c1141fc input=a9049054013a1b77]*/
+/*[clinic end generated code: output=0a7e91917adcb937 input=a9049054013a1b77]*/
diff --git a/Modules/gcmodule.c b/Modules/gcmodule.c
index 961165e16a0fee..9807d2e7d48a36 100644
--- a/Modules/gcmodule.c
+++ b/Modules/gcmodule.c
@@ -383,7 +383,7 @@ gc_get_stats_impl(PyObject *module)
/*[clinic input]
-gc.is_tracked
+gc.is_tracked -> bool
obj: object
/
@@ -393,21 +393,15 @@ Returns true if the object is tracked by the garbage
collector.
Simple atomic objects will return false.
[clinic start generated code]*/
-static PyObject *
-gc_is_tracked(PyObject *module, PyObject *obj)
-/*[clinic end generated code: output=14f0103423b28e31 input=d83057f170ea2723]*/
+static int
+gc_is_tracked_impl(PyObject *module, PyObject *obj)
+/*[clinic end generated code: output=91c8d086b7f47a33 input=423b98ec680c3126]*/
{
- PyObject *result;
-
- if (_PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj))
- result = Py_True;
- else
- result = Py_False;
- return Py_NewRef(result);
+ return PyObject_GC_IsTracked(obj);
}
/*[clinic input]
-gc.is_finalized
+gc.is_finalized -> bool
obj: object
/
@@ -415,14 +409,11 @@ gc.is_finalized
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]*/
+static int
+gc_is_finalized_impl(PyObject *module, PyObject *obj)
+/*[clinic end generated code: output=401ff5d6fc660429 input=ca4d111c8f8c4e3a]*/
{
- if (_PyObject_IS_GC(obj) && _PyGC_FINALIZED(obj)) {
- Py_RETURN_TRUE;
- }
- Py_RETURN_FALSE;
+ return PyObject_GC_IsFinalized(obj);
}
/*[clinic input]
diff --git a/Python/gc_free_threading.c b/Python/gc_free_threading.c
index 14790899825de1..d4fb50106093ee 100644
--- a/Python/gc_free_threading.c
+++ b/Python/gc_free_threading.c
@@ -1693,19 +1693,13 @@ PyObject_GC_Del(void *op)
int
PyObject_GC_IsTracked(PyObject* obj)
{
- if (_PyObject_IS_GC(obj) && _PyObject_GC_IS_TRACKED(obj)) {
- return 1;
- }
- return 0;
+ return _PyObject_GC_IS_TRACKED(obj);
}
int
PyObject_GC_IsFinalized(PyObject *obj)
{
- if (_PyObject_IS_GC(obj) && _PyGC_FINALIZED(obj)) {
- return 1;
- }
- return 0;
+ return _PyGC_FINALIZED(obj);
}
struct custom_visitor_args {
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]