assert(val_o && PyExceptionInstance_Check(val_o));
exc = PyExceptionInstance_Class(val_o);
- tb = PyException_GetTraceback(val_o);
+ PyObject *original_tb = tb = PyException_GetTraceback(val_o);
if (tb == NULL) {
tb = Py_None;
}
- else {
- Py_DECREF(tb);
- }
assert(PyStackRef_LongCheck(lasti));
(void)lasti; // Shut up compiler warning if asserts are off
PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb};
PyObject *res_o = PyObject_Vectorcall(exit_func_o, stack + 2 - has_self,
(3 + has_self) | PY_VECTORCALL_ARGUMENTS_OFFSET, NULL);
ERROR_IF(res_o == NULL, error);
+ Py_XDECREF(original_tb);
res = PyStackRef_FromPyObjectSteal(res_o);
}
PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func);
assert(val_o && PyExceptionInstance_Check(val_o));
exc = PyExceptionInstance_Class(val_o);
- tb = PyException_GetTraceback(val_o);
+ PyObject *original_tb = tb = PyException_GetTraceback(val_o);
if (tb == NULL) {
tb = Py_None;
}
- else {
- _PyFrame_SetStackPointer(frame, stack_pointer);
- Py_DECREF(tb);
- stack_pointer = _PyFrame_GetStackPointer(frame);
- }
assert(PyStackRef_LongCheck(lasti));
(void)lasti; // Shut up compiler warning if asserts are off
PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb};
if (res_o == NULL) {
JUMP_TO_ERROR();
}
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ Py_XDECREF(original_tb);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[0] = res;
stack_pointer += 1;
PyObject *exit_func_o = PyStackRef_AsPyObjectBorrow(exit_func);
assert(val_o && PyExceptionInstance_Check(val_o));
exc = PyExceptionInstance_Class(val_o);
- tb = PyException_GetTraceback(val_o);
+ PyObject *original_tb = tb = PyException_GetTraceback(val_o);
if (tb == NULL) {
tb = Py_None;
}
- else {
- _PyFrame_SetStackPointer(frame, stack_pointer);
- Py_DECREF(tb);
- stack_pointer = _PyFrame_GetStackPointer(frame);
- }
assert(PyStackRef_LongCheck(lasti));
(void)lasti; // Shut up compiler warning if asserts are off
PyObject *stack[5] = {NULL, PyStackRef_AsPyObjectBorrow(exit_self), exc, val_o, tb};
if (res_o == NULL) {
JUMP_TO_LABEL(error);
}
+ _PyFrame_SetStackPointer(frame, stack_pointer);
+ Py_XDECREF(original_tb);
+ stack_pointer = _PyFrame_GetStackPointer(frame);
res = PyStackRef_FromPyObjectSteal(res_o);
stack_pointer[0] = res;
stack_pointer += 1;