[24/61] Introduce tui_source_window_base::location_matches_p method

Message ID 20190704170311.15982-25-tom@tromey.com
State New
Headers show
Series
  • More TUI refactorings
Related show

Commit Message

Tom Tromey July 4, 2019, 5:02 p.m.
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(-)

-- 
2.17.2

Comments

Pedro Alves July 17, 2019, 12:37 p.m. | #1
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

Patch

diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index c456bd7db84..c0f1801ffc1 100644
--- 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;
+
   /* 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;
diff --git a/gdb/tui/tui-disasm.c b/gdb/tui/tui-disasm.c
index b22368eccf7..af1a7406be8 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 34cb38b31af..2ca21dcc845 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 22cd54ee9b8..03dd1b4af81 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;