This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 24/66] 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-23  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.
---
 gdb/ChangeLog           | 24 ++++++++++++++++++++++++
 gdb/tui/tui-data.c      | 13 ++++++-------
 gdb/tui/tui-data.h      | 13 +++++++++----
 gdb/tui/tui-hooks.c     |  2 +-
 gdb/tui/tui-layout.c    |  3 ++-
 gdb/tui/tui-stack.c     |  8 ++++----
 gdb/tui/tui-winsource.c | 31 +++++++++++++------------------
 gdb/tui/tui-winsource.h |  3 ---
 8 files changed, 59 insertions(+), 38 deletions(-)

diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index 89f65bf974f..a48b39eba7e 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -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 struct std::vector<tui_win_info *> source_windows;
+static struct 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.  */
-struct std::vector<tui_win_info *> &
+struct 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);
     }
 }
 
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index e25f8888c92..c41e812c483 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -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 locator belongs 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 struct std::vector<tui_win_info *> &tui_source_windows ();
+extern struct 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 */
diff --git a/gdb/tui/tui-hooks.c b/gdb/tui/tui-hooks.c
index 4a1d79e0ad0..7e94a13e901 100644
--- a/gdb/tui/tui-hooks.c
+++ b/gdb/tui/tui-hooks.c
@@ -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 ();
     }
 }
 
diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c
index de78c6c0ac8..9b2bd0b7b57 100644
--- a/gdb/tui/tui-layout.c
+++ b/gdb/tui/tui-layout.c
@@ -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);
 }
 
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index d09acd28585..125a5b7a8e3 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -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);
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index fa9e544f206..5946db75aaf 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -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))
         {
diff --git a/gdb/tui/tui-winsource.h b/gdb/tui/tui-winsource.h
index 98ce75fb620..ada3964ad1a 100644
--- a/gdb/tui/tui-winsource.h
+++ b/gdb/tui/tui-winsource.h
@@ -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 *, 
-- 
2.17.2


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]