PR gdb/8869:
authorTom Tromey <tromey@redhat.com>
Fri, 7 Aug 2009 20:44:15 +0000 (20:44 +0000)
committerTom Tromey <tromey@redhat.com>
Fri, 7 Aug 2009 20:44:15 +0000 (20:44 +0000)
* 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.

gdb/ChangeLog
gdb/cli/cli-decode.c
gdb/command.h
gdb/language.c

index d25bd48..74af7e0 100644 (file)
@@ -1,3 +1,21 @@
+2009-08-07  Tom Tromey  <tromey@redhat.com>
+
+       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.
+
 2009-08-06  Paul Pluzhnikov  <ppluzhnikov@google.com>
        
        gold/10400
index 3e4f6f5..b547ba9 100644 (file)
@@ -494,8 +494,9 @@ add_setshow_filename_cmd (char *name, enum command_class class,
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
-   list for set/show or some sublist thereof).  */
-void
+   list for set/show or some sublist thereof).  Return the new "set"
+   command.  */
+struct cmd_list_element *
 add_setshow_string_cmd (char *name, enum command_class class,
                        char **var,
                        const char *set_doc, const char *show_doc,
@@ -505,16 +506,19 @@ add_setshow_string_cmd (char *name, enum command_class class,
                        struct cmd_list_element **set_list,
                        struct cmd_list_element **show_list)
 {
+  struct cmd_list_element *cmd;
   add_setshow_cmd_full (name, class, var_string, var,
                        set_doc, show_doc, help_doc,
                        set_func, show_func,
                        set_list, show_list,
-                       NULL, NULL);
+                       &cmd, NULL);
+  return cmd;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
-   list for set/show or some sublist thereof).  */
-void
+   list for set/show or some sublist thereof).  Return the new "set"
+   command.  */
+struct cmd_list_element *
 add_setshow_string_noescape_cmd (char *name, enum command_class class,
                                 char **var,
                                 const char *set_doc, const char *show_doc,
@@ -524,11 +528,13 @@ add_setshow_string_noescape_cmd (char *name, enum command_class class,
                                 struct cmd_list_element **set_list,
                                 struct cmd_list_element **show_list)
 {
+  struct cmd_list_element *cmd;
   add_setshow_cmd_full (name, class, var_string_noescape, var,
                        set_doc, show_doc, help_doc,
                        set_func, show_func,
                        set_list, show_list,
-                       NULL, NULL);
+                       &cmd, NULL);
+  return cmd;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
@@ -558,8 +564,9 @@ add_setshow_optional_filename_cmd (char *name, enum command_class class,
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  CLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
-   value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+   value.  SET_DOC and SHOW_DOC are the documentation strings.  Return
+   the new "set" command.  */
+struct cmd_list_element *
 add_setshow_integer_cmd (char *name, enum command_class class,
                         int *var,
                         const char *set_doc, const char *show_doc,
@@ -569,18 +576,21 @@ add_setshow_integer_cmd (char *name, enum command_class class,
                         struct cmd_list_element **set_list,
                         struct cmd_list_element **show_list)
 {
+  struct cmd_list_element *cmd;
   add_setshow_cmd_full (name, class, var_integer, var,
                        set_doc, show_doc, help_doc,
                        set_func, show_func,
                        set_list, show_list,
-                       NULL, NULL);
+                       &cmd, NULL);
+  return cmd;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  CLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
-   value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+   value.  SET_DOC and SHOW_DOC are the documentation strings.  Return
+   the new "set" command.  */
+struct cmd_list_element *
 add_setshow_uinteger_cmd (char *name, enum command_class class,
                          unsigned int *var,
                          const char *set_doc, const char *show_doc,
@@ -590,18 +600,21 @@ add_setshow_uinteger_cmd (char *name, enum command_class class,
                          struct cmd_list_element **set_list,
                          struct cmd_list_element **show_list)
 {
+  struct cmd_list_element *cmd;
   add_setshow_cmd_full (name, class, var_uinteger, var,
                        set_doc, show_doc, help_doc,
                        set_func, show_func,
                        set_list, show_list,
-                       NULL, NULL);
+                       &cmd, NULL);
+  return cmd;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  CLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
-   value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+   value.  SET_DOC and SHOW_DOC are the documentation strings.  Return
+   the new "set" command.  */
+struct cmd_list_element *
 add_setshow_zinteger_cmd (char *name, enum command_class class,
                          int *var,
                          const char *set_doc, const char *show_doc,
@@ -611,18 +624,21 @@ add_setshow_zinteger_cmd (char *name, enum command_class class,
                          struct cmd_list_element **set_list,
                          struct cmd_list_element **show_list)
 {
+  struct cmd_list_element *cmd;
   add_setshow_cmd_full (name, class, var_zinteger, var,
                        set_doc, show_doc, help_doc,
                        set_func, show_func,
                        set_list, show_list,
-                       NULL, NULL);
+                       &cmd, NULL);
+  return cmd;
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  CLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
-   value.  SET_DOC and SHOW_DOC are the documentation strings.  */
-void
+   value.  SET_DOC and SHOW_DOC are the documentation strings.  Return
+   the new "set" command.  */
+struct cmd_list_element *
 add_setshow_zuinteger_cmd (char *name, enum command_class class,
                           unsigned int *var,
                           const char *set_doc, const char *show_doc,
@@ -632,11 +648,13 @@ add_setshow_zuinteger_cmd (char *name, enum command_class class,
                           struct cmd_list_element **set_list,
                           struct cmd_list_element **show_list)
 {
+  struct cmd_list_element *cmd;
   add_setshow_cmd_full (name, class, var_zuinteger, var,
                        set_doc, show_doc, help_doc,
                        set_func, show_func,
                        set_list, show_list,
-                       NULL, NULL);
+                       &cmd, NULL);
+  return cmd;
 }
 
 /* Remove the command named NAME from the command list.  Return the
index 1a6bec4..4f12592 100644 (file)
@@ -260,27 +260,29 @@ extern void add_setshow_filename_cmd (char *name,
                                      struct cmd_list_element **set_list,
                                      struct cmd_list_element **show_list);
 
-extern void add_setshow_string_cmd (char *name,
-                                   enum command_class class,
-                                   char **var,
-                                   const char *set_doc,
-                                   const char *show_doc,
-                                   const char *help_doc,
-                                   cmd_sfunc_ftype *set_func,
-                                   show_value_ftype *show_func,
-                                   struct cmd_list_element **set_list,
-                                   struct cmd_list_element **show_list);
-
-extern void add_setshow_string_noescape_cmd (char *name,
-                                            enum command_class class,
-                                            char **var,
-                                            const char *set_doc,
-                                            const char *show_doc,
-                                            const char *help_doc,
-                                            cmd_sfunc_ftype *set_func,
-                                            show_value_ftype *show_func,
-                                            struct cmd_list_element **set_list,
-                                            struct cmd_list_element **show_list);
+extern struct cmd_list_element *
+    add_setshow_string_cmd (char *name,
+                           enum command_class class,
+                           char **var,
+                           const char *set_doc,
+                           const char *show_doc,
+                           const char *help_doc,
+                           cmd_sfunc_ftype *set_func,
+                           show_value_ftype *show_func,
+                           struct cmd_list_element **set_list,
+                           struct cmd_list_element **show_list);
+
+extern struct cmd_list_element *
+    add_setshow_string_noescape_cmd (char *name,
+                                    enum command_class class,
+                                    char **var,
+                                    const char *set_doc,
+                                    const char *show_doc,
+                                    const char *help_doc,
+                                    cmd_sfunc_ftype *set_func,
+                                    show_value_ftype *show_func,
+                                    struct cmd_list_element **set_list,
+                                    struct cmd_list_element **show_list);
 
 extern void add_setshow_optional_filename_cmd (char *name,
                                               enum command_class class,
@@ -293,49 +295,53 @@ extern void add_setshow_optional_filename_cmd (char *name,
                                               struct cmd_list_element **set_list,
                                               struct cmd_list_element **show_list);
 
-extern void add_setshow_integer_cmd (char *name,
-                                    enum command_class class,
-                                    int *var,
-                                    const char *set_doc,
-                                    const char *show_doc,
-                                    const char *help_doc,
-                                    cmd_sfunc_ftype *set_func,
-                                    show_value_ftype *show_func,
-                                    struct cmd_list_element **set_list,
-                                    struct cmd_list_element **show_list);
+extern struct cmd_list_element *
+    add_setshow_integer_cmd (char *name,
+                            enum command_class class,
+                            int *var,
+                            const char *set_doc,
+                            const char *show_doc,
+                            const char *help_doc,
+                            cmd_sfunc_ftype *set_func,
+                            show_value_ftype *show_func,
+                            struct cmd_list_element **set_list,
+                            struct cmd_list_element **show_list);
 
-extern void add_setshow_uinteger_cmd (char *name,
-                                     enum command_class class,
-                                     unsigned int *var,
-                                     const char *set_doc,
-                                     const char *show_doc,
-                                     const char *help_doc,
-                                     cmd_sfunc_ftype *set_func,
-                                     show_value_ftype *show_func,
-                                     struct cmd_list_element **set_list,
-                                     struct cmd_list_element **show_list);
+extern struct cmd_list_element *
+    add_setshow_uinteger_cmd (char *name,
+                             enum command_class class,
+                             unsigned int *var,
+                             const char *set_doc,
+                             const char *show_doc,
+                             const char *help_doc,
+                             cmd_sfunc_ftype *set_func,
+                             show_value_ftype *show_func,
+                             struct cmd_list_element **set_list,
+                             struct cmd_list_element **show_list);
 
-extern void add_setshow_zinteger_cmd (char *name,
-                                     enum command_class class,
-                                     int *var,
-                                     const char *set_doc,
-                                     const char *show_doc,
-                                     const char *help_doc,
-                                     cmd_sfunc_ftype *set_func,
-                                     show_value_ftype *show_func,
-                                     struct cmd_list_element **set_list,
-                                     struct cmd_list_element **show_list);
+extern struct cmd_list_element *
+    add_setshow_zinteger_cmd (char *name,
+                             enum command_class class,
+                             int *var,
+                             const char *set_doc,
+                             const char *show_doc,
+                             const char *help_doc,
+                             cmd_sfunc_ftype *set_func,
+                             show_value_ftype *show_func,
+                             struct cmd_list_element **set_list,
+                             struct cmd_list_element **show_list);
 
-extern void add_setshow_zuinteger_cmd (char *name,
-                                      enum command_class class,
-                                      unsigned int *var,
-                                      const char *set_doc,
-                                      const char *show_doc,
-                                      const char *help_doc,
-                                      cmd_sfunc_ftype *set_func,
-                                      show_value_ftype *show_func,
-                                      struct cmd_list_element **set_list,
-                                      struct cmd_list_element **show_list);
+extern struct cmd_list_element *
+    add_setshow_zuinteger_cmd (char *name,
+                              enum command_class class,
+                              unsigned int *var,
+                              const char *set_doc,
+                              const char *show_doc,
+                              const char *help_doc,
+                              cmd_sfunc_ftype *set_func,
+                              show_value_ftype *show_func,
+                              struct cmd_list_element **set_list,
+                              struct cmd_list_element **show_list);
 
 /* Do a "show" command for each thing on a command list.  */
 
index 62eeb62..a6c6165 100644 (file)
@@ -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);