From c2cd8994669f63eb415522352a5d5006d0fbfb48 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Fri, 28 Jun 2019 15:19:10 -0600 Subject: [PATCH] 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 * 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) : New method. (struct tui_source_window, struct tui_disasm_window) : Likewise. --- gdb/ChangeLog | 13 +++++++++++++ gdb/tui/tui-data.h | 8 ++++++++ gdb/tui/tui-disasm.c | 7 +++++++ gdb/tui/tui-source.c | 10 ++++++++++ gdb/tui/tui-winsource.c | 11 +---------- 5 files changed, 39 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 9844ec1c1a..496819da47 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,16 @@ +2019-07-17 Tom Tromey + + * 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) + : New method. + (struct tui_source_window, struct tui_disasm_window) + : Likewise. + 2019-07-17 Tom Tromey * tui/tui-win.c (tui_set_win_height_command): Rename from diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index be951b4c84..472fa2ed7f 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -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; diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c index b22368eccf..af1a7406be 100644 --- a/gdb/tui/tui-disasm.c +++ b/gdb/tui/tui-disasm.c @@ -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); +} diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index 34cb38b31a..2ca21dcc84 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -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); +} diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 22cd54ee9b..03dd1b4af8 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -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; -- 2.34.1