mirror of
https://github.com/python/cpython.git
synced 2024-11-30 21:34:17 +08:00
ea2c001650
This is the implementation of PEP683 Motivation: The PR introduces the ability to immortalize instances in CPython which bypasses reference counting. Tagging objects as immortal allows up to skip certain operations when we know that the object will be around for the entire execution of the runtime. Note that this by itself will bring a performance regression to the runtime due to the extra reference count checks. However, this brings the ability of having truly immutable objects that are useful in other contexts such as immutable data sharing between sub-interpreters.
43 lines
1.1 KiB
C
43 lines
1.1 KiB
C
/* Boolean object interface */
|
|
|
|
#ifndef Py_BOOLOBJECT_H
|
|
#define Py_BOOLOBJECT_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
PyAPI_DATA(PyTypeObject) PyBool_Type;
|
|
|
|
#define PyBool_Check(x) Py_IS_TYPE((x), &PyBool_Type)
|
|
|
|
/* Py_False and Py_True are the only two bools in existence. */
|
|
|
|
/* Don't use these directly */
|
|
PyAPI_DATA(PyLongObject) _Py_FalseStruct;
|
|
PyAPI_DATA(PyLongObject) _Py_TrueStruct;
|
|
|
|
/* Use these macros */
|
|
#define Py_False _PyObject_CAST(&_Py_FalseStruct)
|
|
#define Py_True _PyObject_CAST(&_Py_TrueStruct)
|
|
|
|
// Test if an object is the True singleton, the same as "x is True" in Python.
|
|
PyAPI_FUNC(int) Py_IsTrue(PyObject *x);
|
|
#define Py_IsTrue(x) Py_Is((x), Py_True)
|
|
|
|
// Test if an object is the False singleton, the same as "x is False" in Python.
|
|
PyAPI_FUNC(int) Py_IsFalse(PyObject *x);
|
|
#define Py_IsFalse(x) Py_Is((x), Py_False)
|
|
|
|
/* Macros for returning Py_True or Py_False, respectively */
|
|
#define Py_RETURN_TRUE return Py_True
|
|
#define Py_RETURN_FALSE return Py_False
|
|
|
|
/* Function to return a bool from a C long */
|
|
PyAPI_FUNC(PyObject *) PyBool_FromLong(long);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_BOOLOBJECT_H */
|