From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io1-xd2a.google.com (mail-io1-xd2a.google.com [IPv6:2607:f8b0:4864:20::d2a]) by sourceware.org (Postfix) with ESMTPS id 58EC03858C2F for ; Tue, 5 Jul 2022 17:15:35 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 58EC03858C2F Received: by mail-io1-xd2a.google.com with SMTP id n7so1170905ioo.7 for ; Tue, 05 Jul 2022 10:15:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=N7JAnJsUvMrjTyEAm9CQUsBUpX7uJRsF8yDvTIqUjFo=; b=mF/WAnaW33NrOFgeA4iHhdRsco0nXkMugQgNvaxK9qX4nDKNh+rMwGytRwfebAWm6W zEpzB/tAYQpM/+UKYBc3KsrQcQdXmPEe/i3pQ8TsaXWzHreVo9sjPLIMEPt5QrU5xSoM lhLfdNTS+c0peQ2JF8x5ETeEUjajm5dRTp9r/ODJyOjPkrByXNfb73tfUT8WwVZBbTV9 8ggoL/v2uCrZxlyCMdNyXbpJS888eBwG7aNMGNzOklFPINBbtOIv6qYFpUCeyZIigsch 82ChdbhsGH+13J23N9W7b+rKOBu2STN1+eZAjT3CCfuUKUwwppxojvEKEt30akKQA39a zjAQ== X-Gm-Message-State: AJIora8QnYX1u2W+9Rp6dOW/scbZ67nxhli5Bv6GX1bhfQL5qykWXyVW 6nemToEkJpXUPXWPpv5d4m/l/fIcViPbBg== X-Google-Smtp-Source: AGRyM1tgC3nT18HTySpy6nMrC8/0m2wl3o1M6M4ft2TvZhqj9qRUsRzXxOfM1BCes+1//2+cgNIrGA== X-Received: by 2002:a5d:9b85:0:b0:675:31ec:97dd with SMTP id r5-20020a5d9b85000000b0067531ec97ddmr19185218iom.111.1657041334697; Tue, 05 Jul 2022 10:15:34 -0700 (PDT) Received: from murgatroyd.Home (71-211-187-180.hlrn.qwest.net. [71.211.187.180]) by smtp.gmail.com with ESMTPSA id k1-20020a926f01000000b002dbee570531sm4631034ilc.18.2022.07.05.10.15.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Jul 2022 10:15:34 -0700 (PDT) From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH 4/4] Remove manual lifetime management from cli_interp Date: Tue, 5 Jul 2022 11:15:32 -0600 Message-Id: <20220705171532.1072851-5-tromey@adacore.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220705171532.1072851-1-tromey@adacore.com> References: <20220705171532.1072851-1-tromey@adacore.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Jul 2022 17:15:37 -0000 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. --- 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 () = default; 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; +private: + /* The ui_out for the console interpreter. */ - cli_ui_out *cli_uiout; + std::unique_ptr m_cli_uiout; }; 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 = new cli_ui_out (gdb_stdout); -} - -cli_interp::~cli_interp () -{ - delete cli_uiout; } /* Suppress notification struct. */ @@ -289,7 +285,6 @@ void cli_interp::resume () { struct ui *ui = current_ui; - struct cli_interp *cli = this; struct ui_file *stream; /*sync_execution = 1; */ @@ -298,10 +293,10 @@ cli_interp::resume () previously writing to gdb_stdout, then set it to the new gdb_stdout afterwards. */ - stream = cli->cli_uiout->set_stream (gdb_stdout); + stream = m_cli_uiout->set_stream (gdb_stdout); if (stream != gdb_stdout) { - cli->cli_uiout->set_stream (stream); + m_cli_uiout->set_stream (stream); stream = NULL; } @@ -310,7 +305,7 @@ cli_interp::resume () ui->input_handler = command_line_handler; if (stream != NULL) - cli->cli_uiout->set_stream (gdb_stdout); + m_cli_uiout->set_stream (gdb_stdout); } void @@ -322,20 +317,19 @@ cli_interp::suspend () gdb_exception cli_interp::exec (const char *command_str) { - struct cli_interp *cli = this; struct ui_file *old_stream; struct gdb_exception result; - /* 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. It is important that it gets reset everytime, since the user could set gdb to use a different interpreter. */ - old_stream = cli->cli_uiout->set_stream (gdb_stdout); - result = safe_execute_command (cli->cli_uiout, command_str, 1); - cli->cli_uiout->set_stream (old_stream); + old_stream = m_cli_uiout->set_stream (gdb_stdout); + result = safe_execute_command (m_cli_uiout.get (), command_str, 1); + m_cli_uiout->set_stream (old_stream); return result; } @@ -373,9 +367,7 @@ safe_execute_command (struct ui_out *command_uiout, const char *command, ui_out * cli_interp::interp_ui_out () { - struct cli_interp *cli = (struct cli_interp *) this; - - return cli->cli_uiout; + return m_cli_uiout.get (); } /* These hold the pushed copies of the gdb output files. -- 2.34.1