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 <tom@tromey.com>
diff --git a/gdb/mi/mi-main.c b/gdb/mi/mi-main.c
index 5a00457..7a8a9ce 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<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 a9b9cda..433edbf 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);
+  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
diff --git a/gdb/mi/mi-parse.h b/gdb/mi/mi-parse.h
index c729e94..6bf516c 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 0fcd578..66dc6fb 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 (&current_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)