1 #ifndef Py_INTERNAL_CONTEXT_H
2 #define Py_INTERNAL_CONTEXT_H
3 
4 #ifndef Py_BUILD_CORE
5 #  error "this header requires Py_BUILD_CORE define"
6 #endif
7 
8 #include "pycore_hamt.h"   /* PyHamtObject */
9 
10 
11 extern PyTypeObject _PyContextTokenMissing_Type;
12 
13 /* runtime lifecycle */
14 
15 PyStatus _PyContext_Init(PyInterpreterState *);
16 void _PyContext_Fini(PyInterpreterState *);
17 
18 
19 /* other API */
20 
21 #ifndef WITH_FREELISTS
22 // without freelists
23 #  define PyContext_MAXFREELIST 0
24 #endif
25 
26 #ifndef PyContext_MAXFREELIST
27 #  define PyContext_MAXFREELIST 255
28 #endif
29 
30 struct _Py_context_state {
31 #if PyContext_MAXFREELIST > 0
32     // List of free PyContext objects
33     PyContext *freelist;
34     int numfree;
35 #endif
36 };
37 
38 struct _pycontextobject {
39     PyObject_HEAD
40     PyContext *ctx_prev;
41     PyHamtObject *ctx_vars;
42     PyObject *ctx_weakreflist;
43     int ctx_entered;
44 };
45 
46 
47 struct _pycontextvarobject {
48     PyObject_HEAD
49     PyObject *var_name;
50     PyObject *var_default;
51     PyObject *var_cached;
52     uint64_t var_cached_tsid;
53     uint64_t var_cached_tsver;
54     Py_hash_t var_hash;
55 };
56 
57 
58 struct _pycontexttokenobject {
59     PyObject_HEAD
60     PyContext *tok_ctx;
61     PyContextVar *tok_var;
62     PyObject *tok_oldval;
63     int tok_used;
64 };
65 
66 
67 #endif /* !Py_INTERNAL_CONTEXT_H */
68