From: Andrew Burgess <aburgess@redhat.com>
To: gdb-patches@sourceware.org
Cc: Tom Tromey <tromey@adacore.com>, Andrew Burgess <aburgess@redhat.com>
Subject: [PATCH 3/3] gdb: remove mi_parse::make functions
Date: Mon, 14 Aug 2023 14:42:34 +0100 [thread overview]
Message-ID: <1c118f2c3ab71038a20e643be4b5ad423d756da0.1692019711.git.aburgess@redhat.com> (raw)
In-Reply-To: <cover.1692019711.git.aburgess@redhat.com>
Remove the static mi_parse::make functions, and instead use the
mi_parse constructor.
This is a partial revert of the commit:
commit fde3f93adb50c9937cd2e1c93561aea2fd167156
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/
---
gdb/mi/mi-main.c | 2 +-
gdb/mi/mi-parse.c | 76 +++++++++++++++++++++-------------------------
gdb/mi/mi-parse.h | 18 +++--------
gdb/python/py-mi.c | 4 +--
4 files changed, 43 insertions(+), 57 deletions(-)
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index f9bc1cb9cfb..573ff9270da 100644
--- a/gdb/mi/mi-main.c
+++ b/gdb/mi/mi-main.c
@@ -1935,7 +1935,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)
{
diff --git a/gdb/mi/mi-parse.c b/gdb/mi/mi-parse.c
index a9b9cdaf88f..433edbf4140 100644
--- a/gdb/mi/mi-parse.c
+++ b/gdb/mi/mi-parse.c
@@ -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);
-
- parse->command = std::move (command);
- parse->token = "";
+ this->command = std::move (command);
+ this->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
diff --git a/gdb/mi/mi-parse.h b/gdb/mi/mi-parse.h
index c729e94c1f0..6bf516cfc57 100644
--- a/gdb/mi/mi-parse.h
+++ b/gdb/mi/mi-parse.h
@@ -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,
diff --git a/gdb/python/py-mi.c b/gdb/python/py-mi.c
index 0fcd57844e7..66dc6fb8a32 100644
--- a/gdb/python/py-mi.c
+++ b/gdb/python/py-mi.c
@@ -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)
--
2.25.4
next prev parent reply other threads:[~2023-08-14 13:42 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-14 13:42 [PATCH 0/3] New gdb::make_unique and more std::unique_ptr use Andrew Burgess
2023-08-14 13:42 ` [PATCH 1/3] gdb: add gdb::make_unique function Andrew Burgess
2023-08-14 15:38 ` Tom Tromey
2023-08-17 10:26 ` Andrew Burgess
2023-08-17 18:07 ` Tom Tromey
2023-08-21 10:02 ` Andrew Burgess
2023-08-14 13:42 ` [PATCH 2/3] gdb: have mi_out_new return std::unique_ptr Andrew Burgess
2023-08-14 13:42 ` Andrew Burgess [this message]
2023-08-22 15:33 ` [PATCH 0/3] New gdb::make_unique and more std::unique_ptr use Tom Tromey
2023-08-23 8:52 ` Andrew Burgess
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1c118f2c3ab71038a20e643be4b5ad423d756da0.1692019711.git.aburgess@redhat.com \
--to=aburgess@redhat.com \
--cc=gdb-patches@sourceware.org \
--cc=tromey@adacore.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).