* main.c (execute_command): Warn as language changes automatically.

(main):  If error() is called during early initialization, print
its message and then exit(1) from GDB.
This commit is contained in:
John Gilmore 1991-09-19 08:51:16 +00:00
parent 89e0bbcd4f
commit bd09940765
1 changed files with 37 additions and 2 deletions

View File

@ -27,6 +27,7 @@ int fclose ();
#include "signals.h"
#include "target.h"
#include "breakpoint.h"
#include "language.h"
#include "getopt.h"
@ -80,6 +81,8 @@ extern char *version;
extern char *error_pre_print;
extern char lang_frame_mismatch_warn[]; /* language.c */
/* Flag for whether we want all the "from_tty" gubbish printed. */
int caution = 1; /* Default is yes, sigh. */
@ -144,7 +147,7 @@ static char dirbuf[MAXPATHLEN];
/* Function to call before reading a command, if nonzero.
The function receives two args: an input stream,
and a prompt string. */
void (*window_hook) ();
extern int frame_file_full_name;
@ -338,6 +341,11 @@ main (argc, argv)
alloca (4 - i);
#endif
/* If error() is called from initialization code, just exit */
if (setjmp (to_top_level)) {
exit(1);
}
cmdsize = 1;
cmdarg = (char **) xmalloc (cmdsize * sizeof (*cmdarg));
ncmd = 0;
@ -542,7 +550,7 @@ GDB manual (available as on-line info or a printed manual).\n", stderr);
print_gdb_version ();
if (symarg)
printf_filtered ("..");
wrap_here();
wrap_here("");
fflush (stdout); /* Force to screen during slow operations */
}
@ -705,6 +713,9 @@ execute_command (p, from_tty)
{
register struct cmd_list_element *c;
register struct command_line *cmdlines;
register enum language flang;
static enum language current = language_unknown;
static int warned = 0;
free_all_values ();
@ -748,7 +759,31 @@ execute_command (p, from_tty)
error ("That is not a command, just a help topic.");
else
(*c->function) (arg, from_tty & caution);
}
/* Tell the user if the language has changed */
if (working_lang != current)
{
if (language_mode == language_mode_auto) {
if (current != language_unknown)
language_info ();
}
current = working_lang;
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. */
if (target_has_stack)
{
flang = get_frame_language();
if(!warned && flang != language_unknown && flang != working_lang)
{
printf_filtered ("%s\n", lang_frame_mismatch_warn);
warned = 1;
}
}
}
/* ARGSUSED */