gh-127705: Move Py_INCREF_MORTAL() to the internal C API (GH-136178)

Rename Py_INCREF_MORTAL() to _Py_INCREF_MORTAL() and move it to
pycore_object.h internal header.
This commit is contained in:
Victor Stinner 2025-07-02 15:40:41 +02:00 committed by GitHub
parent ab7196a2f5
commit fa43a1e0f8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 18 additions and 18 deletions

View file

@ -1033,6 +1033,20 @@ enum _PyAnnotateFormat {
int _PyObject_SetDict(PyObject *obj, PyObject *value); int _PyObject_SetDict(PyObject *obj, PyObject *value);
#ifndef Py_GIL_DISABLED
static inline Py_ALWAYS_INLINE void _Py_INCREF_MORTAL(PyObject *op)
{
assert(!_Py_IsStaticImmortal(op));
op->ob_refcnt++;
_Py_INCREF_STAT_INC();
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
if (!_Py_IsImmortal(op)) {
_Py_INCREF_IncRefTotal();
}
#endif
}
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View file

@ -626,7 +626,7 @@ _PyStackRef_FromPyObjectNew(PyObject *obj)
if (_Py_IsImmortal(obj)) { if (_Py_IsImmortal(obj)) {
return (_PyStackRef){ .bits = ((uintptr_t)obj) | Py_TAG_REFCNT}; return (_PyStackRef){ .bits = ((uintptr_t)obj) | Py_TAG_REFCNT};
} }
Py_INCREF_MORTAL(obj); _Py_INCREF_MORTAL(obj);
_PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj }; _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
PyStackRef_CheckValid(ref); PyStackRef_CheckValid(ref);
return ref; return ref;
@ -637,7 +637,7 @@ static inline _PyStackRef
_PyStackRef_FromPyObjectNewMortal(PyObject *obj) _PyStackRef_FromPyObjectNewMortal(PyObject *obj)
{ {
assert(obj != NULL); assert(obj != NULL);
Py_INCREF_MORTAL(obj); _Py_INCREF_MORTAL(obj);
_PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj }; _PyStackRef ref = (_PyStackRef){ .bits = (uintptr_t)obj };
PyStackRef_CheckValid(ref); PyStackRef_CheckValid(ref);
return ref; return ref;
@ -654,14 +654,14 @@ PyStackRef_FromPyObjectBorrow(PyObject *obj)
/* WARNING: This macro evaluates its argument more than once */ /* WARNING: This macro evaluates its argument more than once */
#ifdef _WIN32 #ifdef _WIN32
#define PyStackRef_DUP(REF) \ #define PyStackRef_DUP(REF) \
(PyStackRef_RefcountOnObject(REF) ? (Py_INCREF_MORTAL(BITS_TO_PTR(REF)), (REF)) : (REF)) (PyStackRef_RefcountOnObject(REF) ? (_Py_INCREF_MORTAL(BITS_TO_PTR(REF)), (REF)) : (REF))
#else #else
static inline _PyStackRef static inline _PyStackRef
PyStackRef_DUP(_PyStackRef ref) PyStackRef_DUP(_PyStackRef ref)
{ {
assert(!PyStackRef_IsNull(ref)); assert(!PyStackRef_IsNull(ref));
if (PyStackRef_RefcountOnObject(ref)) { if (PyStackRef_RefcountOnObject(ref)) {
Py_INCREF_MORTAL(BITS_TO_PTR(ref)); _Py_INCREF_MORTAL(BITS_TO_PTR(ref));
} }
return ref; return ref;
} }

View file

@ -244,20 +244,6 @@ PyAPI_FUNC(void) Py_DecRef(PyObject *);
PyAPI_FUNC(void) _Py_IncRef(PyObject *); PyAPI_FUNC(void) _Py_IncRef(PyObject *);
PyAPI_FUNC(void) _Py_DecRef(PyObject *); PyAPI_FUNC(void) _Py_DecRef(PyObject *);
#ifndef Py_GIL_DISABLED
static inline Py_ALWAYS_INLINE void Py_INCREF_MORTAL(PyObject *op)
{
assert(!_Py_IsStaticImmortal(op));
op->ob_refcnt++;
_Py_INCREF_STAT_INC();
#if defined(Py_REF_DEBUG) && !defined(Py_LIMITED_API)
if (!_Py_IsImmortal(op)) {
_Py_INCREF_IncRefTotal();
}
#endif
}
#endif
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op) static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
{ {
#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG)) #if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))