aboutsummaryrefslogtreecommitdiff
path: root/gdb/language.c
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2009-08-07 20:44:15 +0000
committerTom Tromey <tromey@redhat.com>2009-08-07 20:44:15 +0000
commit6cc0b2563e4aae5352e78e09370a0ba59feb26fc (patch)
treedde8ea69a789d37c058a30f675835b136e3d7cfc /gdb/language.c
parentcf2a6cfab69c160b11b0bc1a4b00e58ade531ee9 (diff)
downloadfsf-binutils-gdb-6cc0b2563e4aae5352e78e09370a0ba59feb26fc.zip
fsf-binutils-gdb-6cc0b2563e4aae5352e78e09370a0ba59feb26fc.tar.gz
fsf-binutils-gdb-6cc0b2563e4aae5352e78e09370a0ba59feb26fc.tar.bz2
PR gdb/8869:
* language.c (language_completer): New function. (range_or_type_completer): New function. (case_completer): New function. (_initialize_language): Set completers. * cli/cli-decode.c (add_setshow_string_cmd): Return the "set" command. (add_setshow_string_noescape_cmd): Likewise. (add_setshow_integer_cmd): Likewise. (add_setshow_uinteger_cmd): Likewise. (add_setshow_zinteger_cmd): Likewise. (add_setshow_zuinteger_cmd): Likewise. * command.h (add_setshow_string_cmd, add_setshow_string_noescape_cmd, add_setshow_uinteger_cmd, add_setshow_zinteger_cmd, add_setshow_zuinteger_cmd): Update.
Diffstat (limited to 'gdb/language.c')
-rw-r--r--gdb/language.c88
1 files changed, 60 insertions, 28 deletions
diff --git a/gdb/language.c b/gdb/language.c
index 62eeb62..a6c6165 100644
--- a/gdb/language.c
+++ b/gdb/language.c
@@ -221,6 +221,20 @@ local or auto Automatic setting based on source file\n"));
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);
+}
+
/* Show command. Display a warning if the type setting does
not match the current language. */
static void
@@ -315,6 +329,14 @@ set_range_command (char *ignore, int from_tty, struct cmd_list_element *c)
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);
+}
+
/* Show command. Display a warning if the case sensitivity setting does
not match the current language. */
static void
@@ -359,6 +381,14 @@ set_case_command (char *ignore, int from_tty, struct cmd_list_element *c)
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);
+}
+
/* Set the status of range and type checking and case sensitivity based on
the current modes and the current language.
If SHOW is non-zero, then print out the current language,
@@ -1340,21 +1370,21 @@ language_lookup_primitive_type_by_name (const struct language_defn *la,
void
_initialize_language (void)
{
- struct cmd_list_element *set, *show;
+ struct cmd_list_element *command;
language_gdbarch_data
= gdbarch_data_register_post_init (language_gdbarch_post_init);
/* GDB commands for language specific stuff */
- /* FIXME: cagney/2005-02-20: This should be implemented using an
- enum. */
- add_setshow_string_noescape_cmd ("language", class_support, &language, _("\
+ 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_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."),
@@ -1368,34 +1398,36 @@ Show the current source language."), NULL,
add_alias_cmd ("c", "check", no_class, 1, &showlist);
add_alias_cmd ("ch", "check", no_class, 1, &showlist);
- /* FIXME: cagney/2005-02-20: This should be implemented using an
- enum. */
- add_setshow_string_noescape_cmd ("type", class_support, &type, _("\
+ command =
+ add_setshow_string_noescape_cmd ("type", class_support,
+ &type, _("\
Set type checking. (on/warn/off/auto)"), _("\
Show type checking. (on/warn/off/auto)"), NULL,
- set_type_command,
- show_type_command,
- &setchecklist, &showchecklist);
-
- /* FIXME: cagney/2005-02-20: This should be implemented using an
- enum. */
- add_setshow_string_noescape_cmd ("range", class_support, &range, _("\
+ 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 range checking. (on/warn/off/auto)"), _("\
Show range checking. (on/warn/off/auto)"), NULL,
- set_range_command,
- show_range_command,
- &setchecklist, &showchecklist);
-
- /* FIXME: cagney/2005-02-20: This should be implemented using an
- enum. */
- add_setshow_string_noescape_cmd ("case-sensitive", class_support,
- &case_sensitive, _("\
+ 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 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_case_command,
+ show_case_command,
+ &setlist, &showlist);
+ set_cmd_completer (command, case_completer);
add_language (&unknown_language_defn);
add_language (&local_language_defn);