return iterable.release ();
}
+/* A helper function that will either print an exception or, if it is
+ a KeyboardException, throw a quit. This can only be called when
+ the Python exception is set. */
+
+static void
+throw_quit_or_print_exception ()
+{
+ if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
+ {
+ PyErr_Clear ();
+ throw_quit ("Quit");
+ }
+ gdbpy_print_stack ();
+}
+
/* This is the only publicly exported function in this file. FRAME
is the source frame to start frame-filter invocation. FLAGS is an
integer holding the flags for printing. The following elements of
initialization error. This return code will trigger a
default backtrace. */
- gdbpy_print_stack ();
+ throw_quit_or_print_exception ();
return EXT_LANG_BT_NO_FILTERS;
}
{
if (PyErr_Occurred ())
{
- gdbpy_print_stack ();
+ throw_quit_or_print_exception ();
return EXT_LANG_BT_ERROR;
}
break;
/* Do not exit on error printing a single frame. Print the
error and continue with other frames. */
if (success == EXT_LANG_BT_ERROR)
- gdbpy_print_stack ();
+ throw_quit_or_print_exception ();
}
return success;