Add ui_file::wrap_here
authorTom Tromey <tom@tromey.com>
Thu, 30 Dec 2021 17:23:18 +0000 (10:23 -0700)
committerTom Tromey <tom@tromey.com>
Wed, 26 Jan 2022 22:19:13 +0000 (15:19 -0700)
Right now, wrap_here is a global function.  In the long run, we'd like
output streams to be relatively self-contained objects, and having a
global function like this is counter to that goal.  Also, existing
code freely mixes writes to some parameterized stream with calls to
wrap_here -- but wrap_here only really affects gdb_stdout, so this is
also incoherent.

This step is a patch toward making wrap_here more sane.  It adds a
wrap_here method to ui_file and changes ui_out implementations to use
it.

gdb/cli-out.c
gdb/mi/mi-out.c
gdb/ui-file.c
gdb/ui-file.h

index 925ba8a73690baf49e7b49b427926ee85e3bd39f..b2daad11a51bda0d56f22508c28a5000926ceacc 100644 (file)
@@ -243,7 +243,7 @@ cli_ui_out::do_wrap_hint (int indent)
   if (m_suppress_output)
     return;
 
-  wrap_here (indent);
+  m_streams.back ()->wrap_here (indent);
 }
 
 void
index 72ae36dd4183fe348f2dd7f7918b8bc8aa062d34..53f7206addd1ca292e3fad1741effc50211c4429 100644 (file)
@@ -174,7 +174,7 @@ mi_ui_out::do_message (const ui_file_style &style,
 void
 mi_ui_out::do_wrap_hint (int indent)
 {
-  wrap_here (indent);
+  m_streams.back ()->wrap_here (indent);
 }
 
 void
index d30ec04a68fc03f8811d4831e2770a5fd2ce3b3e..57fc05a6c848f59e338dea223348c1a44f0f6ba0 100644 (file)
@@ -131,6 +131,12 @@ ui_file::printchar (int c, int quoter, bool async_safe)
     this->write (buf, out);
 }
 
+void
+ui_file::wrap_here (int indent)
+{
+  ::wrap_here (indent);
+}
+
 \f
 
 void
index 7c7b00d91c6b5a5c33a27c709edbc4a61c5aaf2c..3df9f936da582fc8a277f485bfac2ea1f8821d3a 100644 (file)
@@ -107,6 +107,23 @@ public:
     return false;
   }
 
+  /* Indicate that if the next sequence of characters overflows the
+     line, a newline should be inserted here rather than when it hits
+     the end.  If INDENT is non-zero, it is a number of spaces to be
+     printed to indent the wrapped part on the next line.
+
+     If the line is already overfull, we immediately print a newline and
+     the indentation, and disable further wrapping.
+
+     If we don't know the width of lines, but we know the page height,
+     we must not wrap words, but should still keep track of newlines
+     that were explicitly printed.
+
+     This routine is guaranteed to force out any output which has been
+     squirreled away in the wrap_buffer, so wrap_here (0) can be
+     used to force out output from the wrap_buffer.  */
+  void wrap_here (int indent);
+
 private:
 
   /* Helper function for putstr and putstrn.  Print the character C on