public inbox for gdb-cvs@sourceware.org
help / color / mirror / Atom feed
* [binutils-gdb] [gdb/tui] Don't show line number for lines not in source file
@ 2023-05-16 15:40 Tom de Vries
0 siblings, 0 replies; only message in thread
From: Tom de Vries @ 2023-05-16 15:40 UTC (permalink / raw)
To: gdb-cvs
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=68b25a74aa492fa84bc530b471036d762cf772bf
commit 68b25a74aa492fa84bc530b471036d762cf772bf
Author: Tom de Vries <tdevries@suse.de>
Date: Tue May 16 17:40:32 2023 +0200
[gdb/tui] Don't show line number for lines not in source file
Currently, for a source file containing only 5 lines, we also show line
numbers 6 and 7 if they're in scope of the source window:
...
0 +-compact-source.c----------------+
1 |___3_{ |
2 |___4_ return 0; |
3 |___5_} |
4 |___6_ |
5 |___7_ |
6 +---------------------------------+
...
Fix this by not showing line numbers not in a source file, such that we have instead:
...
0 +-compact-source.c----------------+
1 |___3_{ |
2 |___4_ return 0; |
3 |___5_} |
4 | |
5 | |
6 +---------------------------------+
...
Tested on x86_64-linux.
Suggested-By: Simon Marchi <simon.marchi@efficios.com>
Approved-By: Tom Tromey <tom@tromey.com>
Diff:
---
gdb/testsuite/gdb.tui/compact-source.exp | 28 ++++++++++++----------------
gdb/testsuite/lib/tuiterm.exp | 8 ++++++++
gdb/tui/tui-source.c | 24 +++++++++++++++++++-----
3 files changed, 39 insertions(+), 21 deletions(-)
diff --git a/gdb/testsuite/gdb.tui/compact-source.exp b/gdb/testsuite/gdb.tui/compact-source.exp
index f972d961d72..e9703b3c3d9 100644
--- a/gdb/testsuite/gdb.tui/compact-source.exp
+++ b/gdb/testsuite/gdb.tui/compact-source.exp
@@ -53,22 +53,18 @@ if {![Term::enter_tui]} {
set re_border "\\|"
-foreach_with_prefix src_window_size {7 8} {
- set src_window_lines [expr $src_window_size - 2]
- set max_line_nr_in_source_file [llength $src_list]
- set max_line_nr_in_source_window \
- [expr $max_line_nr_in_source_file + $src_window_lines - 1]
+set max_line_nr_in_source_file [llength $src_list]
+# Ensure there are more lines in the window than in the source file.
+set src_window_lines [expr $max_line_nr_in_source_file + 2]
+# Account for border size.
+set src_window_size [expr $src_window_lines + 2]
+Term::command "wh src $src_window_size"
- Term::command "wh src $src_window_size"
+set re_left_margin "___4_"
- if { $max_line_nr_in_source_window == 9 } {
- set re_left_margin "___4_"
- } elseif { $max_line_nr_in_source_window == 10 } {
- set re_left_margin "___04_"
- } else {
- error "unhandled max_line_nr_in_source_window"
- }
+Term::check_contents "compact source format" \
+ "$re_border$re_left_margin$re_line_four *$re_border"
- Term::check_contents "compact source format" \
- "$re_border$re_left_margin$re_line_four *$re_border"
-}
+set re_left_margin "___0*[expr $max_line_nr_in_source_file + 1]_"
+Term::check_contents_not "no surplus line number" \
+ "$re_border$re_left_margin *$re_border"
diff --git a/gdb/testsuite/lib/tuiterm.exp b/gdb/testsuite/lib/tuiterm.exp
index 5e4235da942..195f14666f4 100644
--- a/gdb/testsuite/lib/tuiterm.exp
+++ b/gdb/testsuite/lib/tuiterm.exp
@@ -1004,6 +1004,14 @@ namespace eval Term {
gdb_assert {[regexp -- $regexp $contents]} $test_name
}
+ # As check_contents, but check that the text contents of the terminal does
+ # not match the regular expression.
+ proc check_contents_not {test_name regexp} {
+ dump_screen
+ set contents [get_all_lines]
+ gdb_assert {![regexp -- $regexp $contents]} $test_name
+ }
+
# Get the region of the screen described by X, Y, WIDTH,
# and HEIGHT, and separate the lines using SEP.
proc get_region { x y width height sep } {
diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index 9d0376000de..55cde258882 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -80,7 +80,7 @@ tui_source_window::set_contents (struct gdbarch *arch,
/* Solaris 11+gcc 5.5 has ambiguous overloads of log10, so we
cast to double to get the right one. */
int lines_in_file = offsets->size ();
- int max_line_nr = lines_in_file + nlines - 1;
+ int max_line_nr = lines_in_file;
int digits_needed = 1 + (int)log10 ((double) max_line_nr);
int trailing_space = 1;
m_digits = digits_needed + trailing_space;
@@ -100,6 +100,11 @@ tui_source_window::set_contents (struct gdbarch *arch,
text = tui_copy_source_line (&iter, &line_len);
m_max_length = std::max (m_max_length, line_len);
}
+ else
+ {
+ /* Line not in source file. */
+ cur_line_no = -1;
+ }
/* Set whether element is the execution point
and whether there is a break point on it. */
@@ -233,11 +238,20 @@ tui_source_window::display_start_addr (struct gdbarch **gdbarch_p,
void
tui_source_window::show_line_number (int offset) const
{
- int lineno = m_content[0].line_or_addr.u.line_no + offset;
+ int lineno = m_content[offset].line_or_addr.u.line_no;
char text[20];
char space = tui_left_margin_verbose ? '_' : ' ';
- xsnprintf (text, sizeof (text),
- tui_left_margin_verbose ? "%0*d%c" : "%*d%c", m_digits - 1,
- lineno, space);
+ if (lineno == -1)
+ {
+ /* Line not in source file, don't show line number. */
+ for (int i = 0; i <= m_digits; ++i)
+ text[i] = (i == m_digits) ? '\0' : space;
+ }
+ else
+ {
+ xsnprintf (text, sizeof (text),
+ tui_left_margin_verbose ? "%0*d%c" : "%*d%c", m_digits - 1,
+ lineno, space);
+ }
waddstr (handle.get (), text);
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-05-16 15:40 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-05-16 15:40 [binutils-gdb] [gdb/tui] Don't show line number for lines not in source file Tom de Vries
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).