Introduce tui_source_window_base::location_matches_p method

This introduces the location_matches_p method, removing a spot that
explicitly examines a window's type.

gdb/ChangeLog
2019-07-17  Tom Tromey  <tom@tromey.com>

	* tui/tui-winsource.c (tui_update_breakpoint_info): Use
	location_matches_p.
	* tui/tui-source.c (tui_source_window::location_matches_p): New
	method.
	* tui/tui-disasm.c (tui_disasm_window::location_matches_p): New
	method.
	* tui/tui-data.h (struct tui_source_window_base)
	<location_matches_p>: New method.
	(struct tui_source_window, struct tui_disasm_window)
	<location_matches_p>: Likewise.
This commit is contained in:
Tom Tromey 2019-06-28 15:19:10 -06:00
parent 4dde7b34f4
commit c2cd899466
5 changed files with 39 additions and 10 deletions

View File

@ -1,3 +1,16 @@
2019-07-17 Tom Tromey <tom@tromey.com>
* tui/tui-winsource.c (tui_update_breakpoint_info): Use
location_matches_p.
* tui/tui-source.c (tui_source_window::location_matches_p): New
method.
* tui/tui-disasm.c (tui_disasm_window::location_matches_p): New
method.
* tui/tui-data.h (struct tui_source_window_base)
<location_matches_p>: New method.
(struct tui_source_window, struct tui_disasm_window)
<location_matches_p>: Likewise.
2019-07-17 Tom Tromey <tom@tromey.com>
* tui/tui-win.c (tui_set_win_height_command): Rename from

View File

@ -404,6 +404,10 @@ public:
void update_tab_width () override;
/* Return true if the location LOC corresponds to the line number
LINE_NO in this source window; false otherwise. */
virtual bool location_matches_p (struct bp_location *loc, int line_no) = 0;
/* Does the locator belong to this window? */
bool m_has_locator = false;
/* Execution information window. */
@ -435,6 +439,8 @@ struct tui_source_window : public tui_source_window_base
return SRC_NAME;
}
bool location_matches_p (struct bp_location *loc, int line_no) override;
protected:
void do_scroll_vertical (int num_to_scroll) override;
@ -463,6 +469,8 @@ struct tui_disasm_window : public tui_source_window_base
return DISASSEM_NAME;
}
bool location_matches_p (struct bp_location *loc, int line_no) override;
protected:
void do_scroll_vertical (int num_to_scroll) override;

View File

@ -375,3 +375,10 @@ tui_disasm_window::do_scroll_vertical (int num_to_scroll)
NULL, val, FALSE);
}
}
bool
tui_disasm_window::location_matches_p (struct bp_location *loc, int line_no)
{
return (content[line_no].line_or_addr.loa == LOA_ADDRESS
&& content[line_no].line_or_addr.u.addr == loc->address);
}

View File

@ -345,3 +345,13 @@ tui_source_window::style_changed ()
if (tui_active && is_visible)
refill ();
}
bool
tui_source_window::location_matches_p (struct bp_location *loc, int line_no)
{
return (content[line_no].line_or_addr.loa == LOA_LINE
&& content[line_no].line_or_addr.u.line_no == loc->line_number
&& loc->symtab != NULL
&& filename_cmp (fullname,
symtab_to_fullname (loc->symtab)) == 0);
}

View File

@ -410,7 +410,6 @@ tui_update_breakpoint_info (struct tui_source_window_base *win,
{
int i;
bool need_refresh = false;
tui_source_window_base *src = (tui_source_window_base *) win;
for (i = 0; i < win->content.size (); i++)
{
@ -440,15 +439,7 @@ tui_update_breakpoint_info (struct tui_source_window_base *win,
for (loc = bp->loc; loc != NULL; loc = loc->next)
{
if ((win == TUI_SRC_WIN
&& loc->symtab != NULL
&& filename_cmp (src->fullname,
symtab_to_fullname (loc->symtab)) == 0
&& line->line_or_addr.loa == LOA_LINE
&& loc->line_number == line->line_or_addr.u.line_no)
|| (win == TUI_DISASM_WIN
&& line->line_or_addr.loa == LOA_ADDRESS
&& loc->address == line->line_or_addr.u.addr))
if (win->location_matches_p (loc, i))
{
if (bp->enable_state == bp_disabled)
mode |= TUI_BP_DISABLED;