Re: [PATCH master/8.0] Add alias command to cmd_list_element

Simon Marchi
2017-05-17T12:16:33Z

On 2017-05-17 07:31, Yao Qi wrote:
> When we add alias command, we call add_alias_cmd and pass the alias
> name
> and command name. This implicitly requires the command and its prefix
> commands are already added to cmdlist. This may not be true, for
> example,
>
> add_com_alias ("tty", "set inferior-tty", class_alias, 0);
>
> "inferior-tty" command is added to setlist, but setlist may not be
> added
> to cmdlist (It depends on the order of related _initialize_XXX
> functions
> called) so that we can't find "set inferior-tty" from cmdlist.
>
> This patch fixes this problem by pass cmd_list_element of
> "inferior-tty"

"by passing"

> to add_alias_cmd, so that cmd_list_element of "inferior-tty" doesn't
> have
> to be reachable from cmdlist at that moment.
>
> Regression tested on x86_64-linux.
>
> gdb:
>
> 2017-05-17 Yao Qi <yao.qi@linaro.org>
>
> * cli/cli-decode.c (add_alias_cmd): New function.
> * command.h (add_alias_cmd): Declare.
> * infcmd.c (_initialize_infcmd): Don't call add_com_alias,
> instead call add_alias_cmd.
>
> gdb/testsuite:
>
> 2017-05-17 Simon Marchi <simon.marchi@ericsson.com>
>
> * gdb.base/set-inferior-tty.exp (test_set_inferior_tty): Add
> argument command.
> (top-level): Invoke test_set_inferior_tty.
> ---
> gdb/cli/cli-decode.c | 30
> +++++++++++++++++++----------
> gdb/command.h | 6 ++++++
> gdb/infcmd.c | 5 ++++-
> gdb/testsuite/gdb.base/set-inferior-tty.exp | 10 ++++++----
> 4 files changed, 36 insertions(+), 15 deletions(-)
>
> diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c
> index d45733e..e1d257a 100644
> --- a/gdb/cli/cli-decode.c
> +++ b/gdb/cli/cli-decode.c
> @@ -284,16 +284,10 @@ deprecate_cmd (struct cmd_list_element *cmd,
> const char *replacement)
> }
>
> struct cmd_list_element *
> -add_alias_cmd (const char *name, const char *oldname, enum
> command_class theclass,
> - int abbrev_flag, struct cmd_list_element **list)
> +add_alias_cmd (const char *name, cmd_list_element *old,
> + enum command_class theclass, int abbrev_flag,
> + struct cmd_list_element **list)
> {
> - const char *tmp;
> - struct cmd_list_element *old;
> - struct cmd_list_element *c;
> -
> - tmp = oldname;
> - old = lookup_cmd (&tmp, *list, "", 1, 1);
> -
> if (old == 0)
> {
> struct cmd_list_element *prehook, *prehookee, *posthook,
> *posthookee;
> @@ -307,7 +301,7 @@ add_alias_cmd (const char *name, const char
> *oldname, enum command_class theclas
> return 0;
> }
>
> - c = add_cmd (name, theclass, NULL, old->doc, list);
> + struct cmd_list_element *c = add_cmd (name, theclass, NULL,
> old->doc, list);
>
> /* If OLD->DOC can be freed, we should make another copy. */
> if (old->doc_allocated)
> @@ -330,6 +324,22 @@ add_alias_cmd (const char *name, const char
> *oldname, enum command_class theclas
> return c;
> }
>
> +struct cmd_list_element *
> +add_alias_cmd (const char *name, const char *oldname,
> + enum command_class theclass, int abbrev_flag,
> + struct cmd_list_element **list)
> +{
> + const char *tmp;
> + struct cmd_list_element *old;
> + struct cmd_list_element *c;

c is now unused.

Otherwise, LGTM. Thanks!

Simon