+++++++++++++++++++++++
pythoncapi_compat.h API
+++++++++++++++++++++++
The ``pythoncapi_compat.h`` header file provides implementations of recent
functions for old Python versions.
Supported Python versions:
* Python 2.7, Python 3.4 - 3.11
* PyPy 2.7, 3.6 and 3.7
C++ is supported on Python 3.6 and newer.
A C99 subset is required, like ``static inline`` functions: see `PEP 7
`_. ISO C90 is partially supported
for Python 2.7 and Visual Studio 2008 (avoid mixed declarations and code, ``gcc
-Werror=declaration-after-statement``).
Some functions related to frame objects and ``PyThreadState`` are not available
on PyPy.
Latest version of the header file:
`pythoncapi_compat.h `_.
Python 3.11
-----------
.. c:function:: PyObject* PyCode_GetCode(PyCodeObject *code)
See `PyCode_GetCode() documentation `__.
Not available on PyPy.
.. c:function:: PyObject* PyFrame_GetBuiltins(PyFrameObject *frame)
See `PyFrame_GetBuiltins() documentation `__.
Not available on PyPy.
.. c:function:: PyObject* PyFrame_GetGlobals(PyFrameObject *frame)
See `PyFrame_GetGlobals() documentation `__.
Not available on PyPy.
.. c:function:: int PyFrame_GetLasti(PyFrameObject *frame)
See `PyFrame_GetLasti() documentation `__.
Not available on PyPy.
.. c:function:: PyObject* PyFrame_GetLocals(PyFrameObject *frame)
See `PyFrame_GetLocals() documentation `__.
Not available on PyPy.
.. c:function:: void PyThreadState_EnterTracing(PyThreadState *tstate)
See `PyThreadState_EnterTracing() documentation `__.
Not available on PyPy.
.. c:function:: void PyThreadState_LeaveTracing(PyThreadState *tstate)
See `PyThreadState_LeaveTracing() documentation `__.
Not available on PyPy
.. c:function:: int PyFloat_Pack2(double x, unsigned char *p, int le)
Pack a C double as the IEEE 754 binary16 half-precision format.
Availability: Python 3.6 and newer. Not available on PyPy
.. c:function:: int PyFloat_Pack4(double x, unsigned char *p, int le)
Pack a C double as the IEEE 754 binary32 single precision format.
Not available on PyPy
.. c:function:: int PyFloat_Pack8(double x, unsigned char *p, int le)
Pack a C double as the IEEE 754 binary64 double precision format.
Not available on PyPy
.. c:function:: double PyFloat_Unpack2(const unsigned char *p, int le)
Unpack the IEEE 754 binary16 half-precision format as a C double.
Availability: Python 3.6 and newer. Not available on PyPy
.. c:function:: double PyFloat_Unpack4(const unsigned char *p, int le)
Unpack the IEEE 754 binary32 single precision format as a C double.
Not available on PyPy
.. c:function:: double PyFloat_Unpack8(const unsigned char *p, int le)
Unpack the IEEE 754 binary64 double precision format as a C double.
Not available on PyPy
Python 3.10
-----------
.. c:function:: PyObject* Py_NewRef(PyObject *obj)
See `Py_NewRef() documentation `__.
.. c:function:: PyObject* Py_XNewRef(PyObject *obj)
See `Py_XNewRef() documentation `__.
.. c:function:: int Py_Is(PyObject *x, PyObject *y)
See `Py_Is() documentation `__.
.. c:function:: int Py_IsNone(PyObject *x)
See `Py_IsNone() documentation `__.
.. c:function:: int Py_IsTrue(PyObject *x)
See `Py_IsTrue() documentation `__.
.. c:function:: int Py_IsFalse(PyObject *x)
See `Py_IsFalse() documentation `__.
.. c:function:: int PyModule_AddObjectRef(PyObject *module, const char *name, PyObject *value)
See `PyModule_AddObjectRef() documentation `__.
Python 3.9
----------
PyObject
^^^^^^^^
.. c:function:: void Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt)
See `Py_SET_REFCNT() documentation `__.
.. c:function:: void Py_SET_TYPE(PyObject *ob, PyTypeObject *type)
See `Py_SET_TYPE() documentation `__.
.. c:function:: void Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size)
See `Py_SET_SIZE() documentation `__.
.. c:function:: int Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type)
See `Py_IS_TYPE() documentation `__.
.. c:function:: PyObject* PyObject_CallNoArgs(PyObject *func)
See `PyObject_CallNoArgs() documentation `__.
.. c:function:: PyObject* PyObject_CallOneArg(PyObject *func, PyObject *arg)
See `PyObject_CallOneArg() documentation `__.
PyFrameObject
^^^^^^^^^^^^^
.. c:function:: PyCodeObject* PyFrame_GetCode(PyFrameObject *frame)
See `PyFrame_GetCode() documentation `__.
.. c:function:: PyFrameObject* PyFrame_GetBack(PyFrameObject *frame)
See `PyFrame_GetBack() documentation `__.
Not available on PyPy
PyThreadState
^^^^^^^^^^^^^
.. c:function:: PyFrameObject* PyThreadState_GetFrame(PyThreadState *tstate)
See `PyThreadState_GetFrame() documentation `__.
Not available on PyPy
.. c:function:: PyInterpreterState* PyThreadState_GetInterpreter(PyThreadState *tstate)
See `PyThreadState_GetInterpreter() documentation `__.
.. c:function:: uint64_t PyThreadState_GetID(PyThreadState *tstate)
See `PyThreadState_GetID() documentation `__.
Availability: Python 3.7. Not available on PyPy.
PyInterpreterState
^^^^^^^^^^^^^^^^^^
.. c:function:: PyInterpreterState* PyInterpreterState_Get(void)
See `PyInterpreterState_Get() documentation `__.
GC protocol
^^^^^^^^^^^
.. c:function:: int PyObject_GC_IsTracked(PyObject* obj)
See `PyObject_GC_IsTracked() documentation `__.
Not available on PyPy.
.. c:function:: int PyObject_GC_IsFinalized(PyObject *obj)
See `PyObject_GC_IsFinalized() documentation `__.
Availability: Python 3.4. Not available on PyPy.
Module helper
^^^^^^^^^^^^^
.. c:function:: int PyModule_AddType(PyObject *module, PyTypeObject *type)
See `PyModule_AddType() documentation `__.
Python 3.5.2
------------
.. c:macro:: Py_SETREF(op, op2)
.. c:macro:: Py_XSETREF(op, op2)
Python 3.4
----------
.. c:macro:: Py_UNUSED(name)
See `Py_UNUSED() documentation `__.
Borrow variant
--------------
To ease migration of C extensions to the new C API, a variant is provided
to return borrowed references rather than strong references.
These functions are only available in ``pythoncapi_compat.h`` and are not
part of the Python C API.
.. c:function:: PyObject* _Py_StealRef(PyObject *ob)
Similar to ``Py_DECREF(ob); return ob;``.
.. c:function:: PyObject* _Py_XStealRef(PyObject *ob)
Similar to ``Py_XDECREF(ob); return ob;``.
.. c:function:: PyFrameObject* _PyThreadState_GetFrameBorrow(PyThreadState *tstate)
:c:func:`PyThreadState_GetFrame` variant. Not available on PyPy.
.. c:function:: PyCodeObject* _PyFrame_GetCodeBorrow(PyFrameObject *frame)
:c:func:`PyFrame_GetCode` variant.
.. c:function:: PyFrameObject* _PyFrame_GetBackBorrow(PyFrameObject *frame)
:c:func:`PyFrame_GetBack` variant Not available on PyPy.
For example, ``tstate->frame`` can be replaced with
``_PyThreadState_GetFrameBorrow(tstate)`` to avoid accessing directly
``PyThreadState.frame`` member.