From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6021 invoked by alias); 8 Aug 2009 16:54:16 -0000 Received: (qmail 6007 invoked by uid 22791); 8 Aug 2009 16:54:13 -0000 X-SWARE-Spam-Status: No, hits=0.2 required=5.0 tests=AWL,BAYES_50,J_CHICKENPOX_43,J_CHICKENPOX_53,J_CHICKENPOX_73,J_CHICKENPOX_83,SPF_PASS X-Spam-Check-By: sourceware.org Received: from mail.codesourcery.com (HELO mail.codesourcery.com) (65.74.133.4) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 08 Aug 2009 16:54:03 +0000 Received: (qmail 2679 invoked from network); 8 Aug 2009 16:53:00 -0000 Received: from unknown (HELO orlando.local) (pedro@127.0.0.2) by mail.codesourcery.com with ESMTPA; 8 Aug 2009 16:53:00 -0000 From: Pedro Alves To: gdb-patches@sourceware.org Subject: Re: FYI: fix PR gdb/8869 Date: Sat, 08 Aug 2009 18:08:00 -0000 User-Agent: KMail/1.9.10 Cc: Tom Tromey References: <200908081443.59412.pedro@codesourcery.com> <200908081717.28622.pedro@codesourcery.com> In-Reply-To: <200908081717.28622.pedro@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200908081754.13861.pedro@codesourcery.com> X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-08/txt/msg00130.txt.bz2 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 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 * 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 * 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