forked from Imagelibrary/binutils-gdb
gdb: add cmd_list_element::is_command_class_help
Same idea as the previous patches, but for whether a command is a "command class help" command. I think this one is particularly useful, because it's not obvious when reading code what "c->func == NULL" means. Remove the cmd_func_p function, which does kind of the same thing as cmd_list_element::is_command_class_help (except it doesn't give a clue about the semantic of a NULL func value). gdb/ChangeLog: * cli/cli-decode.h (cmd_list_element) <is_command_class_help>: New, use it. * command.h (cmd_func_p): Remove. * cli/cli-decode.c (cmd_func_p): Remove. Change-Id: I521a3e1896dc93a5babe1493d18f5eb071e1b3b7
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2021-05-17 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
|
* cli/cli-decode.h (cmd_list_element) <is_command_class_help>:
|
||||||
|
New, use it.
|
||||||
|
* command.h (cmd_func_p): Remove.
|
||||||
|
* cli/cli-decode.c (cmd_func_p): Remove.
|
||||||
|
|
||||||
2021-05-17 Simon Marchi <simon.marchi@polymtl.ca>
|
2021-05-17 Simon Marchi <simon.marchi@polymtl.ca>
|
||||||
|
|
||||||
* cli/cli-decode.h (cmd_list_element) <is_alias>: New, use it.
|
* cli/cli-decode.h (cmd_list_element) <is_alias>: New, use it.
|
||||||
|
|||||||
@@ -1250,7 +1250,7 @@ help_cmd (const char *command, struct ui_file *stream)
|
|||||||
fputs_filtered (c->doc, stream);
|
fputs_filtered (c->doc, stream);
|
||||||
fputs_filtered ("\n", stream);
|
fputs_filtered ("\n", stream);
|
||||||
|
|
||||||
if (!c->is_prefix () && c->func != NULL)
|
if (!c->is_prefix () && !c->is_command_class_help ())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
fprintf_filtered (stream, "\n");
|
fprintf_filtered (stream, "\n");
|
||||||
@@ -1261,7 +1261,7 @@ help_cmd (const char *command, struct ui_file *stream)
|
|||||||
all_commands, stream);
|
all_commands, stream);
|
||||||
|
|
||||||
/* If this is a class name, print all of the commands in the class. */
|
/* If this is a class name, print all of the commands in the class. */
|
||||||
if (c->func == NULL)
|
if (c->is_command_class_help ())
|
||||||
help_list (cmdlist, "", c->theclass, stream);
|
help_list (cmdlist, "", c->theclass, stream);
|
||||||
|
|
||||||
if (c->hook_pre || c->hook_post)
|
if (c->hook_pre || c->hook_post)
|
||||||
@@ -1362,7 +1362,7 @@ help_all (struct ui_file *stream)
|
|||||||
/* If this is a class name, print all of the commands in the
|
/* If this is a class name, print all of the commands in the
|
||||||
class. */
|
class. */
|
||||||
|
|
||||||
if (c->func == NULL)
|
if (c->is_command_class_help ())
|
||||||
{
|
{
|
||||||
fprintf_filtered (stream, "\nCommand class: %s\n\n", c->name);
|
fprintf_filtered (stream, "\nCommand class: %s\n\n", c->name);
|
||||||
help_cmd_list (cmdlist, c->theclass, true, stream);
|
help_cmd_list (cmdlist, c->theclass, true, stream);
|
||||||
@@ -1498,8 +1498,8 @@ help_cmd_list (struct cmd_list_element *list, enum command_class theclass,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (theclass == all_commands
|
if (theclass == all_commands
|
||||||
|| (theclass == all_classes && c->func == NULL)
|
|| (theclass == all_classes && c->is_command_class_help ())
|
||||||
|| (theclass == c->theclass && c->func != NULL))
|
|| (theclass == c->theclass && !c->is_command_class_help ()))
|
||||||
{
|
{
|
||||||
/* show C when
|
/* show C when
|
||||||
- showing all commands
|
- showing all commands
|
||||||
@@ -1545,7 +1545,7 @@ find_cmd (const char *command, int len, struct cmd_list_element *clist,
|
|||||||
*nfound = 0;
|
*nfound = 0;
|
||||||
for (c = clist; c; c = c->next)
|
for (c = clist; c; c = c->next)
|
||||||
if (!strncmp (command, c->name, len)
|
if (!strncmp (command, c->name, len)
|
||||||
&& (!ignore_help_classes || c->func))
|
&& (!ignore_help_classes || !c->is_command_class_help ()))
|
||||||
{
|
{
|
||||||
found = c;
|
found = c;
|
||||||
(*nfound)++;
|
(*nfound)++;
|
||||||
@@ -2124,7 +2124,7 @@ complete_on_cmdlist (struct cmd_list_element *list,
|
|||||||
for (ptr = list; ptr; ptr = ptr->next)
|
for (ptr = list; ptr; ptr = ptr->next)
|
||||||
if (!strncmp (ptr->name, text, textlen)
|
if (!strncmp (ptr->name, text, textlen)
|
||||||
&& !ptr->abbrev_flag
|
&& !ptr->abbrev_flag
|
||||||
&& (!ignore_help_classes || ptr->func
|
&& (!ignore_help_classes || !ptr->is_command_class_help ()
|
||||||
|| ptr->is_prefix ()))
|
|| ptr->is_prefix ()))
|
||||||
{
|
{
|
||||||
if (pass == 0)
|
if (pass == 0)
|
||||||
@@ -2174,20 +2174,11 @@ complete_on_enum (completion_tracker &tracker,
|
|||||||
tracker.add_completion (make_completion_match_str (name, text, word));
|
tracker.add_completion (make_completion_match_str (name, text, word));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Check function pointer. */
|
|
||||||
int
|
|
||||||
cmd_func_p (struct cmd_list_element *cmd)
|
|
||||||
{
|
|
||||||
return (cmd->func != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Call the command function. */
|
/* Call the command function. */
|
||||||
void
|
void
|
||||||
cmd_func (struct cmd_list_element *cmd, const char *args, int from_tty)
|
cmd_func (struct cmd_list_element *cmd, const char *args, int from_tty)
|
||||||
{
|
{
|
||||||
if (cmd_func_p (cmd))
|
if (!cmd->is_command_class_help ())
|
||||||
{
|
{
|
||||||
gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
|
gdb::optional<scoped_restore_tmpl<int>> restore_suppress;
|
||||||
|
|
||||||
|
|||||||
@@ -87,6 +87,12 @@ struct cmd_list_element
|
|||||||
bool is_prefix () const
|
bool is_prefix () const
|
||||||
{ return this->subcommands != nullptr; }
|
{ return this->subcommands != nullptr; }
|
||||||
|
|
||||||
|
/* Return true if this command is a "command class help" command. For
|
||||||
|
instance, a "stack" dummy command is registered so that one can do
|
||||||
|
"help stack" and show help for all commands of the "stack" class. */
|
||||||
|
bool is_command_class_help () const
|
||||||
|
{ return this->func == nullptr; }
|
||||||
|
|
||||||
/* Points to next command in this list. */
|
/* Points to next command in this list. */
|
||||||
struct cmd_list_element *next = nullptr;
|
struct cmd_list_element *next = nullptr;
|
||||||
|
|
||||||
|
|||||||
@@ -595,9 +595,6 @@ extern void save_command_line (const char *cmd);
|
|||||||
|
|
||||||
extern void not_just_help_class_command (const char *, int);
|
extern void not_just_help_class_command (const char *, int);
|
||||||
|
|
||||||
/* Check function pointer. */
|
|
||||||
extern int cmd_func_p (struct cmd_list_element *cmd);
|
|
||||||
|
|
||||||
/* Call the command function. */
|
/* Call the command function. */
|
||||||
extern void cmd_func (struct cmd_list_element *cmd,
|
extern void cmd_func (struct cmd_list_element *cmd,
|
||||||
const char *args, int from_tty);
|
const char *args, int from_tty);
|
||||||
|
|||||||
@@ -666,7 +666,7 @@ execute_command (const char *p, int from_tty)
|
|||||||
do_set_command (arg, from_tty, c);
|
do_set_command (arg, from_tty, c);
|
||||||
else if (c->type == show_cmd)
|
else if (c->type == show_cmd)
|
||||||
do_show_command (arg, from_tty, c);
|
do_show_command (arg, from_tty, c);
|
||||||
else if (!cmd_func_p (c))
|
else if (c->is_command_class_help ())
|
||||||
error (_("That is not a command, just a help topic."));
|
error (_("That is not a command, just a help topic."));
|
||||||
else if (deprecated_call_command_hook)
|
else if (deprecated_call_command_hook)
|
||||||
deprecated_call_command_hook (c, arg, from_tty);
|
deprecated_call_command_hook (c, arg, from_tty);
|
||||||
|
|||||||
Reference in New Issue
Block a user