[24/61] Introduce tui_source_window_base::location_matches_p method
Commit Message
This introduces the location_matches_p method, removing a spot that
explicitly examines a window's type.
2019-07-04 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.
---
gdb/ChangeLog | 13 +++++++++++++
gdb/tui/tui-data.h | 6 ++++++
gdb/tui/tui-disasm.c | 7 +++++++
gdb/tui/tui-source.c | 10 ++++++++++
gdb/tui/tui-winsource.c | 11 +----------
5 files changed, 37 insertions(+), 10 deletions(-)
Comments
On 7/4/19 6:02 PM, Tom Tromey wrote:
> --- a/gdb/tui/tui-data.h
> +++ b/gdb/tui/tui-data.h
> @@ -404,6 +404,8 @@ public:
>
> void update_tab_width () override;
>
> + virtual bool location_matches_p (struct bp_location *loc, int line_no) = 0;
Maybe add an intro comment?
Thanks,
Pedro Alves
@@ -404,6 +404,8 @@ public:
void update_tab_width () override;
+ 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 +437,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 +467,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;
@@ -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);
+}
@@ -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);
+}
@@ -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;