[08/66] Remove tui_list

Message ID 20190623224329.16060-9-tom@tromey.com
State New
Headers show
Series
  • Clean up the TUI
Related show

Commit Message

Tom Tromey June 23, 2019, 10:42 p.m.
This removes the tui_list type in favor of a std::vector.

gdb/ChangeLog
2019-06-23  Tom Tromey  <tom@tromey.com>

	* tui/tui-winsource.c (tui_display_main)
	(tui_update_source_windows_with_addr)
	(tui_update_all_breakpoint_info): Update.
	* tui/tui-win.c (tui_resize_all, tui_adjust_win_heights)
	(new_height_ok, parse_scrolling_args): Update.
	* tui/tui-stack.c (tui_show_frame_info): Update.
	* tui/tui-data.h (struct tui_list): Remove.
	(tui_source_windows): Return a reference to a std::vector.
	* tui/tui-data.c (source_windows): Now a std::vector.
	(tui_source_windows): Change return type.
	(tui_clear_source_windows): Rewrite.
	(tui_clear_source_windows_detail, tui_add_to_source_windows)
	(tui_free_all_source_wins_content): Rewrite.
---
 gdb/ChangeLog           | 16 ++++++++++++++++
 gdb/tui/tui-data.c      | 42 +++++++++++++++--------------------------
 gdb/tui/tui-data.h      | 10 +---------
 gdb/tui/tui-stack.c     | 10 +++-------
 gdb/tui/tui-win.c       | 14 +++++++-------
 gdb/tui/tui-winsource.c | 19 +++++--------------
 6 files changed, 47 insertions(+), 64 deletions(-)

-- 
2.17.2

Comments

Pedro Alves June 24, 2019, 2:12 p.m. | #1
On 6/23/19 11:42 PM, Tom Tromey wrote:
> -static struct tui_list source_windows = {src_win_list, 0};

> +static struct std::vector<tui_win_info *> source_windows;


I usually prefer to drop "struct", but I can live with it.

However, I have to say that "struct std::vector" looks weird.  :-)

(There are other instances in the patch.)

Thanks,
Pedro Alves
Ruslan Kabatsayev June 24, 2019, 3:11 p.m. | #2
Hello,

On Mon, 24 Jun 2019 at 17:12, Pedro Alves <palves@redhat.com> wrote:
>

> On 6/23/19 11:42 PM, Tom Tromey wrote:

> > -static struct tui_list source_windows = {src_win_list, 0};

> > +static struct std::vector<tui_win_info *> source_windows;

>

> I usually prefer to drop "struct", but I can live with it.

>

> However, I have to say that "struct std::vector" looks weird.  :-)


BTW, if you compile a declaration like "struct
std::vector<tui_win_info*> source_windows;" with clang++ (with -Wall
option), you'll get a warning "struct 'vector' was previously declared
as a class [-Wmismatched-tags]", so it's better to either drop the
"struct" or change it to "class".

>

> (There are other instances in the patch.)

>

> Thanks,

> Pedro Alves


Regards,
Ruslan
Pedro Alves June 24, 2019, 4:05 p.m. | #3
On 6/24/19 4:11 PM, Ruslan Kabatsayev wrote:
> BTW, if you compile a declaration like "struct

> std::vector<tui_win_info*> source_windows;" with clang++ (with -Wall

> option), you'll get a warning "struct 'vector' was previously declared

> as a class [-Wmismatched-tags]", so it's better to either drop the

> "struct" or change it to "class".


GDB actually disables that warning explicitly, with -Wno-mismatched-tags
(gdb/warning.m4).

The mismatch is only important for MS's Visual Studio, since although
the C++ standard says struct and class are the same, IIRC Visual Studio
mangles struct vs class differently.  But, AFAIK, no one ever builds
GDB with Visual Studio.  At least, I've not heard of anyone
attempting it, though I guess it might be possible nowadays, with
Visual Studio offering much better standard C++ compliance than it used to.

Thanks,
Pedro Alves
Tom Tromey June 24, 2019, 8:47 p.m. | #4
>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:


Pedro> On 6/23/19 11:42 PM, Tom Tromey wrote:
>> -static struct tui_list source_windows = {src_win_list, 0};

>> +static struct std::vector<tui_win_info *> source_windows;


Pedro> I usually prefer to drop "struct", but I can live with it.

Pedro> However, I have to say that "struct std::vector" looks weird.  :-)

Pedro> (There are other instances in the patch.)

This was just an oversight when search/replacing.
I've fixed it.

Tom

Patch

diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index 9923a2fb052..d98f916ac5b 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -38,8 +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 tui_win_info *src_win_list[2];
-static struct tui_list source_windows = {src_win_list, 0};
+static struct std::vector<tui_win_info *> source_windows;
 static struct tui_win_info *win_with_focus = NULL;
 static struct tui_layout_def layout_def = {
   SRC_WIN,			/* DISPLAY_MODE */
@@ -138,10 +137,10 @@  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 tui_list *
-tui_source_windows (void)
+struct std::vector<tui_win_info *> &
+tui_source_windows ()
 {
-  return &source_windows;
+  return source_windows;
 }
 
 
@@ -149,22 +148,18 @@  tui_source_windows (void)
    window (either source or disassembly), but both can be displayed at
    the same time.  */
 void
-tui_clear_source_windows (void)
+tui_clear_source_windows ()
 {
-  source_windows.list[0] = NULL;
-  source_windows.list[1] = NULL;
-  source_windows.count = 0;
+  source_windows.clear ();
 }
 
 
 /* Clear the pertinant detail in the source windows.  */
 void
-tui_clear_source_windows_detail (void)
+tui_clear_source_windows_detail ()
 {
-  int i;
-
-  for (i = 0; i < (tui_source_windows ())->count; i++)
-    tui_clear_win_detail ((tui_source_windows ())->list[i]);
+  for (tui_win_info *win : tui_source_windows ())
+    tui_clear_win_detail (win);
 }
 
 
@@ -174,8 +169,8 @@  tui_clear_source_windows_detail (void)
 void
 tui_add_to_source_windows (struct tui_win_info *win_info)
 {
-  if (source_windows.count < 2)
-    source_windows.list[source_windows.count++] = win_info;
+  if (source_windows.size () < 2)
+    source_windows.push_back (win_info);
 }
 
 /* See tui-data.h.  */
@@ -675,19 +670,12 @@  tui_win_info::~tui_win_info ()
 
 
 void
-tui_free_all_source_wins_content (void)
+tui_free_all_source_wins_content ()
 {
-  int i;
-
-  for (i = 0; i < (tui_source_windows ())->count; i++)
+  for (tui_win_info *win_info : tui_source_windows ())
     {
-      struct tui_win_info *win_info = (tui_source_windows ())->list[i];
-
-      if (win_info != NULL)
-	{
-	  tui_free_win_content (&(win_info->generic));
-	  tui_free_win_content (win_info->detail.source_info.execution_info);
-	}
+      tui_free_win_content (&(win_info->generic));
+      tui_free_win_content (win_info->detail.source_info.execution_info);
     }
 }
 
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 281729f7deb..d07862f29f8 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -102,14 +102,6 @@  enum tui_scroll_direction
 };
 
 
-/* General list struct.  */
-struct tui_list
-{
-  struct tui_win_info **list;
-  int count;
-};
-
-
 /* The kinds of layouts available.  */
 enum tui_layout_type
 {
@@ -360,7 +352,7 @@  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 tui_list *tui_source_windows (void);
+extern struct std::vector<tui_win_info *> &tui_source_windows ();
 extern void tui_clear_source_windows (void);
 extern void tui_clear_source_windows_detail (void);
 extern void tui_clear_win_detail (struct tui_win_info *);
diff --git a/gdb/tui/tui-stack.c b/gdb/tui/tui-stack.c
index b7e7ae81dff..d09acd28585 100644
--- a/gdb/tui/tui-stack.c
+++ b/gdb/tui/tui-stack.c
@@ -360,12 +360,11 @@  tui_update_locator_fullname (const char *fullname)
 int
 tui_show_frame_info (struct frame_info *fi)
 {
-  struct tui_win_info *win_info;
   int locator_changed_p;
 
   if (fi)
     {
-      int start_line, i;
+      int start_line;
       CORE_ADDR low;
       struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
       int source_already_displayed;
@@ -397,12 +396,10 @@  tui_show_frame_info (struct frame_info *fi)
 
       tui_show_locator_content ();
       start_line = 0;
-      for (i = 0; i < (tui_source_windows ())->count; i++)
+      for (struct tui_win_info *win_info : tui_source_windows ())
 	{
 	  union tui_which_element *item;
 
-	  win_info = (tui_source_windows ())->list[i];
-
 	  item = &locator->content[0]->which_element;
 	  if (win_info == TUI_SRC_WIN)
 	    {
@@ -475,9 +472,8 @@  tui_show_frame_info (struct frame_info *fi)
 	return 0;
 
       tui_show_locator_content ();
-      for (int i = 0; i < (tui_source_windows ())->count; i++)
+      for (struct tui_win_info *win_info : tui_source_windows ())
 	{
-	  win_info = (tui_source_windows ())->list[i];
 	  tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
 	  tui_update_exec_info (win_info);
 	}
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index a69e0878eff..21a9946792e 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -686,7 +686,7 @@  tui_resize_all (void)
        {
 	case SRC_COMMAND:
 	case DISASSEM_COMMAND:
-	  first_win = tui_source_windows ()->list[0];
+	  first_win = tui_source_windows ()[0];
 	  first_win->generic.width += width_diff;
 	  locator->width += width_diff;
 	  /* Check for invalid heights.  */
@@ -723,7 +723,7 @@  tui_resize_all (void)
 	    {
 	      first_win = TUI_DATA_WIN;
 	      first_win->generic.width += width_diff;
-	      second_win = tui_source_windows ()->list[0];
+	      second_win = tui_source_windows ()[0];
 	      second_win->generic.width += width_diff;
 	    }
 	  /* Change the first window's height/width.  */
@@ -1204,7 +1204,7 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
 	      make_invisible_and_set_new_height (primary_win_info, new_height);
 	      if (primary_win_info->generic.type == CMD_WIN)
 		{
-		  win_info = (tui_source_windows ())->list[0];
+		  win_info = tui_source_windows ()[0];
 		  src_win_info = win_info;
 		}
 	      else
@@ -1233,7 +1233,7 @@  tui_adjust_win_heights (struct tui_win_info *primary_win_info,
 	      else
 		{
 		  first_win = TUI_DATA_WIN;
-		  second_win = (tui_source_windows ())->list[0];
+		  second_win = tui_source_windows ()[0];
 		}
 	      if (primary_win_info == TUI_CMD_WIN)
 		{ /* Split the change in height accross the 1st & 2nd
@@ -1490,7 +1490,7 @@  new_height_ok (struct tui_win_info *primary_win_info,
 	      struct tui_win_info *win_info;
 
 	      if (primary_win_info == TUI_CMD_WIN)
-		win_info = (tui_source_windows ())->list[0];
+		win_info = tui_source_windows ()[0];
 	      else
 		win_info = TUI_CMD_WIN;
 	      ok = ((new_height +
@@ -1511,7 +1511,7 @@  new_height_ok (struct tui_win_info *primary_win_info,
 	  else
 	    {
 	      first_win = TUI_DATA_WIN;
-	      second_win = (tui_source_windows ())->list[0];
+	      second_win = tui_source_windows ()[0];
 	    }
 	  /* We could simply add all the heights to obtain the same
 	     result but below is more explicit since we subtract 1 for
@@ -1637,7 +1637,7 @@  parse_scrolling_args (const char *arg,
 	    error (_("Invalid window specified. \n\
 The window name specified must be valid and visible.\n"));
 	  else if (*win_to_scroll == TUI_CMD_WIN)
-	    *win_to_scroll = (tui_source_windows ())->list[0];
+	    *win_to_scroll = tui_source_windows ()[0];
 	}
     }
 }
diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c
index eab422d6cf1..20f39c4fb6e 100644
--- a/gdb/tui/tui-winsource.c
+++ b/gdb/tui/tui-winsource.c
@@ -42,9 +42,9 @@ 
 
 /* Function to display the "main" routine.  */
 void
-tui_display_main (void)
+tui_display_main ()
 {
-  if ((tui_source_windows ())->count > 0)
+  if (!tui_source_windows ().empty ())
     {
       struct gdbarch *gdbarch;
       CORE_ADDR addr;
@@ -159,12 +159,8 @@  tui_update_source_windows_with_addr (struct gdbarch *gdbarch, CORE_ADDR addr)
     }
   else
     {
-      int i;
-
-      for (i = 0; i < (tui_source_windows ())->count; i++)
+      for (struct tui_win_info *win_info : tui_source_windows ())
 	{
-	  struct tui_win_info *win_info = (tui_source_windows ())->list[i];
-
 	  tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT);
 	  tui_clear_exec_info_content (win_info);
 	}
@@ -406,15 +402,10 @@  tui_set_is_exec_point_at (struct tui_line_or_address l,
    This is called whenever a breakpoint is inserted, removed or
    has its state changed.  */
 void
-tui_update_all_breakpoint_info (void)
+tui_update_all_breakpoint_info ()
 {
-  struct tui_list *list = tui_source_windows ();
-  int i;
-
-  for (i = 0; i < list->count; i++)
+  for (tui_win_info *win : tui_source_windows ())
     {
-      struct tui_win_info *win = list->list[i];
-
       if (tui_update_breakpoint_info (win, FALSE))
         {
           tui_update_exec_info (win);