2018-01-22 20:11:18 -04:00
|
|
|
#ifndef Py_INTERNAL_CONTEXT_H
|
|
|
|
#define Py_INTERNAL_CONTEXT_H
|
|
|
|
|
2019-04-17 18:02:26 -03:00
|
|
|
#ifndef Py_BUILD_CORE
|
|
|
|
# error "this header requires Py_BUILD_CORE define"
|
2018-11-09 08:03:37 -04:00
|
|
|
#endif
|
2018-01-22 20:11:18 -04:00
|
|
|
|
2023-08-21 15:05:59 -03:00
|
|
|
#include "pycore_hamt.h" // PyHamtObject
|
2018-01-22 20:11:18 -04:00
|
|
|
|
2024-09-24 00:40:17 -03:00
|
|
|
#define CONTEXT_MAX_WATCHERS 8
|
2021-12-09 15:59:26 -04:00
|
|
|
|
2022-01-22 13:55:48 -04:00
|
|
|
extern PyTypeObject _PyContextTokenMissing_Type;
|
|
|
|
|
2021-12-09 15:59:26 -04:00
|
|
|
/* runtime lifecycle */
|
|
|
|
|
2022-01-22 13:55:48 -04:00
|
|
|
PyStatus _PyContext_Init(PyInterpreterState *);
|
2021-12-09 15:59:26 -04:00
|
|
|
|
|
|
|
|
|
|
|
/* other API */
|
|
|
|
|
2022-11-16 12:54:28 -04:00
|
|
|
typedef struct {
|
|
|
|
PyObject_HEAD
|
|
|
|
} _PyContextTokenMissing;
|
|
|
|
|
2018-01-22 20:11:18 -04:00
|
|
|
struct _pycontextobject {
|
|
|
|
PyObject_HEAD
|
|
|
|
PyContext *ctx_prev;
|
|
|
|
PyHamtObject *ctx_vars;
|
|
|
|
PyObject *ctx_weakreflist;
|
|
|
|
int ctx_entered;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct _pycontextvarobject {
|
|
|
|
PyObject_HEAD
|
|
|
|
PyObject *var_name;
|
|
|
|
PyObject *var_default;
|
2024-07-15 15:57:58 -03:00
|
|
|
#ifndef Py_GIL_DISABLED
|
2018-01-22 20:11:18 -04:00
|
|
|
PyObject *var_cached;
|
|
|
|
uint64_t var_cached_tsid;
|
|
|
|
uint64_t var_cached_tsver;
|
2024-07-15 15:57:58 -03:00
|
|
|
#endif
|
2018-01-22 20:11:18 -04:00
|
|
|
Py_hash_t var_hash;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
struct _pycontexttokenobject {
|
|
|
|
PyObject_HEAD
|
|
|
|
PyContext *tok_ctx;
|
|
|
|
PyContextVar *tok_var;
|
|
|
|
PyObject *tok_oldval;
|
|
|
|
int tok_used;
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2023-08-24 14:37:41 -03:00
|
|
|
// _testinternalcapi.hamt() used by tests.
|
|
|
|
// Export for '_testcapi' shared extension
|
|
|
|
PyAPI_FUNC(PyObject*) _PyContext_NewHamtForTests(void);
|
|
|
|
|
|
|
|
|
2018-01-22 20:11:18 -04:00
|
|
|
#endif /* !Py_INTERNAL_CONTEXT_H */
|