https://github.com/python/cpython/commit/275056a7fdcbe36aaac494b4183ae59943a338eb
commit: 275056a7fdcbe36aaac494b4183ae59943a338eb
branch: main
author: Mark Shannon <m...@hotpy.org>
committer: markshannon <m...@hotpy.org>
date: 2025-04-03T09:40:37+01:00
summary:

GH-131904: Fix Py_STACKREF_DEBUG build (GH-132022)

files:
M Include/internal/pycore_stackref.h
M Python/stackrefs.c

diff --git a/Include/internal/pycore_stackref.h 
b/Include/internal/pycore_stackref.h
index 6664a747e2e91b..e6772c96eeb79c 100644
--- a/Include/internal/pycore_stackref.h
+++ b/Include/internal/pycore_stackref.h
@@ -146,14 +146,15 @@ _PyStackRef_CLOSE(_PyStackRef ref, const char *filename, 
int linenumber)
 #define PyStackRef_CLOSE(REF) _PyStackRef_CLOSE((REF), __FILE__, __LINE__)
 
 static inline void
-PyStackRef_XCLOSE(_PyStackRef ref)
+_PyStackRef_XCLOSE(_PyStackRef ref, const char *filename, int linenumber)
 {
     if (PyStackRef_IsNull(ref)) {
         return;
     }
-    PyObject *obj = _Py_stackref_close(ref);
+    PyObject *obj = _Py_stackref_close(ref, filename, linenumber);
     Py_DECREF(obj);
 }
+#define PyStackRef_XCLOSE(REF) _PyStackRef_XCLOSE((REF), __FILE__, __LINE__)
 
 static inline _PyStackRef
 _PyStackRef_DUP(_PyStackRef ref, const char *filename, int linenumber)
@@ -164,7 +165,8 @@ _PyStackRef_DUP(_PyStackRef ref, const char *filename, int 
linenumber)
 }
 #define PyStackRef_DUP(REF) _PyStackRef_DUP(REF, __FILE__, __LINE__)
 
-extern void PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor destruct);
+extern void _PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor 
destruct, const char *filename, int linenumber);
+#define PyStackRef_CLOSE_SPECIALIZED(REF, DESTRUCT) 
_PyStackRef_CLOSE_SPECIALIZED(REF, DESTRUCT, __FILE__, __LINE__)
 
 static inline _PyStackRef
 PyStackRef_MakeHeapSafe(_PyStackRef ref)
@@ -175,7 +177,7 @@ PyStackRef_MakeHeapSafe(_PyStackRef ref)
 static inline _PyStackRef
 PyStackRef_Borrow(_PyStackRef ref)
 {
-    return PyStackRef_DUP(ref)
+    return PyStackRef_DUP(ref);
 }
 
 #define PyStackRef_CLEAR(REF) \
@@ -200,6 +202,18 @@ PyStackRef_IsHeapSafe(_PyStackRef ref)
     return true;
 }
 
+static inline _PyStackRef
+_PyStackRef_FromPyObjectNewMortal(PyObject *obj, const char *filename, int 
linenumber)
+{
+    assert(!_Py_IsStaticImmortal(obj));
+    Py_INCREF(obj);
+    return _Py_stackref_create(obj, filename, linenumber);
+}
+#define PyStackRef_FromPyObjectNewMortal(obj) 
_PyStackRef_FromPyObjectNewMortal(_PyObject_CAST(obj), __FILE__, __LINE__)
+
+#define PyStackRef_RefcountOnObject(REF) 1
+
+extern int PyStackRef_Is(_PyStackRef a, _PyStackRef b);
 
 #else
 
@@ -616,6 +630,7 @@ PyStackRef_XCLOSE(_PyStackRef ref)
 
 #define PyStackRef_Is(a, b) (((a).bits & (~Py_TAG_BITS)) == ((b).bits & 
(~Py_TAG_BITS)))
 
+
 #endif // !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG)
 
 #define PyStackRef_TYPE(stackref) 
Py_TYPE(PyStackRef_AsPyObjectBorrow(stackref))
diff --git a/Python/stackrefs.c b/Python/stackrefs.c
index a7693ba75c5dbb..450dacde6d29e5 100644
--- a/Python/stackrefs.c
+++ b/Python/stackrefs.c
@@ -55,6 +55,12 @@ _Py_stackref_get_object(_PyStackRef ref)
     return entry->obj;
 }
 
+int
+PyStackRef_Is(_PyStackRef a, _PyStackRef b)
+{
+    return _Py_stackref_get_object(a) == _Py_stackref_get_object(b);
+}
+
 PyObject *
 _Py_stackref_close(_PyStackRef ref, const char *filename, int linenumber)
 {
@@ -182,9 +188,9 @@ _Py_stackref_report_leaks(PyInterpreterState *interp)
 }
 
 void
-PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor destruct)
+_PyStackRef_CLOSE_SPECIALIZED(_PyStackRef ref, destructor destruct, const char 
*filename, int linenumber)
 {
-    PyObject *obj = _Py_stackref_close(ref);
+    PyObject *obj = _Py_stackref_close(ref, filename, linenumber);
     _Py_DECREF_SPECIALIZED(obj, destruct);
 }
 

_______________________________________________
Python-checkins mailing list -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to