Remove tui_alloc_source_buffer

There is no longer any need for tui_alloc_source_buffer.  The two
callers of this function immediately change the contents of the
window, undoing the work done by this function.

This required adding a move constructor to tui_source_element -- a
mildly surprising find, but without this, resizing the vector will
cause crashes.  This issue was masked earlier because
tui_alloc_source_buffer handled this.

Note that a patch for this bug was submitted here:

    https://sourceware.org/ml/gdb-patches/2019-08/msg00094.html

That patch is better, IMO, but the author as yet hasn't responded to a
request for a ChangeLog entry.

gdb/ChangeLog
2019-08-15  Tom Tromey  <tom@tromey.com>

	* tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare.
	(struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move
	constructor.
	* tui/tui-winsource.c (tui_alloc_source_buffer): Remove.
	* tui/tui-source.c (tui_set_source_content): Update.
	* tui/tui-disasm.c (tui_set_disassem_content): Update.
This commit is contained in:
Tom Tromey 2019-07-06 15:52:13 -06:00
parent c9033fe839
commit 002f15c277
5 changed files with 20 additions and 26 deletions

View File

@ -1,3 +1,12 @@
2019-08-15 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.h (tui_alloc_source_buffer): Don't declare.
(struct tui_source_element): Add DISABLE_COPY_AND_ASSIGN, and move
constructor.
* tui/tui-winsource.c (tui_alloc_source_buffer): Remove.
* tui/tui-source.c (tui_set_source_content): Update.
* tui/tui-disasm.c (tui_set_disassem_content): Update.
2019-08-15 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.h (tui_line_is_displayed): Don't declare.

View File

@ -179,8 +179,6 @@ tui_set_disassem_content (tui_source_window_base *win_info,
if (pc == 0)
return TUI_FAILURE;
tui_alloc_source_buffer (win_info);
win_info->gdbarch = gdbarch;
win_info->start_line_or_addr.loa = LOA_ADDRESS;
win_info->start_line_or_addr.u.addr = pc;

View File

@ -135,7 +135,6 @@ tui_set_source_content (tui_source_window_base *win_info,
int line_width, nlines;
ret = TUI_SUCCESS;
tui_alloc_source_buffer (win_info);
line_width = win_info->width - 1;
/* Take hilite (window border) into account, when
calculating the number of lines. */

View File

@ -620,23 +620,3 @@ tui_source_window_base::update_exec_info ()
}
execution_info->refresh_window ();
}
void
tui_alloc_source_buffer (struct tui_source_window_base *win_info)
{
int i, line_width, max_lines;
/* The window width/height includes the highlight box. Determine actual
content dimensions, including string null-terminators. */
max_lines = win_info->height - 2;
line_width = win_info->width - 2 + 1;
/* Allocate the buffer for the source lines. */
win_info->content.resize (max_lines);
for (i = 0; i < max_lines; i++)
{
if (win_info->content[i].line == nullptr)
win_info->content[i].line = (char *) xmalloc (line_width);
}
}

View File

@ -69,6 +69,17 @@ struct tui_source_element
xfree (line);
}
DISABLE_COPY_AND_ASSIGN (tui_source_element);
tui_source_element (tui_source_element &&other)
: line (other.line),
line_or_addr (other.line_or_addr),
is_exec_point (other.is_exec_point),
break_mode (other.break_mode)
{
other.line = nullptr;
}
char *line = nullptr;
struct tui_line_or_address line_or_addr;
bool is_exec_point = false;
@ -173,9 +184,6 @@ extern void tui_update_source_windows_with_line (struct symtab *,
extern void tui_clear_source_content (struct tui_source_window_base *);
extern void tui_erase_source_content (struct tui_source_window_base *);
extern void tui_alloc_source_buffer (struct tui_source_window_base *);
/* Constant definitions. */
#define SCROLL_THRESHOLD 2 /* Threshold for lazy scroll. */