diff options
author | Simon Marchi <simon.marchi@polymtl.ca> | 2021-05-14 15:38:49 -0400 |
---|---|---|
committer | Simon Marchi <simon.marchi@polymtl.ca> | 2021-05-17 14:01:26 -0400 |
commit | 3d0b35641081d0f57d32583093f3297ff39b7379 (patch) | |
tree | fc6be36e7ce048ed74ce4597e0d365b1be4623d3 /gdb/cli | |
parent | 1be99b11f8d1a8fd4049fee1c0eeaef73b3e6d1d (diff) | |
download | gdb-3d0b35641081d0f57d32583093f3297ff39b7379.zip gdb-3d0b35641081d0f57d32583093f3297ff39b7379.tar.gz gdb-3d0b35641081d0f57d32583093f3297ff39b7379.tar.bz2 |
gdb: add cmd_list_element::is_prefix
Same idea as the previous patch, but for prefix instead of alias.
gdb/ChangeLog:
* cli/cli-decode.h (cmd_list_element) <is_prefix>: New, use it.
Change-Id: I76a9d2e82fc8d7429904424674d99ce6f9880e2b
Diffstat (limited to 'gdb/cli')
-rw-r--r-- | gdb/cli/cli-cmds.c | 4 | ||||
-rw-r--r-- | gdb/cli/cli-decode.c | 26 | ||||
-rw-r--r-- | gdb/cli/cli-decode.h | 4 | ||||
-rw-r--r-- | gdb/cli/cli-script.c | 12 | ||||
-rw-r--r-- | gdb/cli/cli-setshow.c | 4 |
5 files changed, 28 insertions, 22 deletions
diff --git a/gdb/cli/cli-cmds.c b/gdb/cli/cli-cmds.c index c29e597..0bf418e 100644 --- a/gdb/cli/cli-cmds.c +++ b/gdb/cli/cli-cmds.c @@ -1625,7 +1625,7 @@ show_user (const char *args, int from_tty) { for (c = cmdlist; c; c = c->next) { - if (cli_user_command_p (c) || c->subcommands != NULL) + if (cli_user_command_p (c) || c->is_prefix ()) show_user_1 (c, "", c->name, gdb_stdout); } } @@ -1900,7 +1900,7 @@ alias_command (const char *args, int from_tty) /* We've already tried to look up COMMAND. */ gdb_assert (c_command != NULL && c_command != (struct cmd_list_element *) -1); - gdb_assert (c_command->subcommands != NULL); + gdb_assert (c_command->is_prefix ()); c_alias = lookup_cmd_1 (& alias_prefix, cmdlist, NULL, NULL, 1); if (c_alias != c_command) error (_("ALIAS and COMMAND prefixes do not match.")); diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 29b4ed2..785e726a 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -69,8 +69,9 @@ lookup_cmd_with_subcommands (cmd_list_element **subcommands, { struct cmd_list_element *q; - if (p->subcommands == NULL) + if (!p->is_prefix ()) continue; + else if (p->subcommands == subcommands) { /* If we found an alias, we must return the aliased @@ -163,7 +164,7 @@ set_cmd_completer_handle_brkchars (struct cmd_list_element *cmd, std::string cmd_list_element::prefixname () const { - if (this->subcommands == nullptr) + if (!this->is_prefix ()) /* Not a prefix command. */ return ""; @@ -369,7 +370,7 @@ update_prefix_field_of_prefixed_commands (struct cmd_list_element *c) 'auto-load' command was not yet reachable by lookup_cmd_for_subcommands (list, cmdlist) that searches from the top level 'cmdlist'. */ - if (p->subcommands != nullptr) + if (p->is_prefix ()) update_prefix_field_of_prefixed_commands (p); } } @@ -1184,7 +1185,7 @@ apropos_cmd (struct ui_file *stream, print_doc_of_command (c, prefix, verbose, regex, stream); } /* Check if this command has subcommands. */ - if (c->subcommands != NULL) + if (c->is_prefix ()) { /* Recursively call ourselves on the subcommand list, passing the right prefix in. */ @@ -1249,12 +1250,13 @@ help_cmd (const char *command, struct ui_file *stream) fputs_filtered (c->doc, stream); fputs_filtered ("\n", stream); - if (c->subcommands == 0 && c->func != NULL) + if (!c->is_prefix () && c->func != NULL) return; + fprintf_filtered (stream, "\n"); /* If this is a prefix command, print it's subcommands. */ - if (c->subcommands) + if (c->is_prefix ()) help_list (*c->subcommands, c->prefixname ().c_str (), all_commands, stream); @@ -1446,7 +1448,7 @@ print_help_for_command (struct cmd_list_element *c, fput_aliases_definition_styled (c, stream); if (recurse - && c->subcommands != 0 + && c->is_prefix () && c->abbrev_flag == 0) /* Subcommands of a prefix command typically have 'all_commands' as class. If we pass CLASS to recursive invocation, @@ -1516,7 +1518,7 @@ help_cmd_list (struct cmd_list_element *list, enum command_class theclass, if (recurse && (theclass == class_user || theclass == class_alias) - && c->subcommands != NULL) + && c->is_prefix ()) { /* User-defined commands or aliases may be subcommands. */ help_cmd_list (*c->subcommands, theclass, recurse, stream); @@ -1694,7 +1696,7 @@ lookup_cmd_1 (const char **text, struct cmd_list_element *clist, } /* If we found a prefix command, keep looking. */ - if (found->subcommands) + if (found->is_prefix ()) { c = lookup_cmd_1 (text, *found->subcommands, result_list, default_args, ignore_help_classes, lookup_for_completion_p); @@ -1865,7 +1867,7 @@ lookup_cmd (const char **line, struct cmd_list_element *list, while (**line == ' ' || **line == '\t') (*line)++; - if (c->subcommands && **line && !c->allow_unknown) + if (c->is_prefix () && **line && !c->allow_unknown) undef_cmd_error (c->prefixname ().c_str (), *line); /* Seems to be what he wants. Return it. */ @@ -2056,7 +2058,7 @@ lookup_cmd_composition_1 (const char *text, text += len; text = skip_spaces (text); - if ((*cmd)->subcommands != nullptr && *text != '\0') + if ((*cmd)->is_prefix () && *text != '\0') { cur_list = *(*cmd)->subcommands; *prefix_cmd = *cmd; @@ -2123,7 +2125,7 @@ complete_on_cmdlist (struct cmd_list_element *list, if (!strncmp (ptr->name, text, textlen) && !ptr->abbrev_flag && (!ignore_help_classes || ptr->func - || ptr->subcommands)) + || ptr->is_prefix ())) { if (pass == 0) { diff --git a/gdb/cli/cli-decode.h b/gdb/cli/cli-decode.h index 8caf602..6204ed7 100644 --- a/gdb/cli/cli-decode.h +++ b/gdb/cli/cli-decode.h @@ -83,6 +83,10 @@ struct cmd_list_element bool is_alias () const { return this->alias_target != nullptr; } + /* Return true if this command is a prefix command. */ + bool is_prefix () const + { return this->subcommands != nullptr; } + /* Points to next command in this list. */ struct cmd_list_element *next = nullptr; diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index 5ddfab9..ff93523 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -1350,7 +1350,7 @@ validate_comname (const char **comname) const char *tem = prefix.c_str (); c = lookup_cmd (&tem, cmdlist, "", NULL, 0, 1); - if (c->subcommands == NULL) + if (!c->is_prefix ()) error (_("\"%s\" is not a prefix command."), prefix.c_str ()); list = c->subcommands; @@ -1414,7 +1414,7 @@ do_define_command (const char *comname, int from_tty, /* if C is a prefix command that was previously defined, tell the user its subcommands will be kept, and ask if ok to redefine the command. */ - if (c->subcommands != nullptr) + if (c->is_prefix ()) q = (c->user_commands.get () == nullptr || query (_("Keeping subcommands of prefix command \"%s\".\n" "Redefine command \"%s\"? "), c->name, c->name)); @@ -1595,7 +1595,7 @@ define_prefix_command (const char *comname, int from_tty) if (c != nullptr && c->theclass != class_user) error (_("Command \"%s\" is built-in."), comfull); - if (c != nullptr && c->subcommands != nullptr) + if (c != nullptr && c->is_prefix ()) { /* c is already a user defined prefix command. */ return; @@ -1665,7 +1665,7 @@ show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name, struct command_line *cmdlines = c->user_commands.get (); fprintf_filtered (stream, "User %scommand \"", - c->subcommands == NULL ? "" : "prefix "); + c->is_prefix () ? "prefix" : ""); fprintf_styled (stream, title_style.style (), "%s%s", prefix, name); fprintf_filtered (stream, "\":\n"); @@ -1676,12 +1676,12 @@ show_user_1 (struct cmd_list_element *c, const char *prefix, const char *name, } } - if (c->subcommands != NULL) + if (c->is_prefix ()) { const std::string prefixname = c->prefixname (); for (c = *c->subcommands; c != NULL; c = c->next) - if (c->theclass == class_user || c->subcommands != NULL) + if (c->theclass == class_user || c->is_prefix ()) show_user_1 (c, prefixname.c_str (), c->name, gdb_stdout); } diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 7e93a70..82008ca 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -740,7 +740,7 @@ cmd_show_list (struct cmd_list_element *list, int from_tty) /* If we find a prefix, run its list, prefixing our output by its prefix (with "show " skipped). */ - if (list->subcommands && !list->is_alias ()) + if (list->is_prefix () && !list->is_alias ()) { ui_out_emit_tuple optionlist_emitter (uiout, "optionlist"); std::string prefixname = list->prefixname (); @@ -758,7 +758,7 @@ cmd_show_list (struct cmd_list_element *list, int from_tty) { /* If we find a prefix, output it (with "show " skipped). */ std::string prefixname = list->prefix->prefixname (); - prefixname = (list->prefix->subcommands == nullptr ? "" + prefixname = (!list->prefix->is_prefix () ? "" : strstr (prefixname.c_str (), "show ") + 5); uiout->text (prefixname.c_str ()); } |