https://github.com/python/cpython/commit/6d5a8c2ec19f1c38b4558940d2444a7382bb0287
commit: 6d5a8c2ec19f1c38b4558940d2444a7382bb0287
branch: main
author: Nybblista <[email protected]>
committer: Fidget-Spinner <[email protected]>
date: 2025-05-09T08:17:50+08:00
summary:
gh-133476: Assert with the `PyStackRef_IsTaggedInt` function (GH-133477)
files:
M Include/internal/pycore_stackref.h
diff --git a/Include/internal/pycore_stackref.h
b/Include/internal/pycore_stackref.h
index a2acf311ff4c65..dc5e56102fa406 100644
--- a/Include/internal/pycore_stackref.h
+++ b/Include/internal/pycore_stackref.h
@@ -95,10 +95,16 @@ PyStackRef_IsNone(_PyStackRef ref)
return _Py_stackref_get_object(ref) == Py_None;
}
+static inline bool
+PyStackRef_IsTaggedInt(_PyStackRef ref)
+{
+ return (ref.index & 1) == 1;
+}
+
static inline PyObject *
_PyStackRef_AsPyObjectBorrow(_PyStackRef ref, const char *filename, int
linenumber)
{
- assert((ref.index & 1) == 0);
+ assert(!PyStackRef_IsTaggedInt(ref));
_Py_stackref_record_borrow(ref, filename, linenumber);
return _Py_stackref_get_object(ref);
}
@@ -135,12 +141,6 @@ _PyStackRef_FromPyObjectImmortal(PyObject *obj, const char
*filename, int linenu
}
#define PyStackRef_FromPyObjectImmortal(obj)
_PyStackRef_FromPyObjectImmortal(_PyObject_CAST(obj), __FILE__, __LINE__)
-static inline bool
-PyStackRef_IsTaggedInt(_PyStackRef ref)
-{
- return (ref.index & 1) == 1;
-}
-
static inline void
_PyStackRef_CLOSE(_PyStackRef ref, const char *filename, int linenumber)
{
@@ -256,7 +256,7 @@ PyStackRef_TagInt(intptr_t i)
static inline intptr_t
PyStackRef_UntagInt(_PyStackRef i)
{
- assert((i.bits & Py_INT_TAG) == Py_INT_TAG);
+ assert(PyStackRef_IsTaggedInt(i));
intptr_t val = (intptr_t)i.bits;
return Py_ARITHMETIC_RIGHT_SHIFT(intptr_t, val, 2);
}
@@ -286,6 +286,7 @@ static const _PyStackRef PyStackRef_NULL = { .bits =
Py_TAG_DEFERRED};
static inline PyObject *
PyStackRef_AsPyObjectBorrow(_PyStackRef stackref)
{
+ assert(!PyStackRef_IsTaggedInt(stackref));
PyObject *cleared = ((PyObject *)((stackref).bits & (~Py_TAG_BITS)));
return cleared;
}
_______________________________________________
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]