mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
GH-131904: Fix Py_STACKREF_DEBUG build (GH-132022)
This commit is contained in:
parent
b3e3cc054c
commit
275056a7fd
2 changed files with 27 additions and 6 deletions
|
@ -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))
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue