1#ifndef Py_LIMITED_API 2#ifndef Py_CONTEXT_H 3#define Py_CONTEXT_H 4#ifdef __cplusplus 5extern "C" { 6#endif 7 8PyAPI_DATA(PyTypeObject) PyContext_Type; 9typedef struct _pycontextobject PyContext; 10 11PyAPI_DATA(PyTypeObject) PyContextVar_Type; 12typedef struct _pycontextvarobject PyContextVar; 13 14PyAPI_DATA(PyTypeObject) PyContextToken_Type; 15typedef struct _pycontexttokenobject PyContextToken; 16 17 18#define PyContext_CheckExact(o) Py_IS_TYPE(o, &PyContext_Type) 19#define PyContextVar_CheckExact(o) Py_IS_TYPE(o, &PyContextVar_Type) 20#define PyContextToken_CheckExact(o) Py_IS_TYPE(o, &PyContextToken_Type) 21 22 23PyAPI_FUNC(PyObject *) PyContext_New(void); 24PyAPI_FUNC(PyObject *) PyContext_Copy(PyObject *); 25PyAPI_FUNC(PyObject *) PyContext_CopyCurrent(void); 26 27PyAPI_FUNC(int) PyContext_Enter(PyObject *); 28PyAPI_FUNC(int) PyContext_Exit(PyObject *); 29 30 31/* Create a new context variable. 32 33 default_value can be NULL. 34*/ 35PyAPI_FUNC(PyObject *) PyContextVar_New( 36 const char *name, PyObject *default_value); 37 38 39/* Get a value for the variable. 40 41 Returns -1 if an error occurred during lookup. 42 43 Returns 0 if value either was or was not found. 44 45 If value was found, *value will point to it. 46 If not, it will point to: 47 48 - default_value, if not NULL; 49 - the default value of "var", if not NULL; 50 - NULL. 51 52 '*value' will be a new ref, if not NULL. 53*/ 54PyAPI_FUNC(int) PyContextVar_Get( 55 PyObject *var, PyObject *default_value, PyObject **value); 56 57 58/* Set a new value for the variable. 59 Returns NULL if an error occurs. 60*/ 61PyAPI_FUNC(PyObject *) PyContextVar_Set(PyObject *var, PyObject *value); 62 63 64/* Reset a variable to its previous value. 65 Returns 0 on success, -1 on error. 66*/ 67PyAPI_FUNC(int) PyContextVar_Reset(PyObject *var, PyObject *token); 68 69 70/* This method is exposed only for CPython tests. Don not use it. */ 71PyAPI_FUNC(PyObject *) _PyContext_NewHamtForTests(void); 72 73 74#ifdef __cplusplus 75} 76#endif 77#endif /* !Py_CONTEXT_H */ 78#endif /* !Py_LIMITED_API */ 79