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.
This commit is contained in:
Pedro Alves 2011-12-16 20:29:28 +00:00
parent f4aa210198
commit 77cce10fc2
4 changed files with 54 additions and 36 deletions

View 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) 2011-12-16 asmwarrior <asmwarrior@gmail.com> (obvious fix)
* windows-nat.c (cygwin_get_dr, cygwin_get_dr7): Add missing * windows-nat.c (cygwin_get_dr, cygwin_get_dr7): Add missing

View File

@ -30,6 +30,7 @@
#include "gdbthread.h" #include "gdbthread.h"
#include "continuations.h" #include "continuations.h"
#include "interps.h" #include "interps.h"
#include "top.h"
static int fetch_inferior_event_wrapper (gdb_client_data client_data); 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; volatile struct gdb_exception e;
if (info_verbose check_frame_language_change ();
&& current_language != expected_language
&& language_mode == language_mode_auto)
language_info (1); /* Print what changed. */
/* Don't propagate breakpoint commands errors. Either we're /* Don't propagate breakpoint commands errors. Either we're
stopping or some command resumes the inferior. The user will stopping or some command resumes the inferior. The user will

View File

@ -362,6 +362,47 @@ prepare_execute_command (void)
return cleanup; 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. /* Execute the line P as a command, in the current user context.
Pass FROM_TTY as second argument to the defining function. */ 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 cleanup *cleanup_if_error, *cleanup;
struct cmd_list_element *c; struct cmd_list_element *c;
enum language flang;
static int warned = 0;
char *line; char *line;
cleanup_if_error = make_bpstat_clear_actions_cleanup (); 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). check_frame_language_change ();
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;
}
}
do_cleanups (cleanup); do_cleanups (cleanup);
discard_cleanups (cleanup_if_error); discard_cleanups (cleanup_if_error);

View File

@ -44,6 +44,8 @@ extern void quit_command (char *, int);
extern void quit_cover (void); extern void quit_cover (void);
extern void execute_command (char *, int); extern void execute_command (char *, int);
extern void check_frame_language_change (void);
/* Prepare for execution of a command. /* Prepare for execution of a command.
Call this before every command, CLI or MI. Call this before every command, CLI or MI.
Returns a cleanup to be run after the command is completed. */ Returns a cleanup to be run after the command is completed. */