diff options
author | Victor Stinner <vstinner@redhat.com> | 2018-10-30 13:48:26 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-30 13:48:26 (GMT) |
commit | 3c09dca4b5de9fe8c8756251d02f49cf093b88c1 (patch) | |
tree | 7d0fd98cd5ced4a4655db5b5e2245277851b035b /Include/object.h | |
parent | e1b29950bf751381538e3c8ea6a3e0a98d01dbfb (diff) | |
download | cpython-3c09dca4b5de9fe8c8756251d02f49cf093b88c1.zip cpython-3c09dca4b5de9fe8c8756251d02f49cf093b88c1.tar.gz cpython-3c09dca4b5de9fe8c8756251d02f49cf093b88c1.tar.bz2 |
bpo-35059: Convert _Py_Dealloc() to static inline function (GH-10223)
Convert _Py_Dealloc() macro into a static inline function. Moreover,
it is now also defined as a static inline function if Py_TRACE_REFS
is defined.
Diffstat (limited to 'Include/object.h')
-rw-r--r-- | Include/object.h | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/Include/object.h b/Include/object.h index 799c40b..10ec600 100644 --- a/Include/object.h +++ b/Include/object.h @@ -768,7 +768,6 @@ PyAPI_FUNC(int) _PyTraceMalloc_NewReference(PyObject *op); /* Py_TRACE_REFS is such major surgery that we call external routines. */ PyAPI_FUNC(void) _Py_NewReference(PyObject *); PyAPI_FUNC(void) _Py_ForgetReference(PyObject *); -PyAPI_FUNC(void) _Py_Dealloc(PyObject *); PyAPI_FUNC(void) _Py_PrintReferences(FILE *); PyAPI_FUNC(void) _Py_PrintReferenceAddresses(FILE *); PyAPI_FUNC(void) _Py_AddToAllObjects(PyObject *, int force); @@ -790,15 +789,25 @@ static inline void _Py_ForgetReference(PyObject *op) { _Py_INC_TPFREES(op); } +#endif /* !Py_TRACE_REFS */ + -#ifdef Py_LIMITED_API PyAPI_FUNC(void) _Py_Dealloc(PyObject *); + +#ifndef Py_LIMITED_API +static inline void _Py_Dealloc_inline(PyObject *op) +{ + destructor dealloc = Py_TYPE(op)->tp_dealloc; +#ifdef Py_TRACE_REFS + _Py_ForgetReference(op); #else -#define _Py_Dealloc(op) ( \ - _Py_INC_TPFREES(op) _Py_COUNT_ALLOCS_COMMA \ - (*Py_TYPE(op)->tp_dealloc)((PyObject *)(op))) + _Py_INC_TPFREES(op); #endif -#endif /* !Py_TRACE_REFS */ + (*dealloc)(op); +} + +# define _Py_Dealloc(op) _Py_Dealloc_inline(op) +#endif /* !defined(Py_LIMITED_API) */ static inline void _Py_INCREF(PyObject *op) |