3#ifndef __NUITKA_HELPER_RAISING_H__
4#define __NUITKA_HELPER_RAISING_H__
6#if PYTHON_VERSION >= 0x300
7NUITKA_MAY_BE_UNUSED
static void CHAIN_EXCEPTION(PyThreadState *tstate, PyObject *exception_value) {
11#if PYTHON_VERSION < 0x3b0
16 NORMALIZE_EXCEPTION_STATE(tstate, exception_state);
20 PyObject *old_exc_value = EXC_VALUE(tstate);
22 if (old_exc_value != NULL && old_exc_value != Py_None && old_exc_value != exception_value) {
23 PyObject *current = old_exc_value;
25 PyObject *context = Nuitka_Exception_GetContext(current);
26 if (context == NULL) {
30 CHECK_OBJECT(context);
32 if (context == exception_value) {
33 Nuitka_Exception_DeleteContext(current);
40 CHECK_OBJECT(old_exc_value);
41 Nuitka_Exception_SetContext(exception_value, old_exc_value);
43#if PYTHON_VERSION < 0x3b0
44 CHECK_OBJECT(EXC_TRACEBACK(tstate));
45 ATTACH_TRACEBACK_TO_EXCEPTION_VALUE(old_exc_value, (PyTracebackObject *)EXC_TRACEBACK(tstate));
51#if PYTHON_VERSION < 0x3c0
53extern void RAISE_EXCEPTION_WITH_TYPE_AND_VALUE(PyThreadState *tstate,
59#if PYTHON_VERSION < 0x300
60extern void RAISE_EXCEPTION_WITH_TRACEBACK(PyThreadState *tstate,
64 PyObject *exception_cause);
69extern void RAISE_CURRENT_EXCEPTION_NAME_ERROR(PyThreadState *tstate,
71 PyObject *variable_name);
73#if PYTHON_VERSION < 0x300
74extern void RAISE_CURRENT_EXCEPTION_GLOBAL_NAME_ERROR(PyThreadState *tstate,
76 PyObject *variable_name);
79extern PyObject *NORMALIZE_EXCEPTION_VALUE_FOR_RAISE(PyThreadState *tstate, PyObject *exception_type);
81#if PYTHON_VERSION >= 0x300
82extern PyObject *MAKE_STOP_ITERATION_EMPTY(
void);
83extern PyObject *MAKE_BASE_EXCEPTION_DERIVED_EMPTY(PyObject *exception_type);
86NUITKA_MAY_BE_UNUSED
static inline void
87SET_EXCEPTION_PRESERVATION_STATE_STOP_ITERATION_EMPTY(PyThreadState *tstate,
89#if PYTHON_VERSION < 0x3c0
90 SET_EXCEPTION_PRESERVATION_STATE_FROM_TYPE0(tstate, exception_state, PyExc_StopIteration);
92 exception_state->exception_value = MAKE_STOP_ITERATION_EMPTY();
97extern PyObject *MAKE_EXCEPTION_WITH_VALUE(PyThreadState *tstate, PyObject *exception_type, PyObject *value);
Definition exceptions.h:712