From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2126) id 6C27D3852751; Mon, 18 Jul 2022 14:56:29 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6C27D3852751 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable From: Tom Tromey To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Remove manual lifetime management from cli_interp X-Act-Checkin: binutils-gdb X-Git-Author: Tom Tromey X-Git-Refname: refs/heads/master X-Git-Oldrev: 66fd2c678e4bbd5855f0f09870862143a518bc58 X-Git-Newrev: 083aca0c8333fc24c6a65a03fca765bc13ee37c0 Message-Id: <20220718145629.6C27D3852751@sourceware.org> Date: Mon, 18 Jul 2022 14:56:29 +0000 (GMT) X-BeenThere: gdb-cvs@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-cvs mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Jul 2022 14:56:29 -0000 https://sourceware.org/git/gitweb.cgi?p=3Dbinutils-gdb.git;h=3D083aca0c8333= fc24c6a65a03fca765bc13ee37c0 commit 083aca0c8333fc24c6a65a03fca765bc13ee37c0 Author: Tom Tromey Date: Fri Jun 24 09:39:47 2022 -0600 Remove manual lifetime management from cli_interp =20 cli_interp manually manages its cli_out object. This patch changes it to use a unique_ptr, and also changes cli_uiout to be a private member. Diff: --- gdb/cli/cli-interp.c | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/gdb/cli/cli-interp.c b/gdb/cli/cli-interp.c index c26b6a75227..ca3a1abcaae 100644 --- a/gdb/cli/cli-interp.c +++ b/gdb/cli/cli-interp.c @@ -43,7 +43,7 @@ class cli_interp final : public cli_interp_base { public: explicit cli_interp (const char *name); - ~cli_interp (); + ~cli_interp () =3D default; =20 void init (bool top_level) override; void resume () override; @@ -51,20 +51,16 @@ class cli_interp final : public cli_interp_base gdb_exception exec (const char *command_str) override; ui_out *interp_ui_out () override; =20 +private: + /* The ui_out for the console interpreter. */ - cli_ui_out *cli_uiout; + std::unique_ptr m_cli_uiout; }; =20 cli_interp::cli_interp (const char *name) - : cli_interp_base (name) + : cli_interp_base (name), + m_cli_uiout (new cli_ui_out (gdb_stdout)) { - /* Create a default uiout builder for the CLI. */ - this->cli_uiout =3D new cli_ui_out (gdb_stdout); -} - -cli_interp::~cli_interp () -{ - delete cli_uiout; } =20 /* Suppress notification struct. */ @@ -289,7 +285,6 @@ void cli_interp::resume () { struct ui *ui =3D current_ui; - struct cli_interp *cli =3D this; struct ui_file *stream; =20 /*sync_execution =3D 1; */ @@ -298,10 +293,10 @@ cli_interp::resume () previously writing to gdb_stdout, then set it to the new gdb_stdout afterwards. */ =20 - stream =3D cli->cli_uiout->set_stream (gdb_stdout); + stream =3D m_cli_uiout->set_stream (gdb_stdout); if (stream !=3D gdb_stdout) { - cli->cli_uiout->set_stream (stream); + m_cli_uiout->set_stream (stream); stream =3D NULL; } =20 @@ -310,7 +305,7 @@ cli_interp::resume () ui->input_handler =3D command_line_handler; =20 if (stream !=3D NULL) - cli->cli_uiout->set_stream (gdb_stdout); + m_cli_uiout->set_stream (gdb_stdout); } =20 void @@ -322,20 +317,19 @@ cli_interp::suspend () gdb_exception cli_interp::exec (const char *command_str) { - struct cli_interp *cli =3D this; struct ui_file *old_stream; struct gdb_exception result; =20 - /* gdb_stdout could change between the time cli_uiout was + /* gdb_stdout could change between the time m_cli_uiout was initialized and now. Since we're probably using a different interpreter which has a new ui_file for gdb_stdout, use that one instead of the default. =20 It is important that it gets reset everytime, since the user could set gdb to use a different interpreter. */ - old_stream =3D cli->cli_uiout->set_stream (gdb_stdout); - result =3D safe_execute_command (cli->cli_uiout, command_str, 1); - cli->cli_uiout->set_stream (old_stream); + old_stream =3D m_cli_uiout->set_stream (gdb_stdout); + result =3D safe_execute_command (m_cli_uiout.get (), command_str, 1); + m_cli_uiout->set_stream (old_stream); return result; } =20 @@ -373,9 +367,7 @@ safe_execute_command (struct ui_out *command_uiout, con= st char *command, ui_out * cli_interp::interp_ui_out () { - struct cli_interp *cli =3D (struct cli_interp *) this; - - return cli->cli_uiout; + return m_cli_uiout.get (); } =20 /* These hold the pushed copies of the gdb output files.