diff options
author | Tom Tromey <tom@tromey.com> | 2021-12-30 10:23:18 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2022-01-26 15:19:13 -0700 |
commit | 7016a382b0dc48001cb5c36e56b42fc41b1303a8 (patch) | |
tree | 5190cb314252a75138fabb04aa925355e8f9f0a4 | |
parent | 6c92c339539ec87dc12783e9c8f1688a4a370c03 (diff) | |
download | gdb-7016a382b0dc48001cb5c36e56b42fc41b1303a8.zip gdb-7016a382b0dc48001cb5c36e56b42fc41b1303a8.tar.gz gdb-7016a382b0dc48001cb5c36e56b42fc41b1303a8.tar.bz2 |
Add ui_file::wrap_here
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.
-rw-r--r-- | gdb/cli-out.c | 2 | ||||
-rw-r--r-- | gdb/mi/mi-out.c | 2 | ||||
-rw-r--r-- | gdb/ui-file.c | 6 | ||||
-rw-r--r-- | gdb/ui-file.h | 17 |
4 files changed, 25 insertions, 2 deletions
diff --git a/gdb/cli-out.c b/gdb/cli-out.c index 925ba8a..b2daad1 100644 --- a/gdb/cli-out.c +++ b/gdb/cli-out.c @@ -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 diff --git a/gdb/mi/mi-out.c b/gdb/mi/mi-out.c index 72ae36d..53f7206 100644 --- a/gdb/mi/mi-out.c +++ b/gdb/mi/mi-out.c @@ -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 diff --git a/gdb/ui-file.c b/gdb/ui-file.c index d30ec04..57fc05a 100644 --- a/gdb/ui-file.c +++ b/gdb/ui-file.c @@ -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); +} + void diff --git a/gdb/ui-file.h b/gdb/ui-file.h index 7c7b00d..3df9f93 100644 --- a/gdb/ui-file.h +++ b/gdb/ui-file.h @@ -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 |