#ifndef Py_OBJECT_H
#define Py_OBJECT_H
#ifdef __cplusplus
extern "C" {
#endif
#if defined(Py_DEBUG) && !defined(Py_REF_DEBUG)
#define Py_REF_DEBUG
#endif
#define PyObject_HEAD …
#define _PyObject_EXTRA_INIT
#if defined(Py_GIL_DISABLED)
#define PyObject_HEAD_INIT …
#else
#define PyObject_HEAD_INIT(type) …
#endif
#define PyVarObject_HEAD_INIT(type, size) …
#define PyObject_VAR_HEAD …
#define Py_INVALID_SIZE …
#ifndef Py_GIL_DISABLED
struct _object { … };
#else
#define _Py_UNOWNED_TID …
struct _object {
uintptr_t ob_tid;
uint16_t _padding;
PyMutex ob_mutex;
uint8_t ob_gc_bits;
uint32_t ob_ref_local;
Py_ssize_t ob_ref_shared;
PyTypeObject *ob_type;
};
#endif
#define _PyObject_CAST(op) …
PyVarObject;
#define _PyVarObject_CAST(op) …
PyAPI_FUNC(int) Py_Is(PyObject *x, PyObject *y);
#define Py_Is(x, y) …
#if defined(Py_GIL_DISABLED) && !defined(Py_LIMITED_API)
PyAPI_FUNC(uintptr_t) _Py_GetThreadLocal_Addr(void);
static inline uintptr_t
_Py_ThreadId(void)
{
uintptr_t tid;
#if defined(_MSC_VER) && defined(_M_X64)
tid = __readgsqword(48);
#elif defined(_MSC_VER) && defined(_M_IX86)
tid = __readfsdword(24);
#elif defined(_MSC_VER) && defined(_M_ARM64)
tid = __getReg(18);
#elif defined(__MINGW32__) && defined(_M_X64)
tid = __readgsqword(48);
#elif defined(__MINGW32__) && defined(_M_IX86)
tid = __readfsdword(24);
#elif defined(__MINGW32__) && defined(_M_ARM64)
tid = __getReg(18);
#elif defined(__i386__)
__asm__("movl %%gs:0, %0" : "=r" (tid));
#elif defined(__MACH__) && defined(__x86_64__)
__asm__("movq %%gs:0, %0" : "=r" (tid));
#elif defined(__x86_64__)
__asm__("movq %%fs:0, %0" : "=r" (tid));
#elif defined(__arm__) && __ARM_ARCH >= 7
__asm__ ("mrc p15, 0, %0, c13, c0, 3\nbic %0, %0, #3" : "=r" (tid));
#elif defined(__aarch64__) && defined(__APPLE__)
__asm__ ("mrs %0, tpidrro_el0" : "=r" (tid));
#elif defined(__aarch64__)
__asm__ ("mrs %0, tpidr_el0" : "=r" (tid));
#elif defined(__powerpc64__)
#if defined(__clang__) && _Py__has_builtin(__builtin_thread_pointer)
tid = (uintptr_t)__builtin_thread_pointer();
#else
register uintptr_t tp __asm__ ("r13");
__asm__("" : "=r" (tp));
tid = tp;
#endif
#elif defined(__powerpc__)
#if defined(__clang__) && _Py__has_builtin(__builtin_thread_pointer)
tid = (uintptr_t)__builtin_thread_pointer();
#else
register uintptr_t tp __asm__ ("r2");
__asm__ ("" : "=r" (tp));
tid = tp;
#endif
#elif defined(__s390__) && defined(__GNUC__)
tid = (uintptr_t)__builtin_thread_pointer();
#elif defined(__riscv)
#if defined(__clang__) && _Py__has_builtin(__builtin_thread_pointer)
tid = (uintptr_t)__builtin_thread_pointer();
#else
__asm__ ("mv %0, tp" : "=r" (tid));
#endif
#else
tid = _Py_GetThreadLocal_Addr();
#endif
return tid;
}
static inline Py_ALWAYS_INLINE int
_Py_IsOwnedByCurrentThread(PyObject *ob)
{
#ifdef _Py_THREAD_SANITIZER
return _Py_atomic_load_uintptr_relaxed(&ob->ob_tid) == _Py_ThreadId();
#else
return ob->ob_tid == _Py_ThreadId();
#endif
}
#endif
PyAPI_FUNC(PyTypeObject*) Py_TYPE(PyObject *ob);
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030e0000
#else
static inline PyTypeObject* _Py_TYPE(PyObject *ob)
{ … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define Py_TYPE(ob) …
#else
#define Py_TYPE …
#endif
#endif
PyAPI_DATA(PyTypeObject) PyLong_Type;
PyAPI_DATA(PyTypeObject) PyBool_Type;
static inline Py_ssize_t Py_SIZE(PyObject *ob) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define Py_SIZE(ob) …
#endif
static inline int Py_IS_TYPE(PyObject *ob, PyTypeObject *type) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define Py_IS_TYPE(ob, type) …
#endif
static inline void Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define Py_SET_TYPE(ob, type) …
#endif
static inline void Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define Py_SET_SIZE(ob, size) …
#endif
unaryfunc;
binaryfunc;
ternaryfunc;
inquiry;
lenfunc;
ssizeargfunc;
ssizessizeargfunc;
ssizeobjargproc;
ssizessizeobjargproc;
objobjargproc;
objobjproc;
visitproc;
traverseproc;
freefunc;
destructor;
getattrfunc;
getattrofunc;
setattrfunc;
setattrofunc;
reprfunc;
hashfunc;
richcmpfunc;
getiterfunc;
iternextfunc;
descrgetfunc;
descrsetfunc;
initproc;
newfunc;
allocfunc;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030c0000
vectorcallfunc;
#endif
PyType_Slot;
PyType_Spec;
PyAPI_FUNC(PyObject*) PyType_FromSpec(PyType_Spec*);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(PyObject*) PyType_FromSpecWithBases(PyType_Spec*, PyObject*);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03040000
PyAPI_FUNC(void*) PyType_GetSlot(PyTypeObject*, int);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03090000
PyAPI_FUNC(PyObject*) PyType_FromModuleAndSpec(PyObject *, PyType_Spec *, PyObject *);
PyAPI_FUNC(PyObject *) PyType_GetModule(PyTypeObject *);
PyAPI_FUNC(void *) PyType_GetModuleState(PyTypeObject *);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030B0000
PyAPI_FUNC(PyObject *) PyType_GetName(PyTypeObject *);
PyAPI_FUNC(PyObject *) PyType_GetQualName(PyTypeObject *);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030D0000
PyAPI_FUNC(PyObject *) PyType_GetFullyQualifiedName(PyTypeObject *type);
PyAPI_FUNC(PyObject *) PyType_GetModuleName(PyTypeObject *type);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000
PyAPI_FUNC(PyObject *) PyType_FromMetaclass(PyTypeObject*, PyObject*, PyType_Spec*, PyObject*);
PyAPI_FUNC(void *) PyObject_GetTypeData(PyObject *obj, PyTypeObject *cls);
PyAPI_FUNC(Py_ssize_t) PyType_GetTypeDataSize(PyTypeObject *cls);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030E0000
PyAPI_FUNC(int) PyType_GetBaseByToken(PyTypeObject *, void *, PyTypeObject **);
#define Py_TP_USE_SPEC …
#endif
PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
static inline int PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyObject_TypeCheck(ob, type) …
#endif
PyAPI_DATA(PyTypeObject) PyType_Type;
PyAPI_DATA(PyTypeObject) PyBaseObject_Type;
PyAPI_DATA(PyTypeObject) PySuper_Type;
PyAPI_FUNC(unsigned long) PyType_GetFlags(PyTypeObject*);
PyAPI_FUNC(int) PyType_Ready(PyTypeObject *);
PyAPI_FUNC(PyObject *) PyType_GenericAlloc(PyTypeObject *, Py_ssize_t);
PyAPI_FUNC(PyObject *) PyType_GenericNew(PyTypeObject *,
PyObject *, PyObject *);
PyAPI_FUNC(unsigned int) PyType_ClearCache(void);
PyAPI_FUNC(void) PyType_Modified(PyTypeObject *);
PyAPI_FUNC(PyObject *) PyObject_Repr(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_Str(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_ASCII(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_Bytes(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_RichCompare(PyObject *, PyObject *, int);
PyAPI_FUNC(int) PyObject_RichCompareBool(PyObject *, PyObject *, int);
PyAPI_FUNC(PyObject *) PyObject_GetAttrString(PyObject *, const char *);
PyAPI_FUNC(int) PyObject_SetAttrString(PyObject *, const char *, PyObject *);
PyAPI_FUNC(int) PyObject_DelAttrString(PyObject *v, const char *name);
PyAPI_FUNC(int) PyObject_HasAttrString(PyObject *, const char *);
PyAPI_FUNC(PyObject *) PyObject_GetAttr(PyObject *, PyObject *);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000
PyAPI_FUNC(int) PyObject_GetOptionalAttr(PyObject *, PyObject *, PyObject **);
PyAPI_FUNC(int) PyObject_GetOptionalAttrString(PyObject *, const char *, PyObject **);
#endif
PyAPI_FUNC(int) PyObject_SetAttr(PyObject *, PyObject *, PyObject *);
PyAPI_FUNC(int) PyObject_DelAttr(PyObject *v, PyObject *name);
PyAPI_FUNC(int) PyObject_HasAttr(PyObject *, PyObject *);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000
PyAPI_FUNC(int) PyObject_HasAttrWithError(PyObject *, PyObject *);
PyAPI_FUNC(int) PyObject_HasAttrStringWithError(PyObject *, const char *);
#endif
PyAPI_FUNC(PyObject *) PyObject_SelfIter(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_GenericGetAttr(PyObject *, PyObject *);
PyAPI_FUNC(int) PyObject_GenericSetAttr(PyObject *, PyObject *, PyObject *);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
PyAPI_FUNC(int) PyObject_GenericSetDict(PyObject *, PyObject *, void *);
#endif
PyAPI_FUNC(Py_hash_t) PyObject_Hash(PyObject *);
PyAPI_FUNC(Py_hash_t) PyObject_HashNotImplemented(PyObject *);
PyAPI_FUNC(int) PyObject_IsTrue(PyObject *);
PyAPI_FUNC(int) PyObject_Not(PyObject *);
PyAPI_FUNC(int) PyCallable_Check(PyObject *);
PyAPI_FUNC(void) PyObject_ClearWeakRefs(PyObject *);
PyAPI_FUNC(PyObject *) PyObject_Dir(PyObject *);
PyAPI_FUNC(int) Py_ReprEnter(PyObject *);
PyAPI_FUNC(void) Py_ReprLeave(PyObject *);
#define Py_PRINT_RAW …
#ifndef Py_LIMITED_API
#define _Py_TPFLAGS_STATIC_BUILTIN …
#define Py_TPFLAGS_INLINE_VALUES …
#define Py_TPFLAGS_MANAGED_WEAKREF …
#define Py_TPFLAGS_MANAGED_DICT …
#define Py_TPFLAGS_PREHEADER …
#define Py_TPFLAGS_SEQUENCE …
#define Py_TPFLAGS_MAPPING …
#endif
#define Py_TPFLAGS_DISALLOW_INSTANTIATION …
#define Py_TPFLAGS_IMMUTABLETYPE …
#define Py_TPFLAGS_HEAPTYPE …
#define Py_TPFLAGS_BASETYPE …
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030C0000
#define Py_TPFLAGS_HAVE_VECTORCALL …
#ifndef Py_LIMITED_API
#define _Py_TPFLAGS_HAVE_VECTORCALL …
#endif
#endif
#define Py_TPFLAGS_READY …
#define Py_TPFLAGS_READYING …
#define Py_TPFLAGS_HAVE_GC …
#ifdef STACKLESS
#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION …
#else
#define Py_TPFLAGS_HAVE_STACKLESS_EXTENSION …
#endif
#define Py_TPFLAGS_METHOD_DESCRIPTOR …
#define Py_TPFLAGS_VALID_VERSION_TAG …
#define Py_TPFLAGS_IS_ABSTRACT …
#define _Py_TPFLAGS_MATCH_SELF …
#define Py_TPFLAGS_ITEMS_AT_END …
#define Py_TPFLAGS_LONG_SUBCLASS …
#define Py_TPFLAGS_LIST_SUBCLASS …
#define Py_TPFLAGS_TUPLE_SUBCLASS …
#define Py_TPFLAGS_BYTES_SUBCLASS …
#define Py_TPFLAGS_UNICODE_SUBCLASS …
#define Py_TPFLAGS_DICT_SUBCLASS …
#define Py_TPFLAGS_BASE_EXC_SUBCLASS …
#define Py_TPFLAGS_TYPE_SUBCLASS …
#define Py_TPFLAGS_DEFAULT …
#define Py_TPFLAGS_HAVE_FINALIZE …
#define Py_TPFLAGS_HAVE_VERSION_TAG …
#define Py_CONSTANT_NONE …
#define Py_CONSTANT_FALSE …
#define Py_CONSTANT_TRUE …
#define Py_CONSTANT_ELLIPSIS …
#define Py_CONSTANT_NOT_IMPLEMENTED …
#define Py_CONSTANT_ZERO …
#define Py_CONSTANT_ONE …
#define Py_CONSTANT_EMPTY_STR …
#define Py_CONSTANT_EMPTY_BYTES …
#define Py_CONSTANT_EMPTY_TUPLE …
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000
PyAPI_FUNC(PyObject*) Py_GetConstant(unsigned int constant_id);
PyAPI_FUNC(PyObject*) Py_GetConstantBorrowed(unsigned int constant_id);
#endif
PyAPI_DATA(PyObject) _Py_NoneStruct;
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030D0000
#define Py_None …
#else
#define Py_None …
#endif
PyAPI_FUNC(int) Py_IsNone(PyObject *x);
#define Py_IsNone(x) …
#define Py_RETURN_NONE …
PyAPI_DATA(PyObject) _Py_NotImplementedStruct;
#if defined(Py_LIMITED_API) && Py_LIMITED_API+0 >= 0x030D0000
#define Py_NotImplemented …
#else
#define Py_NotImplemented …
#endif
#define Py_RETURN_NOTIMPLEMENTED …
#define Py_LT …
#define Py_LE …
#define Py_EQ …
#define Py_NE …
#define Py_GT …
#define Py_GE …
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030A0000
PySendResult;
#endif
#define Py_RETURN_RICHCOMPARE(val1, val2, op) …
#ifndef Py_LIMITED_API
#define Py_CPYTHON_OBJECT_H
# include "cpython/object.h"
# undef Py_CPYTHON_OBJECT_H
#endif
static inline int
PyType_HasFeature(PyTypeObject *type, unsigned long feature)
{ … }
#define PyType_FastSubclass(type, flag) …
static inline int PyType_Check(PyObject *op) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyType_Check(op) …
#endif
#define _PyType_CAST(op) …
static inline int PyType_CheckExact(PyObject *op) { … }
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 < 0x030b0000
#define PyType_CheckExact(op) …
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030d0000
PyAPI_FUNC(PyObject *) PyType_GetModuleByDef(PyTypeObject *, PyModuleDef *);
#endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x030e0000
PyAPI_FUNC(int) PyType_Freeze(PyTypeObject *type);
#endif
#ifdef __cplusplus
}
#endif
#endif