Consolidate some Python exception-printing functions

A few places in the Python code would either call gdbpy_print_stack,
or throw a gdb "quit", depending on the pending exception.  This patch
consolidates these into a helper function.

gdb/ChangeLog
2018-12-27  Tom Tromey  <tom@tromey.com>

	* python/python-internal.h (gdbpy_print_stack_or_quit): Declare.
	* python/py-unwind.c (pyuw_sniffer): Use
	gdbpy_print_stack_or_quit.
	* python/py-framefilter.c (throw_quit_or_print_exception):
	Remove.
	(gdbpy_apply_frame_filter): Use gdbpy_print_stack_or_quit.
	* python/python.c (gdbpy_print_stack_or_quit): New function.
This commit is contained in:
Tom Tromey
2018-12-25 11:44:58 -07:00
parent ec9c2750b7
commit 6ef2312a17
5 changed files with 29 additions and 24 deletions

View File

@ -1054,21 +1054,6 @@ bootstrap_python_frame_filters (struct frame_info *frame,
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
@ -1139,7 +1124,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
initialization error. This return code will trigger a
default backtrace. */
throw_quit_or_print_exception ();
gdbpy_print_stack_or_quit ();
return EXT_LANG_BT_NO_FILTERS;
}
@ -1162,7 +1147,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
{
if (PyErr_Occurred ())
{
throw_quit_or_print_exception ();
gdbpy_print_stack_or_quit ();
return EXT_LANG_BT_ERROR;
}
break;
@ -1196,7 +1181,7 @@ gdbpy_apply_frame_filter (const struct extension_language_defn *extlang,
/* Do not exit on error printing a single frame. Print the
error and continue with other frames. */
if (success == EXT_LANG_BT_ERROR)
throw_quit_or_print_exception ();
gdbpy_print_stack_or_quit ();
}
return success;