Add comments describing tui_ui_out and its fields, cleanup a bit
authorPedro Alves <palves@redhat.com>
Tue, 19 Mar 2019 18:08:27 +0000 (18:08 +0000)
committerPedro Alves <palves@redhat.com>
Tue, 19 Mar 2019 18:08:27 +0000 (18:08 +0000)
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-19  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/ChangeLog
gdb/tui/tui-out.c
gdb/tui/tui-out.h

index 7b896ed2c0b1516fc224787f66cf278cbf4dd09d..c170fe480bfdbf8e7beb5220c697f4cd945fee75 100644 (file)
@@ -1,3 +1,13 @@
+2019-03-19  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.
+
 2019-03-18  Alan Hayward  <alan.hayward@arm.com>
 
        * arm-linux-nat.c (arm_linux_insert_hw_breakpoint1): Fix
index dd37736c4a70569a02b222d9db29410ccc0ffe7f..5fabff2cf1cbaa5ad33f390a1262f96e5aa3ca4b 100644 (file)
@@ -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;
-        }
+       {
+         /* 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)
 {
 }
 
index 10311c925566b5177588e7e1ad0dd43b0aa2956b..edf0b912befe0bf48da0dfa7027d13bc0fe87f4f 100644 (file)
 
 #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:
@@ -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);
This page took 0.028332 seconds and 4 git commands to generate.