+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
#include "gdbthread.h"
#include "continuations.h"
#include "interps.h"
+#include "top.h"
static int fetch_inferior_event_wrapper (gdb_client_data client_data);
{
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
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. */
{
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 ();
}
- /* 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);