From: Andrew Burgess Date: Fri, 11 Aug 2023 10:53:27 +0000 (+0100) Subject: gdb: remove mi_parse::make functions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=951dbdfeec44d8d2971b155f17edff09d6f1a67a;p=binutils-gdb.git 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 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/ Approved-By: Tom Tromey --- diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c index 5a00457bf5f..7a8a9ce94c2 100644 --- a/gdb/mi/mi-main.c +++ b/gdb/mi/mi-main.c @@ -1934,7 +1934,7 @@ mi_execute_command (const char *cmd, int from_tty) = gdb::checked_static_cast (command_interp ()); try { - command = mi_parse::make (cmd, &token); + command = gdb::make_unique (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 -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 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 -mi_parse::make (gdb::unique_xmalloc_ptr command, - std::vector> args) +mi_parse::mi_parse (gdb::unique_xmalloc_ptr command, + std::vector> args) { - std::unique_ptr 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 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 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 make - (gdb::unique_xmalloc_ptr command, - std::vector> args); + mi_parse (gdb::unique_xmalloc_ptr command, + std::vector> 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 parser - = mi_parse::make (std::move (mi_command), std::move (arg_strings)); + auto parser = gdb::make_unique (std::move (mi_command), + std::move (arg_strings)); mi_execute_command (parser.get ()); } catch (const gdb_exception &except)