#ifndef Py_INTERNAL_INTERP_H #define Py_INTERNAL_INTERP_H #ifdef __cplusplus extern "C" { #endif #ifndef Py_BUILD_CORE # error "this header requires Py_BUILD_CORE define" #endif #include <stdbool.h> // bool #include "pycore_ast_state.h" // struct ast_state #include "pycore_atexit.h" // struct atexit_state #include "pycore_ceval_state.h" // struct _ceval_state #include "pycore_code.h" // struct callable_cache #include "pycore_codecs.h" // struct codecs_state #include "pycore_context.h" // struct _Py_context_state #include "pycore_crossinterp.h" // _PyXI_state_t #include "pycore_dict_state.h" // struct _Py_dict_state #include "pycore_dtoa.h" // struct _dtoa_state #include "pycore_exceptions.h" // struct _Py_exc_state #include "pycore_floatobject.h" // struct _Py_float_state #include "pycore_function.h" // FUNC_MAX_WATCHERS #include "pycore_gc.h" // struct _gc_runtime_state #include "pycore_genobject.h" // _PyGen_FetchStopIterationValue #include "pycore_global_objects.h"// struct _Py_interp_cached_objects #include "pycore_import.h" // struct _import_state #include "pycore_index_pool.h" // _PyIndexPool #include "pycore_instruments.h" // _PY_MONITORING_EVENTS #include "pycore_list.h" // struct _Py_list_state #include "pycore_mimalloc.h" // struct _mimalloc_interp_state #include "pycore_object_state.h" // struct _py_object_state #include "pycore_optimizer.h" // _PyOptimizerObject #include "pycore_obmalloc.h" // struct _obmalloc_state #include "pycore_qsbr.h" // struct _qsbr_state #include "pycore_tstate.h" // _PyThreadStateImpl #include "pycore_tuple.h" // struct _Py_tuple_state #include "pycore_uniqueid.h" // struct _Py_unique_id_pool #include "pycore_typeobject.h" // struct types_state #include "pycore_unicodeobject.h" // struct _Py_unicode_state #include "pycore_warnings.h" // struct _warnings_runtime_state struct _Py_long_state { … }; // Support for stop-the-world events. This exists in both the PyRuntime struct // for global pauses and in each PyInterpreterState for per-interpreter pauses. struct _stoptheworld_state { … }; #ifdef Py_GIL_DISABLED // This should be prime but otherwise the choice is arbitrary. A larger value // increases concurrency at the expense of memory. #define NUM_WEAKREF_LIST_LOCKS … #endif /* cross-interpreter data registry */ /* Tracks some rare events per-interpreter, used by the optimizer to turn on/off specific optimizations. */ _rare_events; /* interpreter state */ /* PyInterpreterState holds the global state for one of the runtime's interpreters. Typically the initial (main) interpreter is the only one. The PyInterpreterState typedef is in Include/pytypedefs.h. */ struct _is { … }; /* other API */ extern void _PyInterpreterState_Clear(PyThreadState *tstate); static inline PyThreadState* _PyInterpreterState_GetFinalizing(PyInterpreterState *interp) { … } static inline unsigned long _PyInterpreterState_GetFinalizingID(PyInterpreterState *interp) { … } static inline void _PyInterpreterState_SetFinalizing(PyInterpreterState *interp, PyThreadState *tstate) { … } // Exports for the _testinternalcapi module. PyAPI_FUNC(int64_t) _PyInterpreterState_ObjectToID(PyObject *); PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpID(int64_t); PyAPI_FUNC(PyInterpreterState *) _PyInterpreterState_LookUpIDObject(PyObject *); PyAPI_FUNC(void) _PyInterpreterState_IDIncref(PyInterpreterState *); PyAPI_FUNC(void) _PyInterpreterState_IDDecref(PyInterpreterState *); PyAPI_FUNC(int) _PyInterpreterState_IsReady(PyInterpreterState *interp); PyAPI_FUNC(long) _PyInterpreterState_GetWhence(PyInterpreterState *interp); extern void _PyInterpreterState_SetWhence( PyInterpreterState *interp, long whence); extern const PyConfig* _PyInterpreterState_GetConfig(PyInterpreterState *interp); // Get a copy of the current interpreter configuration. // // Return 0 on success. Raise an exception and return -1 on error. // // The caller must initialize 'config', using PyConfig_InitPythonConfig() // for example. // // Python must be preinitialized to call this method. // The caller must hold the GIL. // // Once done with the configuration, PyConfig_Clear() must be called to clear // it. // // Export for '_testinternalcapi' shared extension. PyAPI_FUNC(int) _PyInterpreterState_GetConfigCopy( struct PyConfig *config); // Set the configuration of the current interpreter. // // This function should be called during or just after the Python // initialization. // // Update the sys module with the new configuration. If the sys module was // modified directly after the Python initialization, these changes are lost. // // Some configuration like faulthandler or warnoptions can be updated in the // configuration, but don't reconfigure Python (don't enable/disable // faulthandler and don't reconfigure warnings filters). // // Return 0 on success. Raise an exception and return -1 on error. // // The configuration should come from _PyInterpreterState_GetConfigCopy(). // // Export for '_testinternalcapi' shared extension. PyAPI_FUNC(int) _PyInterpreterState_SetConfig( const struct PyConfig *config); /* Runtime Feature Flags Each flag indicate whether or not a specific runtime feature is available in a given context. For example, forking the process might not be allowed in the current interpreter (i.e. os.fork() would fail). */ /* Set if the interpreter share obmalloc runtime state with the main interpreter. */ #define Py_RTFLAGS_USE_MAIN_OBMALLOC … /* Set if import should check a module for subinterpreter support. */ #define Py_RTFLAGS_MULTI_INTERP_EXTENSIONS … /* Set if threads are allowed. */ #define Py_RTFLAGS_THREADS … /* Set if daemon threads are allowed. */ #define Py_RTFLAGS_DAEMON_THREADS … /* Set if os.fork() is allowed. */ #define Py_RTFLAGS_FORK … /* Set if os.exec*() is allowed. */ #define Py_RTFLAGS_EXEC … extern int _PyInterpreterState_HasFeature(PyInterpreterState *interp, unsigned long feature); PyAPI_FUNC(PyStatus) _PyInterpreterState_New( PyThreadState *tstate, PyInterpreterState **pinterp); #define RARE_EVENT_INTERP_INC(interp, name) … \ #define RARE_EVENT_INC(name) … \ #ifdef __cplusplus } #endif #endif /* !Py_INTERNAL_INTERP_H */