Introduce two TUI source window methods

This adds two methods to the TUI source window.  These are just
renamings of existing functions.  It also changes the source window
list to have a more precise type, letting the code be more type-safe.
This will be useful again later.

gdb/ChangeLog
2019-06-25  Tom Tromey  <tom@tromey.com>

	* tui/tui-winsource.h (tui_refill_source_window)
	(tui_set_is_exec_point_at): Don't declare.
	* tui/tui-winsource.c (tui_update_source_windows_with_addr)
	(tui_source_window_base::refill): Rename from
	tui_refill_source_window.
	(tui_source_window_base::do_scroll_horizontal): Update.
	(tui_source_window_base::set_is_exec_point_at): Rename from
	tui_set_is_exec_point_at.
	(tui_update_all_breakpoint_info): Update.
	* tui/tui-stack.c (tui_show_frame_info): Update.
	* tui/tui-layout.c (show_data): Add cast.
	* tui/tui-hooks.c (tui_redisplay_source): Call refill method.
	* tui/tui-data.h (struct tui_source_window_base) <refill,
	set_is_exec_point_at>: New methods.
	(tui_source_windows, tui_add_to_source_windows): Update types.
	(tui_add_to_source_windows): Remove redundant declaration.
	* tui/tui-data.c (source_windows): Store tui_source_window_base.
	(tui_source_windows): Change return type.
	(tui_clear_source_windows_detail): Update.
	(tui_add_to_source_windows): Change type of parameter.
	(tui_free_all_source_wins_content): Update.
This commit is contained in:
Tom Tromey
2019-06-16 14:43:56 -06:00
parent 2042b506c8
commit ad54d15bdb
8 changed files with 59 additions and 38 deletions

View File

@ -1,3 +1,27 @@
2019-06-25 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.h (tui_refill_source_window)
(tui_set_is_exec_point_at): Don't declare.
* tui/tui-winsource.c (tui_update_source_windows_with_addr)
(tui_source_window_base::refill): Rename from
tui_refill_source_window.
(tui_source_window_base::do_scroll_horizontal): Update.
(tui_source_window_base::set_is_exec_point_at): Rename from
tui_set_is_exec_point_at.
(tui_update_all_breakpoint_info): Update.
* tui/tui-stack.c (tui_show_frame_info): Update.
* tui/tui-layout.c (show_data): Add cast.
* tui/tui-hooks.c (tui_redisplay_source): Call refill method.
* tui/tui-data.h (struct tui_source_window_base) <refill,
set_is_exec_point_at>: New methods.
(tui_source_windows, tui_add_to_source_windows): Update types.
(tui_add_to_source_windows): Remove redundant declaration.
* tui/tui-data.c (source_windows): Store tui_source_window_base.
(tui_source_windows): Change return type.
(tui_clear_source_windows_detail): Update.
(tui_add_to_source_windows): Change type of parameter.
(tui_free_all_source_wins_content): Update.
2019-06-25 Tom Tromey <tom@tromey.com>
* tui/tui-wingeneral.c (tui_win_info::refresh)

View File

@ -38,7 +38,7 @@ static enum tui_layout_type current_layout = UNDEFINED_LAYOUT;
static int term_height, term_width;
static struct tui_gen_win_info _locator;
static struct tui_gen_win_info exec_info[2];
static std::vector<tui_win_info *> source_windows;
static std::vector<tui_source_window_base *> source_windows;
static struct tui_win_info *win_with_focus = NULL;
static struct tui_layout_def layout_def = {
SRC_WIN, /* DISPLAY_MODE */
@ -124,7 +124,7 @@ tui_set_win_with_focus (struct tui_win_info *win_info)
/* Accessor for the current source window. Usually there is only one
source window (either source or disassembly), but both can be
displayed at the same time. */
std::vector<tui_win_info *> &
std::vector<tui_source_window_base *> &
tui_source_windows ()
{
return source_windows;
@ -145,7 +145,7 @@ tui_clear_source_windows ()
void
tui_clear_source_windows_detail ()
{
for (tui_win_info *win : tui_source_windows ())
for (tui_source_window_base *win : tui_source_windows ())
win->clear_detail ();
}
@ -154,7 +154,7 @@ tui_clear_source_windows_detail ()
one source window (either source or disassembly), but both can be
displayed at the same time. */
void
tui_add_to_source_windows (struct tui_win_info *win_info)
tui_add_to_source_windows (struct tui_source_window_base *win_info)
{
if (source_windows.size () < 2)
source_windows.push_back (win_info);
@ -620,11 +620,10 @@ tui_win_info::~tui_win_info ()
void
tui_free_all_source_wins_content ()
{
for (tui_win_info *win_info : tui_source_windows ())
for (tui_source_window_base *win_info : tui_source_windows ())
{
tui_free_win_content (&(win_info->generic));
tui_source_window_base *base = (tui_source_window_base *) win_info;
tui_free_win_content (base->execution_info);
tui_free_win_content (win_info->execution_info);
}
}

View File

@ -304,6 +304,13 @@ public:
void make_visible (bool visible) override;
void refresh () override;
/* Refill the source window's source cache and update it. If this
is a disassembly window, then just update it. */
void refill ();
/* Set the location of the execution point. */
void set_is_exec_point_at (struct tui_line_or_address l);
/* Does the locator belong to this window? */
bool m_has_locator = false;
/* Execution information window. */
@ -451,10 +458,10 @@ extern void tui_set_term_width_to (int);
extern struct tui_gen_win_info *tui_locator_win_info_ptr (void);
extern struct tui_gen_win_info *tui_source_exec_info_win_ptr (void);
extern struct tui_gen_win_info *tui_disassem_exec_info_win_ptr (void);
extern std::vector<tui_win_info *> &tui_source_windows ();
extern std::vector<tui_source_window_base *> &tui_source_windows ();
extern void tui_clear_source_windows (void);
extern void tui_clear_source_windows_detail (void);
extern void tui_add_to_source_windows (struct tui_win_info *);
extern void tui_add_to_source_windows (struct tui_source_window_base *);
extern struct tui_win_info *tui_win_with_focus (void);
extern void tui_set_win_with_focus (struct tui_win_info *);
extern struct tui_layout_def *tui_layout_def (void);
@ -464,8 +471,6 @@ extern void tui_set_win_resized_to (int);
extern struct tui_win_info *tui_next_win (struct tui_win_info *);
extern struct tui_win_info *tui_prev_win (struct tui_win_info *);
extern void tui_add_to_source_windows (struct tui_win_info *);
extern unsigned int tui_tab_width;
#endif /* TUI_TUI_DATA_H */

View File

@ -212,7 +212,7 @@ tui_redisplay_source ()
if (tui_is_window_visible (SRC_WIN))
{
/* Force redisplay. */
tui_refill_source_window (tui_win_list[SRC_WIN]);
TUI_SRC_WIN->refill ();
}
}

View File

@ -776,7 +776,8 @@ show_data (enum tui_layout_type new_layout)
base->m_has_locator = true;
tui_make_visible (locator);
tui_show_locator_content ();
tui_add_to_source_windows (tui_win_list[win_type]);
tui_add_to_source_windows
((tui_source_window_base *) tui_win_list[win_type]);
tui_set_current_layout_to (new_layout);
}

View File

@ -396,7 +396,7 @@ tui_show_frame_info (struct frame_info *fi)
tui_show_locator_content ();
start_line = 0;
for (struct tui_win_info *win_info : tui_source_windows ())
for (struct tui_source_window_base *win_info : tui_source_windows ())
{
union tui_which_element *item;
@ -436,7 +436,7 @@ tui_show_frame_info (struct frame_info *fi)
else
{
l.u.line_no = item->locator.line_no;
tui_set_is_exec_point_at (l, win_info);
win_info->set_is_exec_point_at (l);
}
}
else
@ -454,7 +454,7 @@ tui_show_frame_info (struct frame_info *fi)
else
{
a.u.addr = item->locator.addr;
tui_set_is_exec_point_at (a, win_info);
win_info->set_is_exec_point_at (a);
}
}
}
@ -472,7 +472,7 @@ tui_show_frame_info (struct frame_info *fi)
return 0;
tui_show_locator_content ();
for (struct tui_win_info *win_info : tui_source_windows ())
for (struct tui_source_window_base *win_info : tui_source_windows ())
{
tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
tui_update_exec_info (win_info);

View File

@ -160,7 +160,7 @@ tui_update_source_windows_with_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
}
else
{
for (struct tui_win_info *win_info : tui_source_windows ())
for (struct tui_source_window_base *win_info : tui_source_windows ())
{
tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
tui_clear_exec_info_content (win_info);
@ -309,15 +309,14 @@ tui_show_source_content (struct tui_win_info *win_info)
win_info->generic.content_in_use = TRUE;
}
/* Refill the source window's source cache and update it. If WIN_INFO
is a disassembly window, then just update it. */
/* See tui-data.h. */
void
tui_refill_source_window (struct tui_win_info *win_info)
tui_source_window_base::refill ()
{
symtab *s = nullptr;
if (win_info->generic.type == SRC_WIN)
if (generic.type == SRC_WIN)
{
symtab_and_line cursal = get_current_source_symtab_and_line ();
s = (cursal.symtab == NULL
@ -325,11 +324,8 @@ tui_refill_source_window (struct tui_win_info *win_info)
: cursal.symtab);
}
tui_source_window_base *base = (tui_source_window_base *) win_info;
tui_update_source_window_as_is (win_info,
base->gdbarch,
s,
win_info->generic.content[0]
tui_update_source_window_as_is (this, gdbarch, s,
generic.content[0]
->which_element.source.line_or_addr,
FALSE);
}
@ -353,7 +349,7 @@ tui_source_window_base::do_scroll_horizontal
offset = 0;
}
horizontal_offset = offset;
tui_refill_source_window (this);
refill ();
}
}
@ -362,15 +358,14 @@ tui_source_window_base::do_scroll_horizontal
line_no. */
void
tui_set_is_exec_point_at (struct tui_line_or_address l,
struct tui_win_info *win_info)
tui_source_window_base::set_is_exec_point_at (struct tui_line_or_address l)
{
int changed = 0;
int i;
tui_win_content content = win_info->generic.content;
tui_win_content content = generic.content;
i = 0;
while (i < win_info->generic.content_size)
while (i < generic.content_size)
{
int new_state;
struct tui_line_or_address content_loa =
@ -389,12 +384,12 @@ tui_set_is_exec_point_at (struct tui_line_or_address l,
{
changed++;
content[i]->which_element.source.is_exec_point = new_state;
tui_show_source_line (win_info, i + 1);
tui_show_source_line (this, i + 1);
}
i++;
}
if (changed)
tui_refill_source_window (win_info);
refill ();
}
/* Update the execution windows to show the active breakpoints.
@ -403,7 +398,7 @@ tui_set_is_exec_point_at (struct tui_line_or_address l,
void
tui_update_all_breakpoint_info ()
{
for (tui_win_info *win : tui_source_windows ())
for (tui_source_window_base *win : tui_source_windows ())
{
if (tui_update_breakpoint_info (win, FALSE))
{

View File

@ -53,15 +53,12 @@ extern void tui_update_source_windows_with_line (struct symtab *,
extern void tui_clear_source_content (struct tui_win_info *, int);
extern void tui_erase_source_content (struct tui_win_info *, int);
extern void tui_show_source_content (struct tui_win_info *);
extern void tui_refill_source_window (struct tui_win_info *);
extern enum tui_status tui_set_exec_info_content (struct tui_win_info *);
extern void tui_show_exec_info_content (struct tui_win_info *);
extern void tui_erase_exec_info_content (struct tui_win_info *);
extern void tui_clear_exec_info_content (struct tui_win_info *);
extern void tui_update_exec_info (struct tui_win_info *);
extern void tui_set_is_exec_point_at (struct tui_line_or_address,
struct tui_win_info *);
extern enum tui_status tui_alloc_source_buffer (struct tui_win_info *);
extern int tui_line_is_displayed (int,
struct tui_win_info *,