SILENT KILLERPanel

Current Path: > > opt > > alt > python313 > include > > > python3.13 > internal


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt//alt/python313/include///python3.13/internal

NameTypeSizeLast ModifiedActions
mimalloc Directory - -
pycore_abstract.h File 1915 bytes June 11 2025 15:36:57.
pycore_asdl.h File 3035 bytes June 11 2025 15:36:57.
pycore_ast.h File 31520 bytes June 11 2025 15:36:57.
pycore_ast_state.h File 6779 bytes June 11 2025 15:36:57.
pycore_atexit.h File 1433 bytes June 11 2025 15:36:57.
pycore_backoff.h File 3902 bytes June 11 2025 15:36:57.
pycore_bitutils.h File 6026 bytes June 11 2025 15:36:57.
pycore_blocks_output_buffer.h File 8772 bytes June 11 2025 15:36:57.
pycore_brc.h File 2102 bytes June 11 2025 15:36:57.
pycore_bytes_methods.h File 3933 bytes June 11 2025 15:36:57.
pycore_bytesobject.h File 5099 bytes June 11 2025 15:36:57.
pycore_call.h File 6135 bytes June 11 2025 15:36:57.
pycore_capsule.h File 397 bytes June 11 2025 15:36:57.
pycore_cell.h File 1057 bytes June 11 2025 15:36:57.
pycore_ceval.h File 11162 bytes June 11 2025 15:36:57.
pycore_ceval_state.h File 3921 bytes June 11 2025 15:36:57.
pycore_code.h File 19864 bytes June 11 2025 15:36:57.
pycore_codecs.h File 2465 bytes June 11 2025 15:36:57.
pycore_compile.h File 3750 bytes June 11 2025 15:36:57.
pycore_complexobject.h File 588 bytes June 11 2025 15:36:57.
pycore_condvar.h File 2704 bytes June 11 2025 15:36:57.
pycore_context.h File 1182 bytes June 11 2025 15:36:57.
pycore_critical_section.h File 7968 bytes June 11 2025 15:36:57.
pycore_crossinterp.h File 12128 bytes June 11 2025 15:36:57.
pycore_descrobject.h File 543 bytes June 11 2025 15:36:57.
pycore_dict.h File 12264 bytes June 11 2025 15:36:57.
pycore_dict_state.h File 732 bytes June 11 2025 15:36:57.
pycore_dtoa.h File 1727 bytes June 11 2025 15:36:57.
pycore_emscripten_signal.h File 685 bytes June 11 2025 15:36:57.
pycore_emscripten_trampoline.h File 3180 bytes June 11 2025 15:36:57.
pycore_exceptions.h File 900 bytes June 11 2025 15:36:57.
pycore_faulthandler.h File 2245 bytes June 11 2025 15:36:57.
pycore_fileutils.h File 9468 bytes June 11 2025 15:36:57.
pycore_fileutils_windows.h File 2713 bytes June 11 2025 15:36:57.
pycore_floatobject.h File 1495 bytes June 11 2025 15:36:57.
pycore_flowgraph.h File 1489 bytes June 11 2025 15:36:57.
pycore_format.h File 480 bytes June 11 2025 15:36:57.
pycore_frame.h File 10875 bytes June 11 2025 15:36:57.
pycore_freelist.h File 4810 bytes June 11 2025 15:36:57.
pycore_function.h File 1538 bytes June 11 2025 15:36:57.
pycore_gc.h File 12967 bytes June 11 2025 15:36:57.
pycore_genobject.h File 859 bytes June 11 2025 15:36:57.
pycore_getopt.h File 490 bytes June 11 2025 15:36:57.
pycore_gil.h File 2196 bytes June 11 2025 15:36:57.
pycore_global_objects.h File 3090 bytes June 11 2025 15:36:57.
pycore_global_objects_fini_generated.h File 117804 bytes June 11 2025 15:36:57.
pycore_global_strings.h File 26706 bytes June 11 2025 15:36:57.
pycore_hamt.h File 3742 bytes June 11 2025 15:36:57.
pycore_hashtable.h File 4361 bytes June 11 2025 15:36:57.
pycore_identifier.h File 515 bytes June 11 2025 15:36:57.
pycore_import.h File 7731 bytes June 11 2025 15:36:57.
pycore_importdl.h File 4055 bytes June 11 2025 15:36:57.
pycore_initconfig.h File 6375 bytes June 11 2025 15:36:57.
pycore_instruction_sequence.h File 2161 bytes June 11 2025 15:36:57.
pycore_instruments.h File 2331 bytes June 11 2025 15:36:57.
pycore_interp.h File 15063 bytes June 11 2025 15:36:57.
pycore_intrinsics.h File 1756 bytes June 11 2025 15:36:57.
pycore_jit.h File 527 bytes June 11 2025 15:36:57.
pycore_list.h File 1859 bytes June 11 2025 15:36:57.
pycore_llist.h File 2420 bytes June 11 2025 15:36:57.
pycore_lock.h File 8538 bytes June 11 2025 15:36:57.
pycore_long.h File 9966 bytes June 11 2025 15:36:57.
pycore_memoryobject.h File 427 bytes June 11 2025 15:36:57.
pycore_mimalloc.h File 1637 bytes June 11 2025 15:36:57.
pycore_modsupport.h File 3351 bytes June 11 2025 15:36:57.
pycore_moduleobject.h File 1572 bytes June 11 2025 15:36:57.
pycore_namespace.h File 435 bytes June 11 2025 15:36:57.
pycore_object.h File 27935 bytes June 11 2025 15:36:57.
pycore_object_alloc.h File 2176 bytes June 11 2025 15:36:57.
pycore_object_stack.h File 2384 bytes June 11 2025 15:36:57.
pycore_object_state.h File 942 bytes June 11 2025 15:36:57.
pycore_obmalloc.h File 27418 bytes June 11 2025 15:36:57.
pycore_obmalloc_init.h File 1935 bytes June 11 2025 15:36:57.
pycore_opcode_metadata.h File 84722 bytes June 11 2025 15:36:57.
pycore_opcode_utils.h File 2122 bytes June 11 2025 15:36:57.
pycore_optimizer.h File 8303 bytes June 11 2025 15:36:57.
pycore_parking_lot.h File 3351 bytes June 11 2025 15:36:57.
pycore_parser.h File 2089 bytes June 11 2025 15:36:57.
pycore_pathconfig.h File 658 bytes June 11 2025 15:36:57.
pycore_pyarena.h File 2862 bytes June 11 2025 15:36:57.
pycore_pyatomic_ft_wrappers.h File 8056 bytes June 11 2025 15:36:57.
pycore_pybuffer.h File 510 bytes June 11 2025 15:36:57.
pycore_pyerrors.h File 4960 bytes June 11 2025 15:36:57.
pycore_pyhash.h File 2813 bytes June 11 2025 15:36:57.
pycore_pylifecycle.h File 4465 bytes June 11 2025 15:36:57.
pycore_pymath.h File 8600 bytes June 11 2025 15:36:57.
pycore_pymem.h File 4472 bytes June 11 2025 15:36:57.
pycore_pymem_init.h File 3520 bytes June 11 2025 15:36:57.
pycore_pystate.h File 9964 bytes June 11 2025 15:36:57.
pycore_pystats.h File 420 bytes June 11 2025 15:36:57.
pycore_pythonrun.h File 758 bytes June 11 2025 15:36:57.
pycore_pythread.h File 5431 bytes June 11 2025 15:36:57.
pycore_qsbr.h File 4927 bytes June 11 2025 15:36:57.
pycore_range.h File 346 bytes June 11 2025 15:36:57.
pycore_runtime.h File 13165 bytes June 11 2025 15:36:57.
pycore_runtime_init.h File 13045 bytes June 11 2025 15:36:57.
pycore_runtime_init_generated.h File 46820 bytes June 11 2025 15:36:57.
pycore_semaphore.h File 1731 bytes June 11 2025 15:36:57.
pycore_setobject.h File 951 bytes June 11 2025 15:36:57.
pycore_signal.h File 2931 bytes June 11 2025 15:36:57.
pycore_sliceobject.h File 369 bytes June 11 2025 15:36:57.
pycore_stackref.h File 5186 bytes June 11 2025 15:36:57.
pycore_strhex.h File 1013 bytes June 11 2025 15:36:57.
pycore_structseq.h File 963 bytes June 11 2025 15:36:57.
pycore_symtable.h File 8671 bytes June 11 2025 15:36:57.
pycore_sysmodule.h File 1177 bytes June 11 2025 15:36:57.
pycore_time.h File 11794 bytes June 11 2025 15:36:57.
pycore_token.h File 3001 bytes June 11 2025 15:36:57.
pycore_traceback.h File 3629 bytes June 11 2025 15:36:57.
pycore_tracemalloc.h File 4533 bytes June 11 2025 15:36:57.
pycore_tstate.h File 1354 bytes June 11 2025 15:36:57.
pycore_tuple.h File 820 bytes June 11 2025 15:36:57.
pycore_typeobject.h File 8877 bytes June 11 2025 15:36:57.
pycore_typevarobject.h File 924 bytes June 11 2025 15:36:57.
pycore_ucnhash.h File 958 bytes June 11 2025 15:36:57.
pycore_unicodeobject.h File 13270 bytes June 11 2025 15:36:57.
pycore_unicodeobject_generated.h File 132140 bytes June 11 2025 15:36:57.
pycore_unionobject.h File 742 bytes June 11 2025 15:36:57.
pycore_uop_ids.h File 10267 bytes June 11 2025 15:36:57.
pycore_uop_metadata.h File 39469 bytes June 11 2025 15:36:57.
pycore_warnings.h File 840 bytes June 11 2025 15:36:57.
pycore_weakref.h File 3331 bytes June 11 2025 15:36:57.

Reading File: //opt//alt/python313/include///python3.13/internal/pycore_crossinterp.h

#ifndef Py_INTERNAL_CROSSINTERP_H
#define Py_INTERNAL_CROSSINTERP_H
#ifdef __cplusplus
extern "C" {
#endif

#ifndef Py_BUILD_CORE
#  error "this header requires Py_BUILD_CORE define"
#endif

#include "pycore_lock.h"            // PyMutex
#include "pycore_pyerrors.h"

/**************/
/* exceptions */
/**************/

PyAPI_DATA(PyObject *) PyExc_InterpreterError;
PyAPI_DATA(PyObject *) PyExc_InterpreterNotFoundError;


/***************************/
/* cross-interpreter calls */
/***************************/

typedef int (*_Py_simple_func)(void *);
extern int _Py_CallInInterpreter(
    PyInterpreterState *interp,
    _Py_simple_func func,
    void *arg);
extern int _Py_CallInInterpreterAndRawFree(
    PyInterpreterState *interp,
    _Py_simple_func func,
    void *arg);


/**************************/
/* cross-interpreter data */
/**************************/

typedef struct _xid _PyCrossInterpreterData;
typedef PyObject *(*xid_newobjectfunc)(_PyCrossInterpreterData *);
typedef void (*xid_freefunc)(void *);

// _PyCrossInterpreterData is similar to Py_buffer as an effectively
// opaque struct that holds data outside the object machinery.  This
// is necessary to pass safely between interpreters in the same process.
struct _xid {
    // data is the cross-interpreter-safe derivation of a Python object
    // (see _PyObject_GetCrossInterpreterData).  It will be NULL if the
    // new_object func (below) encodes the data.
    void *data;
    // obj is the Python object from which the data was derived.  This
    // is non-NULL only if the data remains bound to the object in some
    // way, such that the object must be "released" (via a decref) when
    // the data is released.  In that case the code that sets the field,
    // likely a registered "crossinterpdatafunc", is responsible for
    // ensuring it owns the reference (i.e. incref).
    PyObject *obj;
    // interp is the ID of the owning interpreter of the original
    // object.  It corresponds to the active interpreter when
    // _PyObject_GetCrossInterpreterData() was called.  This should only
    // be set by the cross-interpreter machinery.
    //
    // We use the ID rather than the PyInterpreterState to avoid issues
    // with deleted interpreters.  Note that IDs are never re-used, so
    // each one will always correspond to a specific interpreter
    // (whether still alive or not).
    int64_t interpid;
    // new_object is a function that returns a new object in the current
    // interpreter given the data.  The resulting object (a new
    // reference) will be equivalent to the original object.  This field
    // is required.
    xid_newobjectfunc new_object;
    // free is called when the data is released.  If it is NULL then
    // nothing will be done to free the data.  For some types this is
    // okay (e.g. bytes) and for those types this field should be set
    // to NULL.  However, for most the data was allocated just for
    // cross-interpreter use, so it must be freed when
    // _PyCrossInterpreterData_Release is called or the memory will
    // leak.  In that case, at the very least this field should be set
    // to PyMem_RawFree (the default if not explicitly set to NULL).
    // The call will happen with the original interpreter activated.
    xid_freefunc free;
};

PyAPI_FUNC(_PyCrossInterpreterData *) _PyCrossInterpreterData_New(void);
PyAPI_FUNC(void) _PyCrossInterpreterData_Free(_PyCrossInterpreterData *data);

#define _PyCrossInterpreterData_DATA(DATA) ((DATA)->data)
#define _PyCrossInterpreterData_OBJ(DATA) ((DATA)->obj)
#define _PyCrossInterpreterData_INTERPID(DATA) ((DATA)->interpid)
// Users should not need getters for "new_object" or "free".


/* defining cross-interpreter data */

PyAPI_FUNC(void) _PyCrossInterpreterData_Init(
        _PyCrossInterpreterData *data,
        PyInterpreterState *interp, void *shared, PyObject *obj,
        xid_newobjectfunc new_object);
PyAPI_FUNC(int) _PyCrossInterpreterData_InitWithSize(
        _PyCrossInterpreterData *,
        PyInterpreterState *interp, const size_t, PyObject *,
        xid_newobjectfunc);
PyAPI_FUNC(void) _PyCrossInterpreterData_Clear(
        PyInterpreterState *, _PyCrossInterpreterData *);

// Normally the Init* functions are sufficient.  The only time
// additional initialization might be needed is to set the "free" func,
// though that should be infrequent.
#define _PyCrossInterpreterData_SET_FREE(DATA, FUNC) \
    do { \
        (DATA)->free = (FUNC); \
    } while (0)
// Additionally, some shareable types are essentially light wrappers
// around other shareable types.  The crossinterpdatafunc of the wrapper
// can often be implemented by calling the wrapped object's
// crossinterpdatafunc and then changing the "new_object" function.
// We have _PyCrossInterpreterData_SET_NEW_OBJECT() here for that,
// but might be better to have a function like
// _PyCrossInterpreterData_AdaptToWrapper() instead.
#define _PyCrossInterpreterData_SET_NEW_OBJECT(DATA, FUNC) \
    do { \
        (DATA)->new_object = (FUNC); \
    } while (0)


/* using cross-interpreter data */

PyAPI_FUNC(int) _PyObject_CheckCrossInterpreterData(PyObject *);
PyAPI_FUNC(int) _PyObject_GetCrossInterpreterData(PyObject *, _PyCrossInterpreterData *);
PyAPI_FUNC(PyObject *) _PyCrossInterpreterData_NewObject(_PyCrossInterpreterData *);
PyAPI_FUNC(int) _PyCrossInterpreterData_Release(_PyCrossInterpreterData *);
PyAPI_FUNC(int) _PyCrossInterpreterData_ReleaseAndRawFree(_PyCrossInterpreterData *);


/* cross-interpreter data registry */

// For now we use a global registry of shareable classes.  An
// alternative would be to add a tp_* slot for a class's
// crossinterpdatafunc. It would be simpler and more efficient.

typedef int (*crossinterpdatafunc)(PyThreadState *tstate, PyObject *,
                                   _PyCrossInterpreterData *);

struct _xidregitem;

struct _xidregitem {
    struct _xidregitem *prev;
    struct _xidregitem *next;
    /* This can be a dangling pointer, but only if weakref is set. */
    PyTypeObject *cls;
    /* This is NULL for builtin types. */
    PyObject *weakref;
    size_t refcount;
    crossinterpdatafunc getdata;
};

struct _xidregistry {
    int global;  /* builtin types or heap types */
    int initialized;
    PyMutex mutex;
    struct _xidregitem *head;
};

PyAPI_FUNC(int) _PyCrossInterpreterData_RegisterClass(PyTypeObject *, crossinterpdatafunc);
PyAPI_FUNC(int) _PyCrossInterpreterData_UnregisterClass(PyTypeObject *);
PyAPI_FUNC(crossinterpdatafunc) _PyCrossInterpreterData_Lookup(PyObject *);


/*****************************/
/* runtime state & lifecycle */
/*****************************/

struct _xi_runtime_state {
    // builtin types
    // XXX Remove this field once we have a tp_* slot.
    struct _xidregistry registry;
};

struct _xi_state {
    // heap types
    // XXX Remove this field once we have a tp_* slot.
    struct _xidregistry registry;

    // heap types
    PyObject *PyExc_NotShareableError;
};

extern PyStatus _PyXI_Init(PyInterpreterState *interp);
extern void _PyXI_Fini(PyInterpreterState *interp);

extern PyStatus _PyXI_InitTypes(PyInterpreterState *interp);
extern void _PyXI_FiniTypes(PyInterpreterState *interp);

#define _PyInterpreterState_GetXIState(interp) (&(interp)->xi)


/***************************/
/* short-term data sharing */
/***************************/

// Ultimately we'd like to preserve enough information about the
// exception and traceback that we could re-constitute (or at least
// simulate, a la traceback.TracebackException), and even chain, a copy
// of the exception in the calling interpreter.

typedef struct _excinfo {
    struct _excinfo_type {
        PyTypeObject *builtin;
        const char *name;
        const char *qualname;
        const char *module;
    } type;
    const char *msg;
    const char *errdisplay;
} _PyXI_excinfo;

PyAPI_FUNC(int) _PyXI_InitExcInfo(_PyXI_excinfo *info, PyObject *exc);
PyAPI_FUNC(PyObject *) _PyXI_FormatExcInfo(_PyXI_excinfo *info);
PyAPI_FUNC(PyObject *) _PyXI_ExcInfoAsObject(_PyXI_excinfo *info);
PyAPI_FUNC(void) _PyXI_ClearExcInfo(_PyXI_excinfo *info);


typedef enum error_code {
    _PyXI_ERR_NO_ERROR = 0,
    _PyXI_ERR_UNCAUGHT_EXCEPTION = -1,
    _PyXI_ERR_OTHER = -2,
    _PyXI_ERR_NO_MEMORY = -3,
    _PyXI_ERR_ALREADY_RUNNING = -4,
    _PyXI_ERR_MAIN_NS_FAILURE = -5,
    _PyXI_ERR_APPLY_NS_FAILURE = -6,
    _PyXI_ERR_NOT_SHAREABLE = -7,
} _PyXI_errcode;


typedef struct _sharedexception {
    // The originating interpreter.
    PyInterpreterState *interp;
    // The kind of error to propagate.
    _PyXI_errcode code;
    // The exception information to propagate, if applicable.
    // This is populated only for some error codes,
    // but always for _PyXI_ERR_UNCAUGHT_EXCEPTION.
    _PyXI_excinfo uncaught;
} _PyXI_error;

PyAPI_FUNC(PyObject *) _PyXI_ApplyError(_PyXI_error *err);


typedef struct xi_session _PyXI_session;
typedef struct _sharedns _PyXI_namespace;

PyAPI_FUNC(void) _PyXI_FreeNamespace(_PyXI_namespace *ns);
PyAPI_FUNC(_PyXI_namespace *) _PyXI_NamespaceFromNames(PyObject *names);
PyAPI_FUNC(int) _PyXI_FillNamespaceFromDict(
    _PyXI_namespace *ns,
    PyObject *nsobj,
    _PyXI_session *session);
PyAPI_FUNC(int) _PyXI_ApplyNamespace(
    _PyXI_namespace *ns,
    PyObject *nsobj,
    PyObject *dflt);


// A cross-interpreter session involves entering an interpreter
// (_PyXI_Enter()), doing some work with it, and finally exiting
// that interpreter (_PyXI_Exit()).
//
// At the boundaries of the session, both entering and exiting,
// data may be exchanged between the previous interpreter and the
// target one in a thread-safe way that does not violate the
// isolation between interpreters.  This includes setting objects
// in the target's __main__ module on the way in, and capturing
// uncaught exceptions on the way out.
struct xi_session {
    // Once a session has been entered, this is the tstate that was
    // current before the session.  If it is different from cur_tstate
    // then we must have switched interpreters.  Either way, this will
    // be the current tstate once we exit the session.
    PyThreadState *prev_tstate;
    // Once a session has been entered, this is the current tstate.
    // It must be current when the session exits.
    PyThreadState *init_tstate;
    // This is true if init_tstate needs cleanup during exit.
    int own_init_tstate;

    // This is true if, while entering the session, init_thread took
    // "ownership" of the interpreter's __main__ module.  This means
    // it is the only thread that is allowed to run code there.
    // (Caveat: for now, users may still run exec() against the
    // __main__ module's dict, though that isn't advisable.)
    int running;
    // This is a cached reference to the __dict__ of the entered
    // interpreter's __main__ module.  It is looked up when at the
    // beginning of the session as a convenience.
    PyObject *main_ns;

    // This is set if the interpreter is entered and raised an exception
    // that needs to be handled in some special way during exit.
    _PyXI_errcode *error_override;
    // This is set if exit captured an exception to propagate.
    _PyXI_error *error;

    // -- pre-allocated memory --
    _PyXI_error _error;
    _PyXI_errcode _error_override;
};

PyAPI_FUNC(int) _PyXI_Enter(
    _PyXI_session *session,
    PyInterpreterState *interp,
    PyObject *nsupdates);
PyAPI_FUNC(void) _PyXI_Exit(_PyXI_session *session);

PyAPI_FUNC(PyObject *) _PyXI_ApplyCapturedException(_PyXI_session *session);
PyAPI_FUNC(int) _PyXI_HasCapturedException(_PyXI_session *session);


/*************/
/* other API */
/*************/

// Export for _testinternalcapi shared extension
PyAPI_FUNC(PyInterpreterState *) _PyXI_NewInterpreter(
    PyInterpreterConfig *config,
    long *maybe_whence,
    PyThreadState **p_tstate,
    PyThreadState **p_save_tstate);
PyAPI_FUNC(void) _PyXI_EndInterpreter(
    PyInterpreterState *interp,
    PyThreadState *tstate,
    PyThreadState **p_save_tstate);


#ifdef __cplusplus
}
#endif
#endif /* !Py_INTERNAL_CROSSINTERP_H */

SILENT KILLER Tool