/* This files contains various key structs that are widely used * and do not depend on other headers. */ #ifndef Py_INTERNAL_STRUCTS_H #define Py_INTERNAL_STRUCTS_H #ifdef __cplusplus extern "C" { #endif #include // uint16_t typedef struct { uint16_t value_and_backoff; } _Py_BackoffCounter; /* Each instruction in a code object is a fixed-width value, * currently 2 bytes: 1-byte opcode + 1-byte oparg. The EXTENDED_ARG * opcode allows for larger values but the current limit is 3 uses * of EXTENDED_ARG (see Python/compile.c), for a maximum * 32-bit value. This aligns with the note in Python/compile.c * (compiler_addop_i_line) indicating that the max oparg value is * 2**32 - 1, rather than INT_MAX. */ typedef union { uint16_t cache; struct { uint8_t code; uint8_t arg; } op; _Py_BackoffCounter counter; // First cache entry of specializable op } _Py_CODEUNIT; /* Abstract tree node. */ typedef struct { PyObject_HEAD } PyHamtNode; /* An HAMT immutable mapping collection. */ typedef struct { PyObject_HEAD PyHamtNode *h_root; PyObject *h_weakreflist; Py_ssize_t h_count; } PyHamtObject; typedef struct { PyObject_VAR_HEAD uint32_t b_bitmap; PyObject *b_array[1]; } PyHamtNode_Bitmap; #include "pycore_context.h" // _PyContextTokenMissing // Define this to get precise tracking of stackrefs. // #define Py_STACKREF_DEBUG 1 // Define this to get precise tracking of closed stackrefs. // This will use unbounded memory, as it can only grow. // Use this to track double closes in short-lived programs // #define Py_STACKREF_CLOSE_DEBUG 1 typedef union _PyStackRef { #if !defined(Py_GIL_DISABLED) && defined(Py_STACKREF_DEBUG) uint64_t index; #else uintptr_t bits; #endif } _PyStackRef; // A stackref that can be stored in a regular C local variable and be visible // to the GC in the free threading build. // Used in combination with _PyThreadState_PushCStackRef(). typedef struct _PyCStackRef { _PyStackRef ref; #ifdef Py_GIL_DISABLED struct _PyCStackRef *next; #endif } _PyCStackRef; #ifdef __cplusplus } #endif #endif /* Py_INTERNAL_STRUCTS_H */