| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| |
|
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | #define __Pyx_PyThreadState_declare PyThreadState *$local_tstate_cname; |
| | #define __Pyx_PyThreadState_assign $local_tstate_cname = __Pyx_PyThreadState_Current; |
| | #define __Pyx_PyErr_Occurred() $local_tstate_cname->curexc_type |
| | #else |
| | #define __Pyx_PyThreadState_declare |
| | #define __Pyx_PyThreadState_assign |
| | #define __Pyx_PyErr_Occurred() PyErr_Occurred() |
| | #endif |
| |
|
| |
|
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | #define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState($local_tstate_cname, err) |
| | static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err); |
| | #else |
| | #define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err) |
| | #endif |
| |
|
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) { |
| | Py_ssize_t i, n; |
| | n = PyTuple_GET_SIZE(tuple); |
| | #if PY_MAJOR_VERSION >= 3 |
| | |
| | for (i=0; i<n; i++) { |
| | if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1; |
| | } |
| | #endif |
| | for (i=0; i<n; i++) { |
| | if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1; |
| | } |
| | return 0; |
| | } |
| |
|
| | static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) { |
| | PyObject *exc_type = tstate->curexc_type; |
| | if (exc_type == err) return 1; |
| | if (unlikely(!exc_type)) return 0; |
| | if (unlikely(PyTuple_Check(err))) |
| | return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err); |
| | return __Pyx_PyErr_GivenExceptionMatches(exc_type, err); |
| | } |
| | #endif |
| |
|
| | |
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | #define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL) |
| | #define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb) |
| | #define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb) |
| | #define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState($local_tstate_cname, type, value, tb) |
| | #define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState($local_tstate_cname, type, value, tb) |
| | static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); |
| | static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); |
| |
|
| | #if CYTHON_COMPILING_IN_CPYTHON |
| | #define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL)) |
| | #else |
| | #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) |
| | #endif |
| |
|
| | #else |
| | #define __Pyx_PyErr_Clear() PyErr_Clear() |
| | #define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc) |
| | #define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb) |
| | #define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb) |
| | #define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb) |
| | #define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb) |
| | #define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb) |
| | #define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb) |
| | #endif |
| |
|
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { |
| | PyObject *tmp_type, *tmp_value, *tmp_tb; |
| | tmp_type = tstate->curexc_type; |
| | tmp_value = tstate->curexc_value; |
| | tmp_tb = tstate->curexc_traceback; |
| | tstate->curexc_type = type; |
| | tstate->curexc_value = value; |
| | tstate->curexc_traceback = tb; |
| | Py_XDECREF(tmp_type); |
| | Py_XDECREF(tmp_value); |
| | Py_XDECREF(tmp_tb); |
| | } |
| |
|
| | static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { |
| | *type = tstate->curexc_type; |
| | *value = tstate->curexc_value; |
| | *tb = tstate->curexc_traceback; |
| | tstate->curexc_type = 0; |
| | tstate->curexc_value = 0; |
| | tstate->curexc_traceback = 0; |
| | } |
| | #endif |
| |
|
| | |
| |
|
| | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause); |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | |
| | |
| |
|
| | #if PY_MAJOR_VERSION < 3 |
| | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, |
| | CYTHON_UNUSED PyObject *cause) { |
| | __Pyx_PyThreadState_declare |
| | |
| | Py_XINCREF(type); |
| | if (!value || value == Py_None) |
| | value = NULL; |
| | else |
| | Py_INCREF(value); |
| |
|
| | if (!tb || tb == Py_None) |
| | tb = NULL; |
| | else { |
| | Py_INCREF(tb); |
| | if (!PyTraceBack_Check(tb)) { |
| | PyErr_SetString(PyExc_TypeError, |
| | "raise: arg 3 must be a traceback or None"); |
| | goto raise_error; |
| | } |
| | } |
| |
|
| | if (PyType_Check(type)) { |
| | |
| | #if CYTHON_COMPILING_IN_PYPY |
| | |
| | if (!value) { |
| | Py_INCREF(Py_None); |
| | value = Py_None; |
| | } |
| | #endif |
| | PyErr_NormalizeException(&type, &value, &tb); |
| |
|
| | } else { |
| | |
| | if (value) { |
| | PyErr_SetString(PyExc_TypeError, |
| | "instance exception may not have a separate value"); |
| | goto raise_error; |
| | } |
| | |
| | value = type; |
| | type = (PyObject*) Py_TYPE(type); |
| | Py_INCREF(type); |
| | if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) { |
| | PyErr_SetString(PyExc_TypeError, |
| | "raise: exception class must be a subclass of BaseException"); |
| | goto raise_error; |
| | } |
| | } |
| |
|
| | __Pyx_PyThreadState_assign |
| | __Pyx_ErrRestore(type, value, tb); |
| | return; |
| | raise_error: |
| | Py_XDECREF(value); |
| | Py_XDECREF(type); |
| | Py_XDECREF(tb); |
| | return; |
| | } |
| |
|
| | #else |
| |
|
| | static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) { |
| | PyObject* owned_instance = NULL; |
| | if (tb == Py_None) { |
| | tb = 0; |
| | } else if (tb && !PyTraceBack_Check(tb)) { |
| | PyErr_SetString(PyExc_TypeError, |
| | "raise: arg 3 must be a traceback or None"); |
| | goto bad; |
| | } |
| | if (value == Py_None) |
| | value = 0; |
| |
|
| | if (PyExceptionInstance_Check(type)) { |
| | if (value) { |
| | PyErr_SetString(PyExc_TypeError, |
| | "instance exception may not have a separate value"); |
| | goto bad; |
| | } |
| | value = type; |
| | type = (PyObject*) Py_TYPE(value); |
| | } else if (PyExceptionClass_Check(type)) { |
| | |
| | PyObject *instance_class = NULL; |
| | if (value && PyExceptionInstance_Check(value)) { |
| | instance_class = (PyObject*) Py_TYPE(value); |
| | if (instance_class != type) { |
| | int is_subclass = PyObject_IsSubclass(instance_class, type); |
| | if (!is_subclass) { |
| | instance_class = NULL; |
| | } else if (unlikely(is_subclass == -1)) { |
| | |
| | goto bad; |
| | } else { |
| | |
| | type = instance_class; |
| | } |
| | } |
| | } |
| | if (!instance_class) { |
| | |
| | |
| | |
| | PyObject *args; |
| | if (!value) |
| | args = PyTuple_New(0); |
| | else if (PyTuple_Check(value)) { |
| | Py_INCREF(value); |
| | args = value; |
| | } else |
| | args = PyTuple_Pack(1, value); |
| | if (!args) |
| | goto bad; |
| | owned_instance = PyObject_Call(type, args, NULL); |
| | Py_DECREF(args); |
| | if (!owned_instance) |
| | goto bad; |
| | value = owned_instance; |
| | if (!PyExceptionInstance_Check(value)) { |
| | PyErr_Format(PyExc_TypeError, |
| | "calling %R should have returned an instance of " |
| | "BaseException, not %R", |
| | type, Py_TYPE(value)); |
| | goto bad; |
| | } |
| | } |
| | } else { |
| | PyErr_SetString(PyExc_TypeError, |
| | "raise: exception class must be a subclass of BaseException"); |
| | goto bad; |
| | } |
| |
|
| | if (cause) { |
| | PyObject *fixed_cause; |
| | if (cause == Py_None) { |
| | |
| | fixed_cause = NULL; |
| | } else if (PyExceptionClass_Check(cause)) { |
| | fixed_cause = PyObject_CallObject(cause, NULL); |
| | if (fixed_cause == NULL) |
| | goto bad; |
| | } else if (PyExceptionInstance_Check(cause)) { |
| | fixed_cause = cause; |
| | Py_INCREF(fixed_cause); |
| | } else { |
| | PyErr_SetString(PyExc_TypeError, |
| | "exception causes must derive from " |
| | "BaseException"); |
| | goto bad; |
| | } |
| | PyException_SetCause(value, fixed_cause); |
| | } |
| |
|
| | PyErr_SetObject(type, value); |
| |
|
| | if (tb) { |
| | #if CYTHON_FAST_THREAD_STATE |
| | PyThreadState *tstate = __Pyx_PyThreadState_Current; |
| | PyObject* tmp_tb = tstate->curexc_traceback; |
| | if (tb != tmp_tb) { |
| | Py_INCREF(tb); |
| | tstate->curexc_traceback = tb; |
| | Py_XDECREF(tmp_tb); |
| | } |
| | #else |
| | PyObject *tmp_type, *tmp_value, *tmp_tb; |
| | PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb); |
| | Py_INCREF(tb); |
| | PyErr_Restore(tmp_type, tmp_value, tb); |
| | Py_XDECREF(tmp_tb); |
| | #endif |
| | } |
| |
|
| | bad: |
| | Py_XDECREF(owned_instance); |
| | return; |
| | } |
| | #endif |
| |
|
| |
|
| | |
| |
|
| | #if CYTHON_USE_EXC_INFO_STACK |
| | static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate); |
| | #endif |
| |
|
| | |
| |
|
| | #if CYTHON_USE_EXC_INFO_STACK |
| | |
| | static _PyErr_StackItem * |
| | __Pyx_PyErr_GetTopmostException(PyThreadState *tstate) |
| | { |
| | _PyErr_StackItem *exc_info = tstate->exc_info; |
| | while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) && |
| | exc_info->previous_item != NULL) |
| | { |
| | exc_info = exc_info->previous_item; |
| | } |
| | return exc_info; |
| | } |
| | #endif |
| |
|
| |
|
| | |
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | #define __Pyx_GetException(type, value, tb) __Pyx__GetException($local_tstate_cname, type, value, tb) |
| | static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); |
| | #else |
| | static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb); |
| | #endif |
| |
|
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) |
| | #else |
| | static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb) |
| | #endif |
| | { |
| | PyObject *local_type, *local_value, *local_tb; |
| | #if CYTHON_FAST_THREAD_STATE |
| | PyObject *tmp_type, *tmp_value, *tmp_tb; |
| | local_type = tstate->curexc_type; |
| | local_value = tstate->curexc_value; |
| | local_tb = tstate->curexc_traceback; |
| | tstate->curexc_type = 0; |
| | tstate->curexc_value = 0; |
| | tstate->curexc_traceback = 0; |
| | #else |
| | PyErr_Fetch(&local_type, &local_value, &local_tb); |
| | #endif |
| | PyErr_NormalizeException(&local_type, &local_value, &local_tb); |
| | #if CYTHON_FAST_THREAD_STATE |
| | if (unlikely(tstate->curexc_type)) |
| | #else |
| | if (unlikely(PyErr_Occurred())) |
| | #endif |
| | goto bad; |
| | #if PY_MAJOR_VERSION >= 3 |
| | if (local_tb) { |
| | if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0)) |
| | goto bad; |
| | } |
| | #endif |
| | |
| | Py_XINCREF(local_tb); |
| | |
| | Py_XINCREF(local_type); |
| | Py_XINCREF(local_value); |
| | *type = local_type; |
| | *value = local_value; |
| | *tb = local_tb; |
| | #if CYTHON_FAST_THREAD_STATE |
| | #if CYTHON_USE_EXC_INFO_STACK |
| | { |
| | _PyErr_StackItem *exc_info = tstate->exc_info; |
| | tmp_type = exc_info->exc_type; |
| | tmp_value = exc_info->exc_value; |
| | tmp_tb = exc_info->exc_traceback; |
| | exc_info->exc_type = local_type; |
| | exc_info->exc_value = local_value; |
| | exc_info->exc_traceback = local_tb; |
| | } |
| | #else |
| | tmp_type = tstate->exc_type; |
| | tmp_value = tstate->exc_value; |
| | tmp_tb = tstate->exc_traceback; |
| | tstate->exc_type = local_type; |
| | tstate->exc_value = local_value; |
| | tstate->exc_traceback = local_tb; |
| | #endif |
| | |
| | |
| | Py_XDECREF(tmp_type); |
| | Py_XDECREF(tmp_value); |
| | Py_XDECREF(tmp_tb); |
| | #else |
| | PyErr_SetExcInfo(local_type, local_value, local_tb); |
| | #endif |
| | return 0; |
| | bad: |
| | *type = 0; |
| | *value = 0; |
| | *tb = 0; |
| | Py_XDECREF(local_type); |
| | Py_XDECREF(local_value); |
| | Py_XDECREF(local_tb); |
| | return -1; |
| | } |
| |
|
| | |
| |
|
| | static CYTHON_INLINE void __Pyx_ReraiseException(void); |
| |
|
| | |
| | |
| |
|
| | static CYTHON_INLINE void __Pyx_ReraiseException(void) { |
| | PyObject *type = NULL, *value = NULL, *tb = NULL; |
| | #if CYTHON_FAST_THREAD_STATE |
| | PyThreadState *tstate = PyThreadState_GET(); |
| | #if CYTHON_USE_EXC_INFO_STACK |
| | _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); |
| | type = exc_info->exc_type; |
| | value = exc_info->exc_value; |
| | tb = exc_info->exc_traceback; |
| | #else |
| | type = tstate->exc_type; |
| | value = tstate->exc_value; |
| | tb = tstate->exc_traceback; |
| | #endif |
| | #else |
| | PyErr_GetExcInfo(&type, &value, &tb); |
| | #endif |
| | if (!type || type == Py_None) { |
| | #if !CYTHON_FAST_THREAD_STATE |
| | Py_XDECREF(type); |
| | Py_XDECREF(value); |
| | Py_XDECREF(tb); |
| | #endif |
| | |
| | PyErr_SetString(PyExc_RuntimeError, |
| | "No active exception to reraise"); |
| | } else { |
| | #if CYTHON_FAST_THREAD_STATE |
| | Py_INCREF(type); |
| | Py_XINCREF(value); |
| | Py_XINCREF(tb); |
| |
|
| | #endif |
| | PyErr_Restore(type, value, tb); |
| | } |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | #define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave($local_tstate_cname, type, value, tb) |
| | static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); |
| | #define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset($local_tstate_cname, type, value, tb) |
| | static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb); |
| |
|
| | #else |
| |
|
| | #define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb) |
| | #define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb) |
| | #endif |
| |
|
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { |
| | #if CYTHON_USE_EXC_INFO_STACK |
| | _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate); |
| | *type = exc_info->exc_type; |
| | *value = exc_info->exc_value; |
| | *tb = exc_info->exc_traceback; |
| | #else |
| | *type = tstate->exc_type; |
| | *value = tstate->exc_value; |
| | *tb = tstate->exc_traceback; |
| | #endif |
| | Py_XINCREF(*type); |
| | Py_XINCREF(*value); |
| | Py_XINCREF(*tb); |
| | } |
| |
|
| | static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) { |
| | PyObject *tmp_type, *tmp_value, *tmp_tb; |
| |
|
| | #if CYTHON_USE_EXC_INFO_STACK |
| | _PyErr_StackItem *exc_info = tstate->exc_info; |
| | tmp_type = exc_info->exc_type; |
| | tmp_value = exc_info->exc_value; |
| | tmp_tb = exc_info->exc_traceback; |
| | exc_info->exc_type = type; |
| | exc_info->exc_value = value; |
| | exc_info->exc_traceback = tb; |
| | #else |
| | tmp_type = tstate->exc_type; |
| | tmp_value = tstate->exc_value; |
| | tmp_tb = tstate->exc_traceback; |
| | tstate->exc_type = type; |
| | tstate->exc_value = value; |
| | tstate->exc_traceback = tb; |
| | #endif |
| | Py_XDECREF(tmp_type); |
| | Py_XDECREF(tmp_value); |
| | Py_XDECREF(tmp_tb); |
| | } |
| | #endif |
| |
|
| | |
| | |
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | #define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap($local_tstate_cname, type, value, tb) |
| | static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb); |
| | #else |
| | static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb); |
| | #endif |
| |
|
| | |
| |
|
| | #if CYTHON_FAST_THREAD_STATE |
| | static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) { |
| | PyObject *tmp_type, *tmp_value, *tmp_tb; |
| |
|
| | #if CYTHON_USE_EXC_INFO_STACK |
| | _PyErr_StackItem *exc_info = tstate->exc_info; |
| | tmp_type = exc_info->exc_type; |
| | tmp_value = exc_info->exc_value; |
| | tmp_tb = exc_info->exc_traceback; |
| |
|
| | exc_info->exc_type = *type; |
| | exc_info->exc_value = *value; |
| | exc_info->exc_traceback = *tb; |
| | #else |
| | tmp_type = tstate->exc_type; |
| | tmp_value = tstate->exc_value; |
| | tmp_tb = tstate->exc_traceback; |
| |
|
| | tstate->exc_type = *type; |
| | tstate->exc_value = *value; |
| | tstate->exc_traceback = *tb; |
| | #endif |
| |
|
| | *type = tmp_type; |
| | *value = tmp_value; |
| | *tb = tmp_tb; |
| | } |
| |
|
| | #else |
| |
|
| | static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) { |
| | PyObject *tmp_type, *tmp_value, *tmp_tb; |
| | PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb); |
| | PyErr_SetExcInfo(*type, *value, *tb); |
| | *type = tmp_type; |
| | *value = tmp_value; |
| | *tb = tmp_tb; |
| | } |
| | #endif |
| |
|
| | |
| |
|
| | static void __Pyx_WriteUnraisable(const char *name, int clineno, |
| | int lineno, const char *filename, |
| | int full_traceback, int nogil); |
| |
|
| | |
| | |
| | |
| |
|
| | static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno, |
| | CYTHON_UNUSED int lineno, CYTHON_UNUSED const char *filename, |
| | int full_traceback, CYTHON_UNUSED int nogil) { |
| | PyObject *old_exc, *old_val, *old_tb; |
| | PyObject *ctx; |
| | __Pyx_PyThreadState_declare |
| | #ifdef WITH_THREAD |
| | PyGILState_STATE state; |
| | if (nogil) |
| | state = PyGILState_Ensure(); |
| | |
| | else state = (PyGILState_STATE)0; |
| | #endif |
| | __Pyx_PyThreadState_assign |
| | __Pyx_ErrFetch(&old_exc, &old_val, &old_tb); |
| | if (full_traceback) { |
| | Py_XINCREF(old_exc); |
| | Py_XINCREF(old_val); |
| | Py_XINCREF(old_tb); |
| | __Pyx_ErrRestore(old_exc, old_val, old_tb); |
| | PyErr_PrintEx(1); |
| | } |
| | #if PY_MAJOR_VERSION < 3 |
| | ctx = PyString_FromString(name); |
| | #else |
| | ctx = PyUnicode_FromString(name); |
| | #endif |
| | __Pyx_ErrRestore(old_exc, old_val, old_tb); |
| | if (!ctx) { |
| | PyErr_WriteUnraisable(Py_None); |
| | } else { |
| | PyErr_WriteUnraisable(ctx); |
| | Py_DECREF(ctx); |
| | } |
| | #ifdef WITH_THREAD |
| | if (nogil) |
| | PyGILState_Release(state); |
| | #endif |
| | } |
| |
|
| | |
| |
|
| | #ifdef CYTHON_CLINE_IN_TRACEBACK |
| | #define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0) |
| | #else |
| | static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line); |
| | #endif |
| |
|
| | |
| | |
| | |
| | |
| | |
| |
|
| | #ifndef CYTHON_CLINE_IN_TRACEBACK |
| | static int __Pyx_CLineForTraceback(CYTHON_UNUSED PyThreadState *tstate, int c_line) { |
| | PyObject *use_cline; |
| | PyObject *ptype, *pvalue, *ptraceback; |
| | #if CYTHON_COMPILING_IN_CPYTHON |
| | PyObject **cython_runtime_dict; |
| | #endif |
| |
|
| | if (unlikely(!${cython_runtime_cname})) { |
| | |
| | return c_line; |
| | } |
| |
|
| | __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); |
| |
|
| | #if CYTHON_COMPILING_IN_CPYTHON |
| | cython_runtime_dict = _PyObject_GetDictPtr(${cython_runtime_cname}); |
| | if (likely(cython_runtime_dict)) { |
| | __PYX_PY_DICT_LOOKUP_IF_MODIFIED( |
| | use_cline, *cython_runtime_dict, |
| | __Pyx_PyDict_GetItemStr(*cython_runtime_dict, PYIDENT("cline_in_traceback"))) |
| | } else |
| | #endif |
| | { |
| | PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(${cython_runtime_cname}, PYIDENT("cline_in_traceback")); |
| | if (use_cline_obj) { |
| | use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True; |
| | Py_DECREF(use_cline_obj); |
| | } else { |
| | PyErr_Clear(); |
| | use_cline = NULL; |
| | } |
| | } |
| | if (!use_cline) { |
| | c_line = 0; |
| | |
| | (void) PyObject_SetAttr(${cython_runtime_cname}, PYIDENT("cline_in_traceback"), Py_False); |
| | } |
| | else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) { |
| | c_line = 0; |
| | } |
| | __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); |
| | return c_line; |
| | } |
| | #endif |
| |
|
| | |
| |
|
| | static void __Pyx_AddTraceback(const char *funcname, int c_line, |
| | int py_line, const char *filename); |
| |
|
| | |
| | |
| | |
| | |
| |
|
| | #include "compile.h" |
| | #include "frameobject.h" |
| | #include "traceback.h" |
| | #if PY_VERSION_HEX >= 0x030b00a6 |
| | #ifndef Py_BUILD_CORE |
| | #define Py_BUILD_CORE 1 |
| | #endif |
| | #include "internal/pycore_frame.h" |
| | #endif |
| |
|
| | static PyCodeObject* __Pyx_CreateCodeObjectForTraceback( |
| | const char *funcname, int c_line, |
| | int py_line, const char *filename) { |
| | PyCodeObject *py_code = NULL; |
| | PyObject *py_funcname = NULL; |
| | #if PY_MAJOR_VERSION < 3 |
| | PyObject *py_srcfile = NULL; |
| |
|
| | py_srcfile = PyString_FromString(filename); |
| | if (!py_srcfile) goto bad; |
| | #endif |
| |
|
| | if (c_line) { |
| | #if PY_MAJOR_VERSION < 3 |
| | py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, $cfilenm_cname, c_line); |
| | if (!py_funcname) goto bad; |
| | #else |
| | py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, $cfilenm_cname, c_line); |
| | if (!py_funcname) goto bad; |
| | funcname = PyUnicode_AsUTF8(py_funcname); |
| | if (!funcname) goto bad; |
| | #endif |
| | } |
| | else { |
| | #if PY_MAJOR_VERSION < 3 |
| | py_funcname = PyString_FromString(funcname); |
| | if (!py_funcname) goto bad; |
| | #endif |
| | } |
| | #if PY_MAJOR_VERSION < 3 |
| | py_code = __Pyx_PyCode_New( |
| | 0, |
| | 0, |
| | 0, |
| | 0, |
| | 0, |
| | $empty_bytes, |
| | $empty_tuple, |
| | $empty_tuple, |
| | $empty_tuple, |
| | $empty_tuple, |
| | $empty_tuple, |
| | py_srcfile, |
| | py_funcname, |
| | py_line, |
| | $empty_bytes |
| | ); |
| | Py_DECREF(py_srcfile); |
| | #else |
| | py_code = PyCode_NewEmpty(filename, funcname, py_line); |
| | #endif |
| | Py_XDECREF(py_funcname); |
| | return py_code; |
| | bad: |
| | Py_XDECREF(py_funcname); |
| | #if PY_MAJOR_VERSION < 3 |
| | Py_XDECREF(py_srcfile); |
| | #endif |
| | return NULL; |
| | } |
| |
|
| | static void __Pyx_AddTraceback(const char *funcname, int c_line, |
| | int py_line, const char *filename) { |
| | PyCodeObject *py_code = 0; |
| | PyFrameObject *py_frame = 0; |
| | PyThreadState *tstate = __Pyx_PyThreadState_Current; |
| | PyObject *ptype, *pvalue, *ptraceback; |
| |
|
| | if (c_line) { |
| | c_line = __Pyx_CLineForTraceback(tstate, c_line); |
| | } |
| |
|
| | |
| | py_code = $global_code_object_cache_find(c_line ? -c_line : py_line); |
| | if (!py_code) { |
| | __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback); |
| | py_code = __Pyx_CreateCodeObjectForTraceback( |
| | funcname, c_line, py_line, filename); |
| | if (!py_code) { |
| | |
| | |
| | Py_XDECREF(ptype); |
| | Py_XDECREF(pvalue); |
| | Py_XDECREF(ptraceback); |
| | goto bad; |
| | } |
| | __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback); |
| | $global_code_object_cache_insert(c_line ? -c_line : py_line, py_code); |
| | } |
| | py_frame = PyFrame_New( |
| | tstate, |
| | py_code, |
| | $moddict_cname, |
| | 0 |
| | ); |
| | if (!py_frame) goto bad; |
| | __Pyx_PyFrame_SetLineNumber(py_frame, py_line); |
| | PyTraceBack_Here(py_frame); |
| | bad: |
| | Py_XDECREF(py_code); |
| | Py_XDECREF(py_frame); |
| | } |
| |
|