MCPcopy Create free account
hub / github.com/fabioz/PyDev.Debugger / __Pyx_Raise

Function __Pyx_Raise

_pydevd_frame_eval/pydevd_frame_evaluator.c:19622–19727  ·  view source on GitHub ↗

RaiseException */

Source from the content-addressed store, hash-verified

19620
19621/* RaiseException */
19622static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
19623 PyObject* owned_instance = NULL;
19624 if (tb == Py_None) {
19625 tb = 0;
19626 } else if (tb && !PyTraceBack_Check(tb)) {
19627 PyErr_SetString(PyExc_TypeError,
19628 "raise: arg 3 must be a traceback or None");
19629 goto bad;
19630 }
19631 if (value == Py_None)
19632 value = 0;
19633 if (PyExceptionInstance_Check(type)) {
19634 if (value) {
19635 PyErr_SetString(PyExc_TypeError,
19636 "instance exception may not have a separate value");
19637 goto bad;
19638 }
19639 value = type;
19640 type = (PyObject*) Py_TYPE(value);
19641 } else if (PyExceptionClass_Check(type)) {
19642 PyObject *instance_class = NULL;
19643 if (value && PyExceptionInstance_Check(value)) {
19644 instance_class = (PyObject*) Py_TYPE(value);
19645 if (instance_class != type) {
19646 int is_subclass = PyObject_IsSubclass(instance_class, type);
19647 if (!is_subclass) {
19648 instance_class = NULL;
19649 } else if (unlikely(is_subclass == -1)) {
19650 goto bad;
19651 } else {
19652 type = instance_class;
19653 }
19654 }
19655 }
19656 if (!instance_class) {
19657 PyObject *args;
19658 if (!value)
19659 args = PyTuple_New(0);
19660 else if (PyTuple_Check(value)) {
19661 Py_INCREF(value);
19662 args = value;
19663 } else
19664 args = PyTuple_Pack(1, value);
19665 if (!args)
19666 goto bad;
19667 owned_instance = PyObject_Call(type, args, NULL);
19668 Py_DECREF(args);
19669 if (!owned_instance)
19670 goto bad;
19671 value = owned_instance;
19672 if (!PyExceptionInstance_Check(value)) {
19673 PyErr_Format(PyExc_TypeError,
19674 "calling %R should have returned an instance of "
19675 "BaseException, not %R",
19676 type, Py_TYPE(value));
19677 goto bad;
19678 }
19679 }

Calls

no outgoing calls

Tested by

no test coverage detected