2011-12-16 Pedro Alves <pedro@codesourcery.com>
authorPedro Alves <palves@redhat.com>
Fri, 16 Dec 2011 20:29:28 +0000 (20:29 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 16 Dec 2011 20:29:28 +0000 (20:29 +0000)
* inf-loop.c: Include top.h.
(inferior_event_handler): Call check_frame_language.
* top.c (check_frame_language_change): New, factored out from ...
(execute_command): ... this.  Use check_frame_language_change.
* top.h (check_frame_language_change): Declare.

gdb/ChangeLog
gdb/inf-loop.c
gdb/top.c
gdb/top.h

index 19ff1c502aae9cbd060a491f121bbe054f958d56..2898cde2d5216c5a3a436587c5058dc585276e72 100644 (file)
@@ -1,3 +1,11 @@
+2011-12-16  Pedro Alves  <pedro@codesourcery.com>
+
+       * inf-loop.c: Include top.h.
+       (inferior_event_handler): Call check_frame_language.
+       * top.c (check_frame_language_change): New, factored out from ...
+       (execute_command): ... this.  Use check_frame_language_change.
+       * top.h (check_frame_language_change): Declare.
+
 2011-12-16  asmwarrior  <asmwarrior@gmail.com> (obvious fix)
 
        * windows-nat.c (cygwin_get_dr, cygwin_get_dr7): Add missing
index 8e49e91957dddf0bc9c02bded68b352c59f3ffd8..c768400dd60c06075c2d115b0191b98639e954dd 100644 (file)
@@ -30,6 +30,7 @@
 #include "gdbthread.h"
 #include "continuations.h"
 #include "interps.h"
+#include "top.h"
 
 static int fetch_inferior_event_wrapper (gdb_client_data client_data);
 
@@ -107,10 +108,7 @@ inferior_event_handler (enum inferior_event_type event_type,
        {
          volatile struct gdb_exception e;
 
-         if (info_verbose
-             && current_language != expected_language
-             && language_mode == language_mode_auto)
-           language_info (1);  /* Print what changed.  */
+         check_frame_language_change ();
 
          /* Don't propagate breakpoint commands errors.  Either we're
             stopping or some command resumes the inferior.  The user will
index ec475a8e5acdab5bddccc12dfe9ffb749f4b1e08..f1b8b3c2a911a2fdff993e13b6f3699c5d1b974b 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -362,6 +362,47 @@ prepare_execute_command (void)
   return cleanup;
 }
 
+/* Tell the user if the language has changed (except first time) after
+   executing a command.  */
+
+void
+check_frame_language_change (void)
+{
+  static int warned = 0;
+
+  /* First make sure that a new frame has been selected, in case the
+     command or the hooks changed the program state.  */
+  deprecated_safe_get_selected_frame ();
+  if (current_language != expected_language)
+    {
+      if (language_mode == language_mode_auto && info_verbose)
+       {
+         language_info (1);    /* Print what changed.  */
+       }
+      warned = 0;
+    }
+
+  /* Warn the user if the working language does not match the language
+     of the current frame.  Only warn the user if we are actually
+     running the program, i.e. there is a stack.  */
+  /* FIXME: This should be cacheing the frame and only running when
+     the frame changes.  */
+
+  if (has_stack_frames ())
+    {
+      enum language flang;
+
+      flang = get_frame_language ();
+      if (!warned
+         && flang != language_unknown
+         && flang != current_language->la_language)
+       {
+         printf_filtered ("%s\n", lang_frame_mismatch_warn);
+         warned = 1;
+       }
+    }
+}
+
 /* Execute the line P as a command, in the current user context.
    Pass FROM_TTY as second argument to the defining function.  */
 
@@ -370,8 +411,6 @@ execute_command (char *p, int from_tty)
 {
   struct cleanup *cleanup_if_error, *cleanup;
   struct cmd_list_element *c;
-  enum language flang;
-  static int warned = 0;
   char *line;
 
   cleanup_if_error = make_bpstat_clear_actions_cleanup ();
@@ -458,36 +497,7 @@ execute_command (char *p, int from_tty)
 
     }
 
-  /* Tell the user if the language has changed (except first time).
-     First make sure that a new frame has been selected, in case this
-     command or the hooks changed the program state.  */
-  deprecated_safe_get_selected_frame ();
-  if (current_language != expected_language)
-    {
-      if (language_mode == language_mode_auto && info_verbose)
-       {
-         language_info (1);    /* Print what changed.  */
-       }
-      warned = 0;
-    }
-
-  /* Warn the user if the working language does not match the
-     language of the current frame.  Only warn the user if we are
-     actually running the program, i.e. there is a stack.  */
-  /* FIXME:  This should be cacheing the frame and only running when
-     the frame changes.  */
-
-  if (has_stack_frames ())
-    {
-      flang = get_frame_language ();
-      if (!warned
-         && flang != language_unknown
-         && flang != current_language->la_language)
-       {
-         printf_filtered ("%s\n", lang_frame_mismatch_warn);
-         warned = 1;
-       }
-    }
+  check_frame_language_change ();
 
   do_cleanups (cleanup);
   discard_cleanups (cleanup_if_error);
index 3e6679c0ea1f2210f0eb28e91a7f3102426216bf..88064020aecd94c9f5fc68673e3e99feb2d4eba2 100644 (file)
--- a/gdb/top.h
+++ b/gdb/top.h
@@ -44,6 +44,8 @@ extern void quit_command (char *, int);
 extern void quit_cover (void);
 extern void execute_command (char *, int);
 
+extern void check_frame_language_change (void);
+
 /* Prepare for execution of a command.
    Call this before every command, CLI or MI.
    Returns a cleanup to be run after the command is completed.  */