Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
allendowney
GitHub Repository: allendowney/cpython
Path: blob/main/Include/internal/pycore_global_objects.h
12 views
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
#include "pycore_hamt.h" // PyHamtNode_Bitmap
14
#include "pycore_context.h" // _PyContextTokenMissing
15
#include "pycore_typeobject.h" // pytype_slotdef
16
17
18
// These would be in pycore_long.h if it weren't for an include cycle.
19
#define _PY_NSMALLPOSINTS 257
20
#define _PY_NSMALLNEGINTS 5
21
22
23
// Only immutable objects should be considered runtime-global.
24
// All others must be per-interpreter.
25
26
#define _Py_GLOBAL_OBJECT(NAME) \
27
_PyRuntime.static_objects.NAME
28
#define _Py_SINGLETON(NAME) \
29
_Py_GLOBAL_OBJECT(singletons.NAME)
30
31
struct _Py_static_objects {
32
struct {
33
/* Small integers are preallocated in this array so that they
34
* can be shared.
35
* The integers that are preallocated are those in the range
36
* -_PY_NSMALLNEGINTS (inclusive) to _PY_NSMALLPOSINTS (exclusive).
37
*/
38
PyLongObject small_ints[_PY_NSMALLNEGINTS + _PY_NSMALLPOSINTS];
39
40
PyBytesObject bytes_empty;
41
struct {
42
PyBytesObject ob;
43
char eos;
44
} bytes_characters[256];
45
46
struct _Py_global_strings strings;
47
48
_PyGC_Head_UNUSED _tuple_empty_gc_not_used;
49
PyTupleObject tuple_empty;
50
51
_PyGC_Head_UNUSED _hamt_bitmap_node_empty_gc_not_used;
52
PyHamtNode_Bitmap hamt_bitmap_node_empty;
53
_PyContextTokenMissing context_token_missing;
54
} singletons;
55
};
56
57
#define _Py_INTERP_CACHED_OBJECT(interp, NAME) \
58
(interp)->cached_objects.NAME
59
60
struct _Py_interp_cached_objects {
61
PyObject *interned_strings;
62
63
/* AST */
64
PyObject *str_replace_inf;
65
66
/* object.__reduce__ */
67
PyObject *objreduce;
68
PyObject *type_slots_pname;
69
pytype_slotdef *type_slots_ptrs[MAX_EQUIV];
70
71
/* TypeVar and related types */
72
PyTypeObject *generic_type;
73
PyTypeObject *typevar_type;
74
PyTypeObject *typevartuple_type;
75
PyTypeObject *paramspec_type;
76
PyTypeObject *paramspecargs_type;
77
PyTypeObject *paramspeckwargs_type;
78
};
79
80
#define _Py_INTERP_STATIC_OBJECT(interp, NAME) \
81
(interp)->static_objects.NAME
82
#define _Py_INTERP_SINGLETON(interp, NAME) \
83
_Py_INTERP_STATIC_OBJECT(interp, singletons.NAME)
84
85
struct _Py_interp_static_objects {
86
struct {
87
int _not_used;
88
// hamt_empty is here instead of global because of its weakreflist.
89
_PyGC_Head_UNUSED _hamt_empty_gc_not_used;
90
PyHamtObject hamt_empty;
91
PyBaseExceptionObject last_resort_memory_error;
92
} singletons;
93
};
94
95
96
#ifdef __cplusplus
97
}
98
#endif
99
#endif /* !Py_INTERNAL_GLOBAL_OBJECTS_H */
100
101