• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef Py_INTERNAL_GLOBAL_OBJECTS_H
2 #define Py_INTERNAL_GLOBAL_OBJECTS_H
3 #ifdef __cplusplus
4 extern "C" {
5 #endif
6 
7 #ifndef Py_BUILD_CORE
8 #  error "this header requires Py_BUILD_CORE define"
9 #endif
10 
11 #include "pycore_gc.h"              // PyGC_Head
12 #include "pycore_global_strings.h"  // struct _Py_global_strings
13 
14 
15 // These would be in pycore_long.h if it weren't for an include cycle.
16 #define _PY_NSMALLPOSINTS           257
17 #define _PY_NSMALLNEGINTS           5
18 
19 
20 // Only immutable objects should be considered runtime-global.
21 // All others must be per-interpreter.
22 
23 #define _Py_GLOBAL_OBJECT(NAME) \
24     _PyRuntime.global_objects.NAME
25 #define _Py_SINGLETON(NAME) \
26     _Py_GLOBAL_OBJECT(singletons.NAME)
27 
28 struct _Py_global_objects {
29     struct {
30         /* Small integers are preallocated in this array so that they
31          * can be shared.
32          * The integers that are preallocated are those in the range
33          * -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (exclusive).
34          */
35         PyLongObject small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS];
36 
37         PyBytesObject bytes_empty;
38         struct {
39             PyBytesObject ob;
40             char eos;
41         } bytes_characters[256];
42 
43         struct _Py_global_strings strings;
44 
45         _PyGC_Head_UNUSED _tuple_empty_gc_not_used;
46         PyTupleObject tuple_empty;
47     } singletons;
48 };
49 
50 
51 #ifdef __cplusplus
52 }
53 #endif
54 #endif /* !Py_INTERNAL_GLOBAL_OBJECTS_H */
55