gdb: remove mi_parse::make functions
Remove the static mi_parse::make functions, and instead use the
mi_parse constructor.
This is a partial revert of the commit:
commit fde3f93adb
Date: Mon Mar 20 10:56:55 2023 -0600
Introduce "static constructor" for mi_parse
which introduced the mi_parse::make functions, though after discussion
on the list the reasons for seem to have been lost[1]. Given there
are no test regressions when moving back to using the constructors, I
propose we should do that for now.
There should be no user visible changes after this commit.
[1] https://inbox.sourceware.org/gdb-patches/20230404-dap-loaded-sources-v2-5-93f229095e03@adacore.com/
Approved-By: Tom Tromey <tom@tromey.com>
This commit is contained in:
+1
-1
@@ -1934,7 +1934,7 @@ mi_execute_command (const char *cmd, int from_tty)
|
||||
= gdb::checked_static_cast<mi_interp *> (command_interp ());
|
||||
try
|
||||
{
|
||||
command = mi_parse::make (cmd, &token);
|
||||
command = gdb::make_unique<mi_parse> (cmd, &token);
|
||||
}
|
||||
catch (const gdb_exception &exception)
|
||||
{
|
||||
|
||||
+35
-41
@@ -287,13 +287,12 @@ mi_parse::set_language (const char *arg, const char **endp)
|
||||
*endp = arg;
|
||||
}
|
||||
|
||||
std::unique_ptr<struct mi_parse>
|
||||
mi_parse::make (const char *cmd, std::string *token)
|
||||
/* See mi-parse.h. */
|
||||
|
||||
mi_parse::mi_parse (const char *cmd, std::string *token)
|
||||
{
|
||||
const char *chp;
|
||||
|
||||
std::unique_ptr<struct mi_parse> parse (new struct mi_parse);
|
||||
|
||||
/* Before starting, skip leading white space. */
|
||||
cmd = skip_spaces (cmd);
|
||||
|
||||
@@ -306,10 +305,10 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
if (*chp != '-')
|
||||
{
|
||||
chp = skip_spaces (chp);
|
||||
parse->command = make_unique_xstrdup (chp);
|
||||
parse->op = CLI_COMMAND;
|
||||
this->command = make_unique_xstrdup (chp);
|
||||
this->op = CLI_COMMAND;
|
||||
|
||||
return parse;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Extract the command. */
|
||||
@@ -318,14 +317,14 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
|
||||
for (; *chp && !isspace (*chp); chp++)
|
||||
;
|
||||
parse->command = make_unique_xstrndup (tmp, chp - tmp);
|
||||
this->command = make_unique_xstrndup (tmp, chp - tmp);
|
||||
}
|
||||
|
||||
/* Find the command in the MI table. */
|
||||
parse->cmd = mi_cmd_lookup (parse->command.get ());
|
||||
if (parse->cmd == NULL)
|
||||
this->cmd = mi_cmd_lookup (this->command.get ());
|
||||
if (this->cmd == NULL)
|
||||
throw_error (UNDEFINED_COMMAND_ERROR,
|
||||
_("Undefined MI command: %s"), parse->command.get ());
|
||||
_("Undefined MI command: %s"), this->command.get ());
|
||||
|
||||
/* Skip white space following the command. */
|
||||
chp = skip_spaces (chp);
|
||||
@@ -349,13 +348,13 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
|
||||
if (strncmp (chp, "--all ", as) == 0)
|
||||
{
|
||||
parse->all = 1;
|
||||
this->all = 1;
|
||||
chp += as;
|
||||
}
|
||||
/* See if --all is the last token in the input. */
|
||||
if (strcmp (chp, "--all") == 0)
|
||||
{
|
||||
parse->all = 1;
|
||||
this->all = 1;
|
||||
chp += strlen (chp);
|
||||
}
|
||||
if (strncmp (chp, "--thread-group ", tgs) == 0)
|
||||
@@ -364,7 +363,7 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
|
||||
option = "--thread-group";
|
||||
chp += tgs;
|
||||
parse->set_thread_group (chp, &endp);
|
||||
this->set_thread_group (chp, &endp);
|
||||
chp = endp;
|
||||
}
|
||||
else if (strncmp (chp, "--thread ", ts) == 0)
|
||||
@@ -373,7 +372,7 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
|
||||
option = "--thread";
|
||||
chp += ts;
|
||||
parse->set_thread (chp, &endp);
|
||||
this->set_thread (chp, &endp);
|
||||
chp = endp;
|
||||
}
|
||||
else if (strncmp (chp, "--frame ", fs) == 0)
|
||||
@@ -382,14 +381,14 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
|
||||
option = "--frame";
|
||||
chp += fs;
|
||||
parse->set_frame (chp, &endp);
|
||||
this->set_frame (chp, &endp);
|
||||
chp = endp;
|
||||
}
|
||||
else if (strncmp (chp, "--language ", ls) == 0)
|
||||
{
|
||||
option = "--language";
|
||||
chp += ls;
|
||||
parse->set_language (chp, &chp);
|
||||
this->set_language (chp, &chp);
|
||||
}
|
||||
else
|
||||
break;
|
||||
@@ -400,37 +399,33 @@ mi_parse::make (const char *cmd, std::string *token)
|
||||
}
|
||||
|
||||
/* Save the rest of the arguments for the command. */
|
||||
parse->m_args = chp;
|
||||
this->m_args = chp;
|
||||
|
||||
/* Fully parsed, flag as an MI command. */
|
||||
parse->op = MI_COMMAND;
|
||||
return parse;
|
||||
this->op = MI_COMMAND;
|
||||
}
|
||||
|
||||
/* See mi-parse.h. */
|
||||
|
||||
std::unique_ptr<struct mi_parse>
|
||||
mi_parse::make (gdb::unique_xmalloc_ptr<char> command,
|
||||
std::vector<gdb::unique_xmalloc_ptr<char>> args)
|
||||
mi_parse::mi_parse (gdb::unique_xmalloc_ptr<char> command,
|
||||
std::vector<gdb::unique_xmalloc_ptr<char>> args)
|
||||
{
|
||||
std::unique_ptr<struct mi_parse> parse (new struct mi_parse);
|
||||
this->command = std::move (command);
|
||||
this->token = "";
|
||||
|
||||
parse->command = std::move (command);
|
||||
parse->token = "";
|
||||
|
||||
if (parse->command.get ()[0] != '-')
|
||||
if (this->command.get ()[0] != '-')
|
||||
throw_error (UNDEFINED_COMMAND_ERROR,
|
||||
_("MI command '%s' does not start with '-'"),
|
||||
parse->command.get ());
|
||||
this->command.get ());
|
||||
|
||||
/* Find the command in the MI table. */
|
||||
parse->cmd = mi_cmd_lookup (parse->command.get () + 1);
|
||||
if (parse->cmd == NULL)
|
||||
this->cmd = mi_cmd_lookup (this->command.get () + 1);
|
||||
if (this->cmd == NULL)
|
||||
throw_error (UNDEFINED_COMMAND_ERROR,
|
||||
_("Undefined MI command: %s"), parse->command.get ());
|
||||
_("Undefined MI command: %s"), this->command.get ());
|
||||
|
||||
/* This over-allocates slightly, but it seems unimportant. */
|
||||
parse->argv = XCNEWVEC (char *, args.size () + 1);
|
||||
this->argv = XCNEWVEC (char *, args.size () + 1);
|
||||
|
||||
for (size_t i = 0; i < args.size (); ++i)
|
||||
{
|
||||
@@ -439,43 +434,42 @@ mi_parse::make (gdb::unique_xmalloc_ptr<char> command,
|
||||
/* See if --all is the last token in the input. */
|
||||
if (strcmp (chp, "--all") == 0)
|
||||
{
|
||||
parse->all = 1;
|
||||
this->all = 1;
|
||||
}
|
||||
else if (strcmp (chp, "--thread-group") == 0)
|
||||
{
|
||||
++i;
|
||||
if (i == args.size ())
|
||||
error ("No argument to '--thread-group'");
|
||||
parse->set_thread_group (args[i].get (), nullptr);
|
||||
this->set_thread_group (args[i].get (), nullptr);
|
||||
}
|
||||
else if (strcmp (chp, "--thread") == 0)
|
||||
{
|
||||
++i;
|
||||
if (i == args.size ())
|
||||
error ("No argument to '--thread'");
|
||||
parse->set_thread (args[i].get (), nullptr);
|
||||
this->set_thread (args[i].get (), nullptr);
|
||||
}
|
||||
else if (strcmp (chp, "--frame") == 0)
|
||||
{
|
||||
++i;
|
||||
if (i == args.size ())
|
||||
error ("No argument to '--frame'");
|
||||
parse->set_frame (args[i].get (), nullptr);
|
||||
this->set_frame (args[i].get (), nullptr);
|
||||
}
|
||||
else if (strcmp (chp, "--language") == 0)
|
||||
{
|
||||
++i;
|
||||
if (i == args.size ())
|
||||
error ("No argument to '--language'");
|
||||
parse->set_language (args[i].get (), nullptr);
|
||||
this->set_language (args[i].get (), nullptr);
|
||||
}
|
||||
else
|
||||
parse->argv[parse->argc++] = args[i].release ();
|
||||
this->argv[this->argc++] = args[i].release ();
|
||||
}
|
||||
|
||||
/* Fully parsed, flag as an MI command. */
|
||||
parse->op = MI_COMMAND;
|
||||
return parse;
|
||||
this->op = MI_COMMAND;
|
||||
}
|
||||
|
||||
enum print_values
|
||||
|
||||
+5
-13
@@ -41,24 +41,18 @@ enum mi_command_type
|
||||
|
||||
struct mi_parse
|
||||
{
|
||||
/* Attempts to parse CMD returning a ``struct mi_parse''. If CMD is
|
||||
/* Attempt to parse CMD creating a ``struct mi_parse''. If CMD is
|
||||
invalid, an exception is thrown. For an MI_COMMAND COMMAND, ARGS
|
||||
and OP are initialized. Un-initialized fields are zero. *TOKEN is
|
||||
set to the token, even if an exception is thrown. It can be
|
||||
assigned to the TOKEN field of the resultant mi_parse object,
|
||||
to be freed by mi_parse_free. */
|
||||
|
||||
static std::unique_ptr<struct mi_parse> make (const char *cmd,
|
||||
std::string *token);
|
||||
set to the token, even if an exception is thrown. */
|
||||
mi_parse (const char *cmd, std::string *token);
|
||||
|
||||
/* Create an mi_parse object given the command name and a vector
|
||||
of arguments. Unlike with the other constructor, here the
|
||||
arguments are treated "as is" -- no escape processing is
|
||||
done. */
|
||||
|
||||
static std::unique_ptr<struct mi_parse> make
|
||||
(gdb::unique_xmalloc_ptr<char> command,
|
||||
std::vector<gdb::unique_xmalloc_ptr<char>> args);
|
||||
mi_parse (gdb::unique_xmalloc_ptr<char> command,
|
||||
std::vector<gdb::unique_xmalloc_ptr<char>> args);
|
||||
|
||||
~mi_parse ();
|
||||
|
||||
@@ -91,8 +85,6 @@ struct mi_parse
|
||||
|
||||
private:
|
||||
|
||||
mi_parse () = default;
|
||||
|
||||
/* Helper methods for parsing arguments. Each takes the argument
|
||||
to be parsed. It will either set a member of this object, or
|
||||
throw an exception on error. In each case, *ENDP, if non-NULL,
|
||||
|
||||
+2
-2
@@ -284,8 +284,8 @@ gdbpy_execute_mi_command (PyObject *self, PyObject *args, PyObject *kw)
|
||||
try
|
||||
{
|
||||
scoped_restore save_uiout = make_scoped_restore (¤t_uiout, &uiout);
|
||||
std::unique_ptr<struct mi_parse> parser
|
||||
= mi_parse::make (std::move (mi_command), std::move (arg_strings));
|
||||
auto parser = gdb::make_unique<mi_parse> (std::move (mi_command),
|
||||
std::move (arg_strings));
|
||||
mi_execute_command (parser.get ());
|
||||
}
|
||||
catch (const gdb_exception &except)
|
||||
|
||||
Reference in New Issue
Block a user