This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Consolidate some Python exception-printing functions


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=6ef2312a177ebdfa841e82b515c144975073a501

commit 6ef2312a177ebdfa841e82b515c144975073a501
Author: Tom Tromey <tom@tromey.com>
Date:   Tue Dec 25 11:44:58 2018 -0700

    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.

Diff:
---
 gdb/ChangeLog                | 10 ++++++++++
 gdb/python/py-framefilter.c  | 21 +++------------------
 gdb/python/py-unwind.c       |  7 +------
 gdb/python/python-internal.h |  1 +
 gdb/python/python.c          | 14 ++++++++++++++
 5 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 15c59b2..612f82f 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,15 @@
 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.
+
+2018-12-27  Tom Tromey  <tom@tromey.com>
+
 	* python/py-value.c (convert_value_from_python): Use
 	gdbpy_convert_exception.
 	* python/py-param.c (parmpy_init): Use gdbpy_convert_exception.
diff --git a/gdb/python/py-framefilter.c b/gdb/python/py-framefilter.c
index fe17b70..b4bc413 100644
--- a/gdb/python/py-framefilter.c
+++ b/gdb/python/py-framefilter.c
@@ -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;
diff --git a/gdb/python/py-unwind.c b/gdb/python/py-unwind.c
index 469ae48..efef4f7 100644
--- a/gdb/python/py-unwind.c
+++ b/gdb/python/py-unwind.c
@@ -535,12 +535,7 @@ pyuw_sniffer (const struct frame_unwind *self, struct frame_info *this_frame,
     {
       /* If the unwinder is cancelled due to a Ctrl-C, then propagate
 	 the Ctrl-C as a GDB exception instead of swallowing it.  */
-      if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
-	{
-	  PyErr_Clear ();
-	  quit ();
-	}
-      gdbpy_print_stack ();
+      gdbpy_print_stack_or_quit ();
       return 0;
     }
   if (pyo_unwind_info == Py_None)
diff --git a/gdb/python/python-internal.h b/gdb/python/python-internal.h
index 1ac54f9..6a0d232 100644
--- a/gdb/python/python-internal.h
+++ b/gdb/python/python-internal.h
@@ -654,6 +654,7 @@ extern const struct language_defn *python_language;
 
 int gdbpy_print_python_errors_p (void);
 void gdbpy_print_stack (void);
+void gdbpy_print_stack_or_quit ();
 void gdbpy_handle_exception () ATTRIBUTE_NORETURN;
 
 gdbpy_ref<> python_string_to_unicode (PyObject *obj);
diff --git a/gdb/python/python.c b/gdb/python/python.c
index f790d48..3d0b0a0 100644
--- a/gdb/python/python.c
+++ b/gdb/python/python.c
@@ -1268,6 +1268,20 @@ gdbpy_print_stack (void)
     }
 }
 
+/* Like gdbpy_print_stack, but if the exception is a
+   KeyboardException, throw a gdb "quit" instead.  */
+
+void
+gdbpy_print_stack_or_quit ()
+{
+  if (PyErr_ExceptionMatches (PyExc_KeyboardInterrupt))
+    {
+      PyErr_Clear ();
+      throw_quit ("Quit");
+    }
+  gdbpy_print_stack ();
+}
+
 
 
 /* Return a sequence holding all the Progspaces.  */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]