Index: gdb/top.c |
diff --git a/gdb/top.c b/gdb/top.c |
index 903795eff4132c5e47b4f201fb8b4ee62320a9ad..061ad48f41e756cc22032490543f7a77037e8d10 100644 |
--- a/gdb/top.c |
+++ b/gdb/top.c |
@@ -47,6 +47,7 @@ |
#include "gdbthread.h" |
#include "python/python.h" |
#include "interps.h" |
+#include "observer.h" |
/* readline include files. */ |
#include "readline/readline.h" |
@@ -98,11 +99,13 @@ int use_windows = 0; |
extern char lang_frame_mismatch_warn[]; /* language.c */ |
-/* Flag for whether we want all the "from_tty" gubbish printed. */ |
+/* Flag for whether we want to confirm potentially dangerous |
+ operations. Default is yes. */ |
+ |
+int confirm = 1; |
-int caution = 1; /* Default is yes, sigh. */ |
static void |
-show_caution (struct ui_file *file, int from_tty, |
+show_confirm (struct ui_file *file, int from_tty, |
struct cmd_list_element *c, const char *value) |
{ |
fprintf_filtered (file, _("Whether to confirm potentially " |
@@ -289,9 +292,9 @@ void (*deprecated_context_hook) (int id); |
/* static */ void |
quit_cover (void) |
{ |
- caution = 0; /* Throw caution to the wind -- we're exiting. |
- This prevents asking the user dumb |
- questions. */ |
+ /* Stop asking user for confirmation --- we're exiting. This |
+ prevents asking the user dumb questions. */ |
+ confirm = 0; |
quit_command ((char *) 0, 0); |
} |
#endif /* defined SIGHUP */ |
@@ -360,6 +363,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. */ |
@@ -368,8 +412,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 (); |
@@ -429,16 +471,17 @@ execute_command (char *p, int from_tty) |
if (c->flags & DEPRECATED_WARN_USER) |
deprecated_cmd_warning (&line); |
- if (c->class == class_user) |
+ /* c->user_commands would be NULL in the case of a python command. */ |
+ if (c->class == class_user && c->user_commands) |
execute_user_command (c, arg); |
else if (c->type == set_cmd || c->type == show_cmd) |
- do_setshow_command (arg, from_tty & caution, c); |
+ do_setshow_command (arg, from_tty, c); |
else if (!cmd_func_p (c)) |
error (_("That is not a command, just a help topic.")); |
else if (deprecated_call_command_hook) |
- deprecated_call_command_hook (c, arg, from_tty & caution); |
+ deprecated_call_command_hook (c, arg, from_tty); |
else |
- cmd_func (c, arg, from_tty & caution); |
+ cmd_func (c, arg, from_tty); |
/* If the interpreter is in sync mode (we're running a user |
command's list, running command hooks or similars), and we |
@@ -456,36 +499,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); |
@@ -1284,8 +1298,8 @@ quit_target (void *arg) |
if (write_history_p && history_filename) |
write_history (history_filename); |
- do_final_cleanups (ALL_CLEANUPS); /* Do any final cleanups before |
- exiting. */ |
+ do_final_cleanups (all_cleanups ()); /* Do any final cleanups before |
+ exiting. */ |
return 0; |
} |
@@ -1546,6 +1560,15 @@ show_exec_done_display_p (struct ui_file *file, int from_tty, |
"asynchronous execution commands is %s.\n"), |
value); |
} |
+ |
+/* "set" command for the gdb_datadir configuration variable. */ |
+ |
+static void |
+set_gdb_datadir (char *args, int from_tty, struct cmd_list_element *c) |
+{ |
+ observer_notify_gdb_datadir_changed (); |
+} |
+ |
static void |
init_main (void) |
{ |
@@ -1623,11 +1646,11 @@ Show the filename in which to record the command history"), _("\ |
show_history_filename, |
&sethistlist, &showhistlist); |
- add_setshow_boolean_cmd ("confirm", class_support, &caution, _("\ |
+ add_setshow_boolean_cmd ("confirm", class_support, &confirm, _("\ |
Set whether to confirm potentially dangerous operations."), _("\ |
Show whether to confirm potentially dangerous operations."), NULL, |
NULL, |
- show_caution, |
+ show_confirm, |
&setlist, &showlist); |
add_setshow_zinteger_cmd ("annotate", class_obscure, &annotation_level, _("\ |
@@ -1653,7 +1676,7 @@ Use \"on\" to enable the notification, and \"off\" to disable it."), |
_("Show GDB's data directory."), |
_("\ |
When set, GDB uses the specified path to search for data files."), |
- NULL, NULL, |
+ set_gdb_datadir, NULL, |
&setlist, |
&showlist); |
} |