| #ifndef Py_INTERNAL_GLOBAL_OBJECTS_H |
| #define Py_INTERNAL_GLOBAL_OBJECTS_H |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #ifndef Py_BUILD_CORE |
| # error "this header requires Py_BUILD_CORE define" |
| #endif |
| |
| #include "pycore_gc.h" // PyGC_Head |
| #include "pycore_global_strings.h" // struct _Py_global_strings |
| |
| |
| // These would be in pycore_long.h if it weren't for an include cycle. |
| #define _PY_NSMALLPOSINTS 257 |
| #define _PY_NSMALLNEGINTS 5 |
| |
| |
| // Only immutable objects should be considered runtime-global. |
| // All others must be per-interpreter. |
| |
| #define _Py_GLOBAL_OBJECT(NAME) \ |
| _PyRuntime.global_objects.NAME |
| #define _Py_SINGLETON(NAME) \ |
| _Py_GLOBAL_OBJECT(singletons.NAME) |
| |
| struct _Py_global_objects { |
| struct { |
| /* Small integers are preallocated in this array so that they |
| * can be shared. |
| * The integers that are preallocated are those in the range |
| * -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (exclusive). |
| */ |
| PyLongObject small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS]; |
| |
| PyBytesObject bytes_empty; |
| struct { |
| PyBytesObject ob; |
| char eos; |
| } bytes_characters[256]; |
| |
| struct _Py_global_strings strings; |
| |
| _PyGC_Head_UNUSED _tuple_empty_gc_not_used; |
| PyTupleObject tuple_empty; |
| } singletons; |
| }; |
| |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif /* !Py_INTERNAL_GLOBAL_OBJECTS_H */ |