17db96d56Sopenharmony_ci#ifndef Py_INTERNAL_CONTEXT_H 27db96d56Sopenharmony_ci#define Py_INTERNAL_CONTEXT_H 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci#ifndef Py_BUILD_CORE 57db96d56Sopenharmony_ci# error "this header requires Py_BUILD_CORE define" 67db96d56Sopenharmony_ci#endif 77db96d56Sopenharmony_ci 87db96d56Sopenharmony_ci#include "pycore_hamt.h" /* PyHamtObject */ 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci 117db96d56Sopenharmony_ciextern PyTypeObject _PyContextTokenMissing_Type; 127db96d56Sopenharmony_ci 137db96d56Sopenharmony_ci/* runtime lifecycle */ 147db96d56Sopenharmony_ci 157db96d56Sopenharmony_ciPyStatus _PyContext_Init(PyInterpreterState *); 167db96d56Sopenharmony_civoid _PyContext_Fini(PyInterpreterState *); 177db96d56Sopenharmony_ci 187db96d56Sopenharmony_ci 197db96d56Sopenharmony_ci/* other API */ 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ci#ifndef WITH_FREELISTS 227db96d56Sopenharmony_ci// without freelists 237db96d56Sopenharmony_ci# define PyContext_MAXFREELIST 0 247db96d56Sopenharmony_ci#endif 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ci#ifndef PyContext_MAXFREELIST 277db96d56Sopenharmony_ci# define PyContext_MAXFREELIST 255 287db96d56Sopenharmony_ci#endif 297db96d56Sopenharmony_ci 307db96d56Sopenharmony_cistruct _Py_context_state { 317db96d56Sopenharmony_ci#if PyContext_MAXFREELIST > 0 327db96d56Sopenharmony_ci // List of free PyContext objects 337db96d56Sopenharmony_ci PyContext *freelist; 347db96d56Sopenharmony_ci int numfree; 357db96d56Sopenharmony_ci#endif 367db96d56Sopenharmony_ci}; 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_cistruct _pycontextobject { 397db96d56Sopenharmony_ci PyObject_HEAD 407db96d56Sopenharmony_ci PyContext *ctx_prev; 417db96d56Sopenharmony_ci PyHamtObject *ctx_vars; 427db96d56Sopenharmony_ci PyObject *ctx_weakreflist; 437db96d56Sopenharmony_ci int ctx_entered; 447db96d56Sopenharmony_ci}; 457db96d56Sopenharmony_ci 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_cistruct _pycontextvarobject { 487db96d56Sopenharmony_ci PyObject_HEAD 497db96d56Sopenharmony_ci PyObject *var_name; 507db96d56Sopenharmony_ci PyObject *var_default; 517db96d56Sopenharmony_ci PyObject *var_cached; 527db96d56Sopenharmony_ci uint64_t var_cached_tsid; 537db96d56Sopenharmony_ci uint64_t var_cached_tsver; 547db96d56Sopenharmony_ci Py_hash_t var_hash; 557db96d56Sopenharmony_ci}; 567db96d56Sopenharmony_ci 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_cistruct _pycontexttokenobject { 597db96d56Sopenharmony_ci PyObject_HEAD 607db96d56Sopenharmony_ci PyContext *tok_ctx; 617db96d56Sopenharmony_ci PyContextVar *tok_var; 627db96d56Sopenharmony_ci PyObject *tok_oldval; 637db96d56Sopenharmony_ci int tok_used; 647db96d56Sopenharmony_ci}; 657db96d56Sopenharmony_ci 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci#endif /* !Py_INTERNAL_CONTEXT_H */ 68