Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Pedro Alves <palves@redhat.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: tromey@adacore.com, gdb-patches@sourceware.org
Subject: Re: [PATCH v2] Fix first time you type UP or DOWN in TUI's command window (Re: [RFC 8.3 0/3] Some style fixes)
Date: Mon, 18 Mar 2019 20:24:00 -0000	[thread overview]
Message-ID: <04e92055-4b62-5691-0425-d3110a862b31@redhat.com> (raw)
In-Reply-To: <83tvg4ywq2.fsf@gnu.org>

On 03/15/2019 03:37 PM, Eli Zaretskii wrote:
>> Cc: gdb-patches@sourceware.org
>> From: Pedro Alves <palves@redhat.com>
>> Date: Fri, 15 Mar 2019 14:15:23 +0000
>>
>> Bingo.
>>
>> So I think this is the right fix:
>>
>> >From 781ed3b6d82a4fb54f7bfe59185f0e6e9efd6b59 Mon Sep 17 00:00:00 2001
>> From: Pedro Alves <palves@redhat.com>
>> Date: Fri, 15 Mar 2019 13:05:26 +0000
>> Subject: [PATCH] Fix first time you type UP or DOWN in TUI's command window
>>
>> The first time you type UP or DOWN arrow in the command window, GDB
>> should scroll the source window, but instead it displays the line
>> number and the file name in the command window(?).
>>
>> What happens there is that the first time we call
>> tui_ui_out::do_field_int, it doesn't initialize m_line, because
>> m_start_of_line is -1, as set by the constructor; and then the
>> following call to tui_ui_out::do_field_string falls back to
>> cli_ui_out::do_field_string because m_line is zero.
>>
>> The problem is caused by a typo in the C++ification of tui_ui_out,
>> commit 112e8700a6f, where m_line and m_start_of_line's initial values
>> were swapped from what they used to be:
> 
> Thanks, this sound right to me.  

I've merged the patch to master and the 8.3 branch.

> Still, I'd welcome some comments in
> the header which explain the semantics of non-positive values of these
> members, and for m_start_of_line, also its role in general.  Fixing
> this bug could have been much easier if that information was
> available to begin with.
For sure.  This code predates me by a long shot.  I wouldn't be
surprised if it was already in the original TUI dump from HP.

Anyway, I've stared at this for a while, and I _think_ this captures
the idea.  WDYT?

From 8e37e7076f6ddca767db35b66284268935bcc186 Mon Sep 17 00:00:00 2001
From: Pedro Alves <palves@redhat.com>
Date: Mon, 18 Mar 2019 19:10:42 +0000
Subject: [PATCH] Add comments describing tui_ui_out and its fields, cleanup a
 bit

This commit add comments describing tui_ui_out and its fields, and
cleans up the code a little bit.

Also switch to using in-class initialization so that the initial
values can be seen alongside the comments.

I see no reason for initializing m_line as -1 instead of 0, since all
the checks in the .c file are of the form "> 0".  AFAICS there's no
practical difference between -1 and 0.  So it seems simpler to
initialize it as 0.

There's a bit of redundancy in tui_ui_out::do_field_string, which is
fixed by this commit.

gdb/ChangeLog:
2019-03-18  Pedro Alves  <palves@redhat.com>

	* tui/tui-out.c (tui_ui_out::do_field_string): Simplify.
	(tui_ui_out::do_text): Add comments.  Reset M_LINE to 0 instead of
	to -1.  Fix TABs vs spaces.
	(tui_ui_out::tui_ui_out): Don't initialize fields here.
	* tui/tui-out.h (tui_ui_out) Add intro comments.
	<m_line, m_start_of_line>: In-class initialize, and add describing
	comment.
---
 gdb/tui/tui-out.c | 27 +++++++++++++--------------
 gdb/tui/tui-out.h | 21 +++++++++++++++++++--
 2 files changed, 32 insertions(+), 16 deletions(-)

diff --git a/gdb/tui/tui-out.c b/gdb/tui/tui-out.c
index dd37736c4a..64f77077c8 100644
--- a/gdb/tui/tui-out.c
+++ b/gdb/tui/tui-out.c
@@ -57,17 +57,13 @@ tui_ui_out::do_field_string (int fldno, int width, ui_align align,
   if (suppress_output ())
     return;
 
+  m_start_of_line++;
+
   if (fldname && m_line > 0 && strcmp (fldname, "fullname") == 0)
     {
-      m_start_of_line++;
-      if (m_line > 0)
-        {
-          tui_show_source (string, m_line);
-        }
+      tui_show_source (string, m_line);
       return;
     }
-  
-  m_start_of_line++;
 
   cli_ui_out::do_field_string (fldno, width, align, fldname, string, style);
 }
@@ -94,11 +90,16 @@ tui_ui_out::do_text (const char *string)
   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)
-        {
-          m_line = -1;
-          m_start_of_line = 0;
-        }
+	{
+	  /* If 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'))
@@ -108,9 +109,7 @@ tui_ui_out::do_text (const char *string)
 }
 
 tui_ui_out::tui_ui_out (ui_file *stream)
-: cli_ui_out (stream, 0),
-  m_line (-1),
-  m_start_of_line (0)
+  : cli_ui_out (stream, 0)
 {
 }
 
diff --git a/gdb/tui/tui-out.h b/gdb/tui/tui-out.h
index 10311c9255..b0d8b8d898 100644
--- a/gdb/tui/tui-out.h
+++ b/gdb/tui/tui-out.h
@@ -20,6 +20,10 @@
 
 #include "cli-out.h"
 
+/* An 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:
@@ -39,8 +43,21 @@ protected:
 
 private:
 
-  int m_line;
-  int m_start_of_line;
+  /* 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;
 };
 
 extern tui_ui_out *tui_out_new (struct ui_file *stream);
-- 
2.14.4


  reply	other threads:[~2019-03-18 20:24 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-08 21:04 [RFC 8.3 0/3] Some style fixes Tom Tromey
2019-03-08 21:04 ` [RFC 8.3 3/3] Avoid a crash in source_cache::extract_lines Tom Tromey
2019-03-13 17:07   ` Pedro Alves
2019-03-13 17:20     ` Tom Tromey
2019-03-13 18:06       ` Pedro Alves
2019-03-14 11:37         ` Tom Tromey
2019-03-08 21:04 ` [RFC 8.3 2/3] Add the "set style source" command Tom Tromey
2019-03-09  6:17   ` Eli Zaretskii
2019-03-11 20:13     ` Tom Tromey
2019-03-09 11:18   ` Philippe Waroquiers
2019-03-11 20:13     ` Tom Tromey
2019-03-11 20:25       ` Eli Zaretskii
2019-03-08 21:04 ` [RFC 8.3 1/3] Make TUI react to "set style enabled" Tom Tromey
2019-03-13 19:28   ` Pedro Alves
2019-03-14 11:43     ` Tom Tromey
2019-03-09  6:17 ` [RFC 8.3 0/3] Some style fixes Eli Zaretskii
2019-03-10 13:14   ` Eli Zaretskii
2019-03-11 20:15     ` Tom Tromey
2019-03-12 16:44       ` Eli Zaretskii
2019-03-13 15:50         ` Eli Zaretskii
2019-03-14 12:21           ` Tom Tromey
2019-03-14 14:40             ` Pedro Alves
2019-03-14 15:36               ` Eli Zaretskii
2019-03-15 12:34         ` Fix pressing down in the TUI (Re: [RFC 8.3 0/3] Some style fixes) Pedro Alves
2019-03-15 13:37           ` Eli Zaretskii
2019-03-15 13:56             ` Pedro Alves
2019-03-16 17:59               ` Eli Zaretskii
2019-03-24 15:35                 ` Simon Marchi
2019-03-25  1:36                   ` Simon Marchi
2019-03-25 15:14                     ` Tom Tromey
2019-03-26  0:52                       ` Simon Marchi
2019-03-15 15:33           ` Tom Tromey
2019-03-15 12:43         ` Avoid overwriting the TUI source window frame " Pedro Alves
2019-03-16 12:17           ` Eli Zaretskii
2019-03-15 14:15         ` [PATCH v2] Fix first time you type UP or DOWN in TUI's command window " Pedro Alves
2019-03-15 15:38           ` Eli Zaretskii
2019-03-18 20:24             ` Pedro Alves [this message]
2019-03-19  6:09               ` Eli Zaretskii
2019-03-19 18:14                 ` Pedro Alves
2019-03-09 14:28 ` [RFC 8.3 0/3] Some style fixes Hannes Domani via gdb-patches
2019-03-12 16:48   ` Tom Tromey
2019-03-12 17:09     ` Hannes Domani via gdb-patches
2019-03-13 15:44       ` Eli Zaretskii
2019-03-14 20:25         ` "next" into line longer than the source window-width (Re: [RFC 8.3 0/3] Some style fixes) Pedro Alves
2019-03-17 16:05           ` Eli Zaretskii
2019-03-14 20:58         ` [PATCH] Fix scrolling right in the TUI " Pedro Alves
2019-03-15 12:34           ` Hannes Domani via gdb-patches
2019-03-15 21:51           ` Tom Tromey
2019-03-18 14:41             ` Pedro Alves
2019-03-17 16:06           ` Eli Zaretskii
2019-03-12 17:29     ` [RFC 8.3 0/3] Some style fixes Eli Zaretskii
2019-03-12 17:32       ` Eli Zaretskii
2019-03-12 17:29     ` Eli Zaretskii
2019-03-26 20:52     ` Pedro Franco de Carvalho
2019-03-14 11:44 ` Tom Tromey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=04e92055-4b62-5691-0425-d3110a862b31@redhat.com \
    --to=palves@redhat.com \
    --cc=eliz@gnu.org \
    --cc=gdb-patches@sourceware.org \
    --cc=tromey@adacore.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox