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.
This commit is contained in:
Tom Tromey
2009-08-07 20:44:15 +00:00
parent cf2a6cfab6
commit 6cc0b2563e
4 changed files with 178 additions and 104 deletions

View 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

View 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

View 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 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 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_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. */

View 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);
set_type_command,
show_type_command,
&setchecklist, &showchecklist);
set_cmd_completer (command, range_or_type_completer);
/* FIXME: cagney/2005-02-20: This should be implemented using an
enum. */
add_setshow_string_noescape_cmd ("range", class_support, &range, _("\
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);
set_range_command,
show_range_command,
&setchecklist, &showchecklist);
set_cmd_completer (command, range_or_type_completer);
/* FIXME: cagney/2005-02-20: This should be implemented using an
enum. */
add_setshow_string_noescape_cmd ("case-sensitive", class_support,
&case_sensitive, _("\
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);