This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
Re: FYI: fix PR gdb/8869
On Saturday 08 August 2009 17:17:28, Pedro Alves wrote:
> On Saturday 08 August 2009 14:43:58, Pedro Alves wrote:
> > On Saturday 08 August 2009 00:28:00, Tom Tromey wrote:
> > > >>>>> "Tom" == Tom Tromey <tromey@redhat.com> writes:
> > >
> > > Tom> Sigh.
> > > Tom> I'll fix soon.
> > >
> > > Ok, here is an update to strip trailing whitespace. This time with some
> > > tests.
> >
> > Thanks!
> >
> > > This is kind of ugly.
> >
> > Indeed. :-)
> >
> > > I did remember a problem with using a real enum for set language -- the
> > > languages aren't all registered when _initialize_language is called.
> >
> > I think it would work to (re-)register the command in add_language
> > instead, whenever a new language is added.
> >
>
> Like below. This was probably what Cagney had in mind with
> the "FIXME: make these enum commands". Notice how set_case_str, set_type_str,
> set_range_str and set_lang_str go away. This kills a few more usages of
> deprecated_show_value_hack. No need to strip trailing whitespace.
> One issue is that "set language" without an argument doesn't show that
> larger help list of known languages, because the enum command machinary
> takes care of handling the case of no argument itself. I've moved that
> listing to "help set language", which I think is a better place for it
> anyway.
>
> (gdb) set language
> Requires an argument. Valid arguments are auto, local, unknown, ada, c, c++, asm, minimal, fortran, objective-c, java, modula-2, pascal, scheme.
> (gdb) help set language
> Set the current source language.
> The currently understood settings are:
>
> local or auto Automatic setting based on source file
> ada Use the Ada language
> c Use the C language
> c++ Use the C++ language
> asm Use the Asm language
> minimal Use the Minimal language
> fortran Use the Fortran language
> objective-c Use the Objective-c language
> java Use the Java language
> modula-2 Use the Modula-2 language
> pascal Use the Pascal language
> scheme Use the Scheme language
>
> (gdb)
>
> This required a couple of testsuite adjustments to default.exp
> and help.exp. I diffed the log of running setshow.exp, and the only
> differences that came out were "Warning" vs "warning". This is due
> to the patch changing a few printf_unfiltered("Warning:..." calls
> to warning(_("... calls. More consistency, and, added i18n.
>
> No regressions on x86_64-unknown-linux-gnu. Let me know what
> you think.
>
Small update. This also deletes the the range, type and case completers that
aren't needed anymore, and plugs a leak I was introducing (mem_fileopen).
--
Pedro Alves
2009-08-08 Pedro Alves <pedro@codesourcery.com>
* language.c (language, type, range, case_sensitive): Make const.
(show_language_command): Don't call deprecated_show_value_hack.
Special case "auto".
(set_language_command): Don't strip trailing whitespace. Don't
print list of known languages. An unrecognized language is now an
internal error instead of a user error. Don't call set_lang_str.
(language_completer): Delete.
(show_type_command): Don't call deprecated_show_value_hack.
Special case "auto". Use warning.
(set_type_command): Don't strip trailing whitespace. An
unrecognized type is now an internal error instead of a user
error. Output type check mismatch with language here. Don't call
set_type_str.
(show_range_command): Don't call deprecated_show_value_hack.
Special case "auto". Use warning.
(set_range_command): Don't strip trailing whitespace. An
unrecognized range check is now an internal error instead of a
warning. Output range check mismatch with language here. Don't
call set_range_str.
(range_or_type_completer): Delete.
(show_case_command): Don't call deprecated_show_value_hack.
Special case "auto". Use warning.
(set_case_command): Don't call set_case_str. An unrecognized case
check is now an internal error instead of a warning. Output range
check mismatch with language here. Don't call set_case_str.
(case_completer): Delete.
(set_type_range_case): Don't call set_type_str, set_range_str or
set_case_str here.
(set_lang_str, set_type_str, set_range_str, set_case_str): Delete.
(add_language): Install or reinstall the "set language" command
here, and make it an enum command. Build the enumeration and the
help string from the current list of known languages.
(_initialize_language): Don't install "set language" here. Make
"set check type", "set check range" and "set case-sensitive" enum
commands. No need for special completers. Register the "auto"
"local" and "unknown" languages in that order.
2009-08-08 Pedro Alves <pedro@codesourcery.com>
* gdb.base/default.exp: Adjust "set language test": it's now an
enum command. Larger help string moved to "help set language".
* gdb.base/help.exp: Adjust "help set language" expected output,
now lists all known languages.
---
gdb/language.c | 490 +++++++++++++++----------------------
gdb/testsuite/gdb.base/default.exp | 2
gdb/testsuite/gdb.base/help.exp | 3
3 files changed, 209 insertions(+), 286 deletions(-)
Index: src/gdb/language.c
===================================================================
--- src.orig/gdb/language.c 2009-08-08 17:24:33.000000000 +0100
+++ src/gdb/language.c 2009-08-08 17:45:38.000000000 +0100
@@ -47,14 +47,6 @@
extern void _initialize_language (void);
-static void set_case_str (void);
-
-static void set_range_str (void);
-
-static void set_type_str (void);
-
-static void set_lang_str (void);
-
static void unk_lang_error (char *);
static int unk_lang_parser (void);
@@ -111,16 +103,12 @@ static unsigned languages_size;
static unsigned languages_allocsize;
#define DEFAULT_ALLOCSIZE 4
-/* The "set language/type/range" commands all put stuff in these
- buffers. This is to make them work as set/show commands. The
- user's string is copied here, then the set_* commands look at
- them and update them to something that looks nice when it is
- printed out. */
-
-static char *language;
-static char *type;
-static char *range;
-static char *case_sensitive;
+/* The current values of the "set language/type/range" enum
+ commands. */
+static const char *language;
+static const char *type;
+static const char *range;
+static const char *case_sensitive;
/* Warning issued when current_language and the language of the current
frame do not match. */
@@ -138,7 +126,15 @@ show_language_command (struct ui_file *f
{
enum language flang; /* The language of the current frame */
- deprecated_show_value_hack (file, from_tty, c, value);
+ if (language_mode == language_mode_auto)
+ fprintf_filtered (gdb_stdout,
+ _("The current source language is "
+ "\"auto; currently %s\".\n"),
+ current_language->la_name);
+ else
+ fprintf_filtered (gdb_stdout, _("The current source language is \"%s\".\n"),
+ current_language->la_name);
+
flang = get_frame_language ();
if (flang != language_unknown &&
language_mode == language_mode_manual &&
@@ -150,51 +146,9 @@ show_language_command (struct ui_file *f
static void
set_language_command (char *ignore, int from_tty, struct cmd_list_element *c)
{
- int i, len;
+ int i;
enum language flang;
- char *err_lang, *tem;
-
- /* Strip trailing whitespace. */
- if (!language)
- len = 0;
- else
- {
- len = strlen (language);
- while (len > 0 && language[len - 1] == ' ')
- --len;
- }
-
- if (len == 0)
- {
- printf_unfiltered (_("\
-The currently understood settings are:\n\n\
-local or auto Automatic setting based on source file\n"));
-
- for (i = 0; i < languages_size; ++i)
- {
- /* Already dealt with these above. */
- if (languages[i]->la_language == language_unknown
- || languages[i]->la_language == language_auto)
- continue;
-
- /* FIXME: i18n: for now assume that the human-readable name
- is just a capitalization of the internal name. */
- printf_unfiltered ("%-16s Use the %c%s language\n",
- languages[i]->la_name,
- /* Capitalize first letter of language
- name. */
- toupper (languages[i]->la_name[0]),
- languages[i]->la_name + 1);
- }
- /* Restore the silly string. */
- set_language (current_language->la_language);
- return;
- }
-
- /* Reset LANGUAGE to avoid trailing spaces. */
- tem = savestring (language, len);
- xfree (language);
- language = tem;
+ char *err_lang;
/* Search the list of languages for a match. */
for (i = 0; i < languages_size; i++)
@@ -221,33 +175,15 @@ local or auto Automatic setting based
language_mode = language_mode_manual;
current_language = languages[i];
set_type_range_case ();
- set_lang_str ();
expected_language = current_language;
return;
}
}
}
- /* Reset the language (esp. the global string "language") to the
- correct values. */
- err_lang = xstrdup (language);
- make_cleanup (xfree, err_lang); /* Free it after error */
- set_language (current_language->la_language);
- error (_("Unknown language `%s'."), err_lang);
-}
-
-static char **
-language_completer (struct cmd_list_element *self, char *text, char *word)
-{
- int i;
- const char **langnames
- = (const char **) alloca ((languages_size + 1) * sizeof (const char *));
-
- for (i = 0; i < languages_size; ++i)
- langnames[i] = languages[i]->la_name;
- langnames[i] = NULL;
-
- return complete_on_enum (langnames, text, word);
+ internal_error (__FILE__, __LINE__,
+ "Couldn't find language `%s' in known languages list.",
+ language);
}
/* Show command. Display a warning if the type setting does
@@ -256,28 +192,43 @@ static void
show_type_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- deprecated_show_value_hack (file, from_tty, c, value);
+ if (type_mode == type_mode_auto)
+ {
+ char *tmp = NULL;
+
+ switch (type_check)
+ {
+ case type_check_on:
+ tmp = "on";
+ break;
+ case type_check_off:
+ tmp = "off";
+ break;
+ case type_check_warn:
+ tmp = "warn";
+ break;
+ default:
+ internal_error (__FILE__, __LINE__,
+ "Unrecognized type check setting.");
+ }
+
+ fprintf_filtered (gdb_stdout,
+ _("Type checking is \"auto; currently %s\".\n"),
+ tmp);
+ }
+ else
+ fprintf_filtered (gdb_stdout, _("Type checking is \"%s\".\n"),
+ value);
+
if (type_check != current_language->la_type_check)
- printf_unfiltered (
- "Warning: the current type check setting does not match the language.\n");
+ warning (_("the current type check setting"
+ " does not match the language.\n"));
}
/* Set command. Change the setting for type checking. */
static void
set_type_command (char *ignore, int from_tty, struct cmd_list_element *c)
{
- int len;
- char *tem;
-
- /* Strip trailing whitespace. */
- len = strlen (type);
- while (len > 0 && type[len - 1] == ' ')
- --len;
- /* Reset TYPE. */
- tem = savestring (type, len);
- xfree (type);
- type = tem;
-
if (strcmp (type, "on") == 0)
{
type_check = type_check_on;
@@ -297,16 +248,15 @@ set_type_command (char *ignore, int from
{
type_mode = type_mode_auto;
set_type_range_case ();
- /* Avoid hitting the set_type_str call below. We
- did it in set_type_range_case. */
return;
}
else
- {
- warning (_("Unrecognized type check setting: \"%s\""), type);
- }
- set_type_str ();
- show_type_command (NULL, from_tty, NULL, NULL);
+ internal_error (__FILE__, __LINE__,
+ _("Unrecognized type check setting: \"%s\""), type);
+
+ if (type_check != current_language->la_type_check)
+ warning (_("the current type check setting"
+ " does not match the language.\n"));
}
/* Show command. Display a warning if the range setting does
@@ -315,28 +265,43 @@ static void
show_range_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- deprecated_show_value_hack (file, from_tty, c, value);
+ if (range_mode == range_mode_auto)
+ {
+ char *tmp;
+
+ switch (range_check)
+ {
+ case range_check_on:
+ tmp = "on";
+ break;
+ case range_check_off:
+ tmp = "off";
+ break;
+ case range_check_warn:
+ tmp = "warn";
+ break;
+ default:
+ internal_error (__FILE__, __LINE__,
+ "Unrecognized range check setting.");
+ }
+
+ fprintf_filtered (gdb_stdout,
+ _("Range checking is \"auto; currently %s\".\n"),
+ tmp);
+ }
+ else
+ fprintf_filtered (gdb_stdout, _("Range checking is \"%s\".\n"),
+ value);
+
if (range_check != current_language->la_range_check)
- printf_unfiltered (
- "Warning: the current range check setting does not match the language.\n");
+ warning (_("the current range check setting "
+ "does not match the language.\n"));
}
/* Set command. Change the setting for range checking. */
static void
set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
{
- int len;
- char *tem;
-
- /* Strip trailing whitespace. */
- len = strlen (range);
- while (len > 0 && range[len - 1] == ' ')
- --len;
- /* Reset RANGE. */
- tem = savestring (range, len);
- xfree (range);
- range = tem;
-
if (strcmp (range, "on") == 0)
{
range_check = range_check_on;
@@ -356,24 +321,17 @@ set_range_command (char *ignore, int fro
{
range_mode = range_mode_auto;
set_type_range_case ();
- /* Avoid hitting the set_range_str call below. We
- did it in set_type_range_case. */
return;
}
else
{
- warning (_("Unrecognized range check setting: \"%s\""), range);
+ internal_error (__FILE__, __LINE__,
+ _("Unrecognized range check setting: \"%s\""), range);
}
- set_range_str ();
- show_range_command (NULL, from_tty, NULL, NULL);
-}
-/* Completer for range and type parameters. */
-static char **
-range_or_type_completer (struct cmd_list_element *self, char *text, char *word)
-{
- static const char *values[] = { "on", "off", "warn", "auto", NULL };
- return complete_on_enum (values, text, word);
+ if (range_check != current_language->la_range_check)
+ warning (_("the current range check setting "
+ "does not match the language.\n"));
}
/* Show command. Display a warning if the case sensitivity setting does
@@ -382,10 +340,35 @@ static void
show_case_command (struct ui_file *file, int from_tty,
struct cmd_list_element *c, const char *value)
{
- deprecated_show_value_hack (file, from_tty, c, value);
+ if (case_mode == case_mode_auto)
+ {
+ char *tmp = NULL;
+
+ switch (case_sensitivity)
+ {
+ case case_sensitive_on:
+ tmp = "on";
+ break;
+ case case_sensitive_off:
+ tmp = "off";
+ break;
+ default:
+ internal_error (__FILE__, __LINE__,
+ "Unrecognized case-sensitive setting.");
+ }
+
+ fprintf_filtered (gdb_stdout,
+ _("Case sensitivity in "
+ "name search is \"auto; currently %s\".\n"),
+ tmp);
+ }
+ else
+ fprintf_filtered (gdb_stdout, _("Case sensitivity in name search is \"%s\".\n"),
+ value);
+
if (case_sensitivity != current_language->la_case_sensitivity)
- printf_unfiltered(
-"Warning: the current case sensitivity setting does not match the language.\n");
+ warning (_("the current case sensitivity setting does not match "
+ "the language.\n"));
}
/* Set command. Change the setting for case sensitivity. */
@@ -407,25 +390,18 @@ set_case_command (char *ignore, int from
{
case_mode = case_mode_auto;
set_type_range_case ();
- /* Avoid hitting the set_case_str call below. We did it in
- set_type_range_case. */
return;
}
else
{
- warning (_("Unrecognized case-sensitive setting: \"%s\""),
- case_sensitive);
+ internal_error (__FILE__, __LINE__,
+ "Unrecognized case-sensitive setting: \"%s\"",
+ case_sensitive);
}
- set_case_str();
- show_case_command (NULL, from_tty, NULL, NULL);
-}
-/* Completer for case-sensitive parameter. */
-static char **
-case_completer (struct cmd_list_element *self, char *text, char *word)
-{
- static const char *values[] = { "on", "off", "auto", NULL };
- return complete_on_enum (values, text, word);
+ if (case_sensitivity != current_language->la_case_sensitivity)
+ warning (_("the current case sensitivity setting does not match "
+ "the language.\n"));
}
/* Set the status of range and type checking and case sensitivity based on
@@ -435,7 +411,6 @@ case_completer (struct cmd_list_element
static void
set_type_range_case (void)
{
-
if (range_mode == range_mode_auto)
range_check = current_language->la_range_check;
@@ -444,10 +419,6 @@ set_type_range_case (void)
if (case_mode == case_mode_auto)
case_sensitivity = current_language->la_case_sensitivity;
-
- set_type_str ();
- set_range_str ();
- set_case_str ();
}
/* Set current language to (enum language) LANG. Returns previous language. */
@@ -466,7 +437,6 @@ set_language (enum language lang)
{
current_language = languages[i];
set_type_range_case ();
- set_lang_str ();
break;
}
}
@@ -474,100 +444,6 @@ set_language (enum language lang)
return prev_language;
}
-/* This page contains functions that update the global vars
- language, type and range. */
-static void
-set_lang_str (void)
-{
- char *prefix = "";
-
- if (language)
- xfree (language);
- if (language_mode == language_mode_auto)
- prefix = "auto; currently ";
-
- language = concat (prefix, current_language->la_name, (char *)NULL);
-}
-
-static void
-set_type_str (void)
-{
- char *tmp = NULL, *prefix = "";
-
- if (type)
- xfree (type);
- if (type_mode == type_mode_auto)
- prefix = "auto; currently ";
-
- switch (type_check)
- {
- case type_check_on:
- tmp = "on";
- break;
- case type_check_off:
- tmp = "off";
- break;
- case type_check_warn:
- tmp = "warn";
- break;
- default:
- error (_("Unrecognized type check setting."));
- }
-
- type = concat (prefix, tmp, (char *)NULL);
-}
-
-static void
-set_range_str (void)
-{
- char *tmp, *pref = "";
-
- if (range_mode == range_mode_auto)
- pref = "auto; currently ";
-
- switch (range_check)
- {
- case range_check_on:
- tmp = "on";
- break;
- case range_check_off:
- tmp = "off";
- break;
- case range_check_warn:
- tmp = "warn";
- break;
- default:
- error (_("Unrecognized range check setting."));
- }
-
- if (range)
- xfree (range);
- range = concat (pref, tmp, (char *)NULL);
-}
-
-static void
-set_case_str (void)
-{
- char *tmp = NULL, *prefix = "";
-
- if (case_mode==case_mode_auto)
- prefix = "auto; currently ";
-
- switch (case_sensitivity)
- {
- case case_sensitive_on:
- tmp = "on";
- break;
- case case_sensitive_off:
- tmp = "off";
- break;
- default:
- error (_("Unrecognized case-sensitive setting."));
- }
-
- xfree (case_sensitive);
- case_sensitive = concat (prefix, tmp, (char *)NULL);
-}
/* Print out the current language settings: language, range and
type checking. If QUIETLY, print only what has changed. */
@@ -1007,6 +883,15 @@ show_check (char *ignore, int from_tty)
void
add_language (const struct language_defn *lang)
{
+ /* For the "set language" command. */
+ static char **language_names = NULL;
+ /* For the "help set language" command. */
+ static char *language_set_doc = NULL;
+
+ int i;
+ struct ui_file *tmp_stream;
+ long len;
+
if (lang->la_magic != LANG_MAGIC)
{
fprintf_unfiltered (gdb_stderr, "Magic number of %s language struct wrong\n",
@@ -1027,6 +912,52 @@ add_language (const struct language_defn
languages_allocsize * sizeof (*languages));
}
languages[languages_size++] = lang;
+
+ /* Build the language names array, to be used as enumeration in the
+ set language" enum command. */
+ language_names = xrealloc (language_names,
+ (languages_size + 1) * sizeof (const char *));
+ for (i = 0; i < languages_size; ++i)
+ language_names[i] = languages[i]->la_name;
+ language_names[i] = NULL;
+
+ /* Build the "help set language" docs. */
+ tmp_stream = mem_fileopen ();
+
+ fprintf_unfiltered (tmp_stream, _("\
+Set the current source language.\n\
+The currently understood settings are:\n\n\
+local or auto Automatic setting based on source file\n"));
+
+ for (i = 0; i < languages_size; ++i)
+ {
+ /* Already dealt with these above. */
+ if (languages[i]->la_language == language_unknown
+ || languages[i]->la_language == language_auto)
+ continue;
+
+ /* FIXME: i18n: for now assume that the human-readable name
+ is just a capitalization of the internal name. */
+ fprintf_unfiltered (tmp_stream, "%-16s Use the %c%s language\n",
+ languages[i]->la_name,
+ /* Capitalize first letter of language
+ name. */
+ toupper (languages[i]->la_name[0]),
+ languages[i]->la_name + 1);
+ }
+
+ xfree (language_set_doc);
+ language_set_doc = ui_file_xstrdup (tmp_stream, &len);
+ ui_file_delete (tmp_stream);
+
+ add_setshow_enum_cmd ("language", class_support,
+ (const char **) language_names,
+ &language,
+ language_set_doc, _("\
+Show the current source language."), NULL,
+ set_language_command,
+ show_language_command,
+ &setlist, &showlist);
}
/* Iterate through all registered languages looking for and calling
@@ -1409,22 +1340,16 @@ language_lookup_primitive_type_by_name (
void
_initialize_language (void)
{
- struct cmd_list_element *command;
+ static const char *type_or_range_names[]
+ = { "on", "off", "warn", "auto", NULL };
+
+ static const char *case_sensitive_names[] = { "on", "off", "auto", NULL };
language_gdbarch_data
= gdbarch_data_register_post_init (language_gdbarch_post_init);
/* GDB commands for language specific stuff */
- command = add_setshow_string_noescape_cmd ("language", class_support,
- &language, _("\
-Set the current source language."), _("\
-Show the current source language."), NULL,
- set_language_command,
- show_language_command,
- &setlist, &showlist);
- set_cmd_completer (command, language_completer);
-
add_prefix_cmd ("check", no_class, set_check,
_("Set the status of the type/range checker."),
&setchecklist, "set check ", 0, &setlist);
@@ -1437,40 +1362,37 @@ Show the current source language."), NUL
add_alias_cmd ("c", "check", no_class, 1, &showlist);
add_alias_cmd ("ch", "check", no_class, 1, &showlist);
- command =
- add_setshow_string_noescape_cmd ("type", class_support,
- &type, _("\
+ add_setshow_enum_cmd ("type", class_support,
+ type_or_range_names,
+ &type, _("\
Set type checking. (on/warn/off/auto)"), _("\
Show type checking. (on/warn/off/auto)"), NULL,
- set_type_command,
- show_type_command,
- &setchecklist, &showchecklist);
- set_cmd_completer (command, range_or_type_completer);
-
- command =
- add_setshow_string_noescape_cmd ("range", class_support,
- &range, _("\
+ set_type_command,
+ show_type_command,
+ &setchecklist, &showchecklist);
+
+ add_setshow_enum_cmd ("range", class_support,
+ type_or_range_names,
+ &range, _("\
Set range checking. (on/warn/off/auto)"), _("\
Show range checking. (on/warn/off/auto)"), NULL,
- set_range_command,
- show_range_command,
- &setchecklist, &showchecklist);
- set_cmd_completer (command, range_or_type_completer);
-
- command =
- add_setshow_string_noescape_cmd ("case-sensitive", class_support,
- &case_sensitive, _("\
+ set_range_command,
+ show_range_command,
+ &setchecklist, &showchecklist);
+
+ add_setshow_enum_cmd ("case-sensitive", class_support,
+ case_sensitive_names,
+ &case_sensitive, _("\
Set case sensitivity in name search. (on/off/auto)"), _("\
Show case sensitivity in name search. (on/off/auto)"), _("\
For Fortran the default is off; for other languages the default is on."),
- set_case_command,
- show_case_command,
- &setlist, &showlist);
- set_cmd_completer (command, case_completer);
+ set_case_command,
+ show_case_command,
+ &setlist, &showlist);
- add_language (&unknown_language_defn);
- add_language (&local_language_defn);
add_language (&auto_language_defn);
+ add_language (&local_language_defn);
+ add_language (&unknown_language_defn);
language = xstrdup ("auto");
type = xstrdup ("auto");
Index: src/gdb/testsuite/gdb.base/default.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.base/default.exp 2009-08-08 17:24:33.000000000 +0100
+++ src/gdb/testsuite/gdb.base/default.exp 2009-08-08 17:39:49.000000000 +0100
@@ -530,7 +530,7 @@ gdb_test "set history size" "Argument re
#test set history
gdb_test "set history" "\"set history\" must be followed by the name of a history subcommand.(\[^\r\n\]*\[\r\n\])+List of set history subcommands:(\[^\r\n\]*\[\r\n\])+set history expansion -- Set history expansion on command input(\[^\r\n\]*\[\r\n\])+set history filename -- Set the filename in which to record the command history(\[^\r\n\]*\[\r\n\])+set history save -- Set saving of the history record on exit(\[^\r\n\]*\[\r\n\])+set history size -- Set the size of the command history(\[^\r\n\]*\[\r\n\])+Type \"help set history\" followed by set history subcommand name for full documentation.(\[^\r\n\]*\[\r\n\])+Command name abbreviations are allowed if unambiguous." "set history"
#test set language
-gdb_test "set language" "The currently understood settings are:(\[^\r\n\]*\[\r\n\])+local or auto *Automatic setting based on source file(\[^\r\n\]*\[\r\n\])+c *Use the C language(\[^\r\n\]*\[\r\n\])+c\[+\]+ *Use the C\[+\]+ language(\[^\r\n\]*\[\r\n\])+modula-2 *Use the Modula-2 language.*" "set language"
+gdb_test "set language" "Requires an argument. Valid arguments are auto, local, unknown, ada, c, c.., asm, minimal, fortran, objective-c, java, modula-2, pascal, scheme." "set language"
#test set listsize
gdb_test "set listsize" "Argument required .integer to set it to.*" "set listsize"
#test set print "p" abbreviation
Index: src/gdb/testsuite/gdb.base/help.exp
===================================================================
--- src.orig/gdb/testsuite/gdb.base/help.exp 2009-08-08 17:24:33.000000000 +0100
+++ src/gdb/testsuite/gdb.base/help.exp 2009-08-08 17:39:49.000000000 +0100
@@ -418,7 +418,8 @@ test_prefix_command_help {"set history"}
"Generic command for setting command history parameters\.\[\r\n\]+"
}
# test help set language
-gdb_test "help set language" "Set the current source language\." "help set language"
+gdb_test "help set language" "Set the current source language\.\[\r\n\]+The currently understood settings are:(\[^\r\n\]*\[\r\n\])+local or auto *Automatic setting based on source file(\[^\r\n\]*\[\r\n\])+c *Use the C language(\[^\r\n\]*\[\r\n\])+c\[+\]+ *Use the C\[+\]+ language(\[^\r\n\]*\[\r\n\])+modula-2 *Use the Modula-2 language.*" "help set language"
+
# test help set listsize
gdb_test "help set listsize" "Set number of source lines gdb will list by default\." "help set listsize"
# test help set print "p" abbreviation