From patchwork Sat Dec 16 01:04:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 82277 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 315983857B8A for ; Sat, 16 Dec 2023 01:04:53 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta036.useast.a.cloudfilter.net (omta036.useast.a.cloudfilter.net [44.202.169.35]) by sourceware.org (Postfix) with ESMTPS id 46AC33857B8A for ; Sat, 16 Dec 2023 01:04:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 46AC33857B8A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 46AC33857B8A Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=44.202.169.35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702688675; cv=none; b=WMQF7EUD3gM7vJ42+2l6fxvcs3XEpUMvimNLFUNDyd+ljSNEd+hMjdpVAmXRH+G+z+ffSDcvqextMT/Y9KzCRsCrRcYwLpxUnW3V6h+wsAymayHqUMT0Dr72qgTWRmai9J85RVR9cwOKjbu5R4XpGE17ltz8IfQLB2ESmvKpUpk= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1702688675; c=relaxed/simple; bh=gblONTw4ksyk4tgaYOs0zzn8lsx7DJhvRbQxvpLU59E=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=ZfbkXTUf9E6moW/ZXo18Y5RcEBHX98O0tJQCNAJKxHvDN2i9hzJHFMKp4nJKD4hrabb8qzrb4QhegF7LJAnRlZ9mMzPJwejZl0BA/85fkKVK//j0PzEyBN8z10mN8IlpNNzxnmpP7NczjeT9mY0SDQ3rasIRMDZ9YFJ50WuSvIs= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from eig-obgw-5003a.ext.cloudfilter.net ([10.0.29.159]) by cmsmtp with ESMTPS id EJ39rNDPygpyEEJ6Vrz3bA; Sat, 16 Dec 2023 01:04:31 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id EJ6UrzXdZnCfvEJ6Ur6jib; Sat, 16 Dec 2023 01:04:30 +0000 X-Authority-Analysis: v=2.4 cv=KKpJsXJo c=1 sm=1 tr=0 ts=657cf79e a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=OWjo9vPv0XrRhIrVQ50Ab3nP57M=:19 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=e2cXIFwxEfEA:10 a=Qbun_eYptAEA:10 a=mDV3o1hIAAAA:8 a=y5A1dSnAbnzjFoK1clQA:9 a=_FVE-zBwftR9WsbkzFJk:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=t3In6FAwIKgvsxb2xVRnBfJ2WWhfrwsYyMeXE8SlhHU=; b=cPX1tf9KiZUdsaDg5ioKVbGbif TYHnmtysPFPrmHkRGBoZSy0EGVOmdIGESCokl3nKydKzqKI7OFtlvhQA3QiUvFJrnKGSuQSt4hA5i 4NP8Dzx1MlD85CbDaS/wsr8NL; Received: from [161.98.8.3] (port=53668 helo=prentzel.ci.boulder.co.us) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1rEJ6U-002eE6-07; Fri, 15 Dec 2023 18:04:30 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH] Remove tui-out.[ch] Date: Fri, 15 Dec 2023 18:04:28 -0700 Message-ID: <20231216010428.1815384-1-tom@tromey.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 161.98.8.3 X-Source-L: No X-Exim-ID: 1rEJ6U-002eE6-07 X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: (prentzel.ci.boulder.co.us) [161.98.8.3]:53668 X-Source-Auth: tom+tromey.com X-Email-Count: 1 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfKwqGVaBA0kEUOlyt9/19OPtdZXtAc6v/hVBAl8gbMdtFj7CbBY9mfOyNvxr7KfYZuWNUod4AOjnb8ME+adsW9S9yr6F8CyeHhr3k/HMxDREIljHoHRZ evkSYtTtYldkqNGaiGFP/+phtCvQjRR9oIZiapr4vIJk/oOeNDhVE8DvdFHsLE41CbREpQo0KuhAmoLYQ4O3e2zsCnl8RoFqooE= X-Spam-Status: No, score=-3023.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, 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.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org The other day on irc, we were discussing the "m_line" hack in tui-out.c, and I mentioned that it would be nice to replace this with a new ui_out_flag. Later, I looked at ui_out_flag and found: ui_source_list = (1 << 0), ... and sure enough, this is tested already. This patch removes tui-out.[ch] and changes the TUI to use an ordinary cli-out object without this flag set. As far as I can tell, this doesn't affect behavior at all -- the TUI tests all pass, and interactively I tried switching stack frames, "list", etc, and it all seems to work. --- gdb/Makefile.in | 2 - gdb/source.c | 19 +++----- gdb/tui/tui-io.c | 3 +- gdb/tui/tui-out.c | 111 ---------------------------------------------- gdb/tui/tui-out.h | 64 -------------------------- 5 files changed, 6 insertions(+), 193 deletions(-) delete mode 100644 gdb/tui/tui-out.c delete mode 100644 gdb/tui/tui-out.h diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 0886c0e8495..ce78d917764 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -318,7 +318,6 @@ SUBDIR_TUI_SRCS = \ tui/tui-io.c \ tui/tui-layout.c \ tui/tui-location.c \ - tui/tui-out.c \ tui/tui-regs.c \ tui/tui-source.c \ tui/tui-stack.c \ @@ -1605,7 +1604,6 @@ HFILES_NO_SRCDIR = \ tui/tui-io.h \ tui/tui-layout.h \ tui/tui-location.h \ - tui/tui-out.h \ tui/tui-regs.h \ tui/tui-source.h \ tui/tui-stack.h \ diff --git a/gdb/source.c b/gdb/source.c index f648adc4520..1b58497dbd1 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1345,25 +1345,16 @@ print_source_lines_base (struct symtab *s, int line, int stopline, uiout->field_signed ("line", line); uiout->text ("\tin "); - /* CLI expects only the "file" field. TUI expects only the - "fullname" field (and TUI does break if "file" is printed). - MI expects both fields. ui_source_list is set only for CLI, - not for TUI. */ + /* CLI expects only the "file" field. MI expects both + fields. ui_source_list is set only for CLI, not for + TUI. */ if (uiout->is_mi_like_p () || uiout->test_flags (ui_source_list)) uiout->field_string ("file", symtab_to_filename_for_display (s), file_name_style.style ()); - if (uiout->is_mi_like_p () || !uiout->test_flags (ui_source_list)) + if (uiout->is_mi_like_p ()) { const char *s_fullname = symtab_to_fullname (s); - char *local_fullname; - - /* ui_out_field_string may free S_FULLNAME by calling - open_source_file for it again. See e.g., - tui_field_string->tui_show_source. */ - local_fullname = (char *) alloca (strlen (s_fullname) + 1); - strcpy (local_fullname, s_fullname); - - uiout->field_string ("fullname", local_fullname); + uiout->field_string ("fullname", s_fullname); } uiout->text ("\n"); diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index 84724643fd5..382239e4dd5 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -33,7 +33,6 @@ #include "tui/tui-win.h" #include "tui/tui-wingeneral.h" #include "tui/tui-file.h" -#include "tui/tui-out.h" #include "ui-out.h" #include "cli-out.h" #include @@ -917,7 +916,7 @@ tui_initialize_io (void) tui_stdout = new pager_file (new tui_file (stdout, true)); tui_stderr = new tui_file (stderr, false); tui_stdlog = new timestamped_file (tui_stderr); - tui_out = new tui_ui_out (tui_stdout); + tui_out = new cli_ui_out (tui_stdout, 0); /* Create the default UI. */ tui_old_uiout = new cli_ui_out (gdb_stdout); diff --git a/gdb/tui/tui-out.c b/gdb/tui/tui-out.c deleted file mode 100644 index b8e7de197cf..00000000000 --- a/gdb/tui/tui-out.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Output generating routines for GDB CLI. - - Copyright (C) 1999-2023 Free Software Foundation, Inc. - - Contributed by Cygnus Solutions. - Written by Fernando Nasser for Cygnus. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include "defs.h" -#include "ui-out.h" -#include "tui-out.h" -#include "tui.h" - -/* Output an int field. */ - -void -tui_ui_out::do_field_signed (int fldno, int width, ui_align alignment, - const char *fldname, LONGEST value) -{ - if (suppress_output ()) - return; - - /* Don't print line number, keep it for later. */ - if (m_start_of_line == 0 && strcmp (fldname, "line") == 0) - { - m_start_of_line++; - m_line = value; - return; - } - m_start_of_line++; - - cli_ui_out::do_field_signed (fldno, width, alignment, fldname, value); -} - -/* Other cli_field_* end up here so alignment and field separators are - both handled by tui_field_string. */ - -void -tui_ui_out::do_field_string (int fldno, int width, ui_align align, - const char *fldname, const char *string, - const ui_file_style &style) -{ - if (suppress_output ()) - return; - - m_start_of_line++; - - if (fldname && m_line > 0 && strcmp (fldname, "fullname") == 0) - return; - - cli_ui_out::do_field_string (fldno, width, align, fldname, string, style); -} - -void -tui_ui_out::do_field_fmt (int fldno, int width, ui_align align, - const char *fldname, const ui_file_style &style, - const char *format, va_list args) -{ - if (suppress_output ()) - return; - - m_start_of_line++; - - cli_ui_out::do_field_fmt (fldno, width, align, fldname, style, format, args); -} - -void -tui_ui_out::do_text (const char *string) -{ - if (suppress_output ()) - return; - - m_start_of_line++; - if (m_line > 0) - { - /* Printing a source line, so suppress regular output -- the - line was shown on the TUI's source window by tui_show_source - above instead. */ - if (strchr (string, '\n') != 0) - { - /* We've reached the end of the line, so go back to letting - text output go to the console. */ - m_line = 0; - m_start_of_line = 0; - } - return; - } - if (strchr (string, '\n')) - m_start_of_line = 0; - - cli_ui_out::do_text (string); -} - -tui_ui_out::tui_ui_out (ui_file *stream) - : cli_ui_out (stream, 0) -{ -} diff --git a/gdb/tui/tui-out.h b/gdb/tui/tui-out.h deleted file mode 100644 index ec7e02bb900..00000000000 --- a/gdb/tui/tui-out.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2016-2023 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef TUI_TUI_OUT_H -#define TUI_TUI_OUT_H - -#include "cli-out.h" - -/* A ui_out class for the TUI. This is just like the CLI's ui_out, - except that it overrides output methods to detect when a source - line is being printed and show the source in the TUI's source - window instead of printing the line in the console window. */ -class tui_ui_out : public cli_ui_out -{ -public: - - explicit tui_ui_out (ui_file *stream); - -protected: - - void do_field_signed (int fldno, int width, ui_align align, const char *fldname, - LONGEST value) override; - void do_field_string (int fldno, int width, ui_align align, const char *fldname, - const char *string, const ui_file_style &style) override; - void do_field_fmt (int fldno, int width, ui_align align, const char *fldname, - const ui_file_style &style, - const char *format, va_list args) override - ATTRIBUTE_PRINTF (7, 0); - void do_text (const char *string) override; - -private: - - /* These fields are used to make print_source_lines show the source - in the TUI's source window instead of in the console. - M_START_OF_LINE is incremented whenever something is output to - the ui_out. If an integer field named "line" is printed on the - ui_out, and nothing else has been printed yet (both - M_START_OF_LINE and M_LINE are still 0), we assume - print_source_lines is starting to print a source line, and thus - record the line number in M_LINE. Afterwards, when we see a - string field named "fullname" being output, we take the fullname - and the recorded line and show the source line in the TUI's - source window. tui_ui_out::do_text() suppresses text output - until it sees an endline being printed, at which point these - variables are reset back to 0. */ - int m_line = 0; - int m_start_of_line = 0; -}; - -#endif /* TUI_TUI_OUT_H */