[30/66] Change tui_which_element::data_window to be a pointer

Message ID 20190623224329.16060-31-tom@tromey.com
State New, archived
Headers

Commit Message

Tom Tromey June 23, 2019, 10:42 p.m. UTC
  A coming patch will add a constructor to tui_gen_win_info.  However,
because the tui_which_element union contains an object of this type,
first something must be done here in order to avoid having a union
with a member that has a constructor.  This patch changes this element
to be a pointer instead.

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

	* tui/tui-wingeneral.c (tui_refresh_win): Update.
	* tui/tui-windata.c (tui_first_data_item_displayed)
	(tui_delete_data_content_windows): Update.
	* tui/tui-win.c (tui_data_window::set_new_height): Update.
	* tui/tui-regs.c (tui_show_registers, tui_show_register_group)
	(tui_display_registers_from, tui_check_register_values): Update.
	* tui/tui-data.h (union tui_which_element) <data_window>: Now a
	pointer.
	* tui/tui-data.c (init_content_element): Update.  Allocate the new
	window.
	(tui_free_data_content): Update.
	(free_content_elements) <case DATA_WIN>: Free the window.
---
 gdb/ChangeLog            | 15 +++++++++++++++
 gdb/tui/tui-data.c       | 12 +++++++-----
 gdb/tui/tui-data.h       |  2 +-
 gdb/tui/tui-regs.c       | 10 +++++-----
 gdb/tui/tui-win.c        |  2 +-
 gdb/tui/tui-windata.c    |  4 ++--
 gdb/tui/tui-wingeneral.c |  2 +-
 7 files changed, 32 insertions(+), 15 deletions(-)
  

Patch

diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c
index bdfc2de73af..af571450316 100644
--- a/gdb/tui/tui-data.c
+++ b/gdb/tui/tui-data.c
@@ -435,11 +435,12 @@  init_content_element (struct tui_win_element *element,
       element->which_element.source.has_break = FALSE;
       break;
     case DATA_WIN:
-      tui_init_generic_part (&element->which_element.data_window);
-      element->which_element.data_window.type = DATA_ITEM_WIN;
-      element->which_element.data_window.content =
+      element->which_element.data_window = XNEW (struct tui_gen_win_info);
+      tui_init_generic_part (element->which_element.data_window);
+      element->which_element.data_window->type = DATA_ITEM_WIN;
+      element->which_element.data_window->content =
 	tui_alloc_content (1, DATA_ITEM_WIN);
-      element->which_element.data_window.content_size = 1;
+      element->which_element.data_window->content_size = 1;
       break;
     case CMD_WIN:
       element->which_element.command.line = NULL;
@@ -646,7 +647,7 @@  tui_free_data_content (tui_win_content content,
   for (i = 0; i < content_size; i++)
     {
       struct tui_gen_win_info *generic_win
-	= &content[i]->which_element.data_window;
+	= content[i]->which_element.data_window;
 
       if (generic_win != NULL)
 	{
@@ -710,6 +711,7 @@  free_content_elements (tui_win_content content,
 		      xfree (element->which_element.source.line);
 		      break;
 		    case DATA_WIN:
+		      xfree (element->which_element.data_window);
 		      xfree (element);
 		      break;
 		    case DATA_ITEM_WIN:
diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h
index 98e7a2ca34e..f915d209782 100644
--- a/gdb/tui/tui-data.h
+++ b/gdb/tui/tui-data.h
@@ -212,7 +212,7 @@  typedef char tui_exec_info_content[TUI_EXECINFO_SIZE];
 union tui_which_element
 {
   struct tui_source_element source;	/* The source elements.  */
-  struct tui_gen_win_info data_window;	/* Data display elements.  */
+  struct tui_gen_win_info *data_window;	/* Data display elements.  */
   struct tui_data_element data;		/* Elements of data_window.  */
   struct tui_command_element command;	/* Command elements.  */
   struct tui_locator_element locator;	/* Locator elements.  */
diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c
index d7940af984b..7367cf7c0cb 100644
--- a/gdb/tui/tui-regs.c
+++ b/gdb/tui/tui-regs.c
@@ -165,7 +165,7 @@  tui_show_registers (struct reggroup *group)
 	  struct tui_gen_win_info *data_item_win;
           struct tui_win_element *win;
 
-	  data_item_win = &TUI_DATA_WIN->regs_content[i]
+	  data_item_win = TUI_DATA_WIN->regs_content[i]
             ->which_element.data_window;
           win = data_item_win->content[0];
           win->which_element.data.highlight = FALSE;
@@ -261,7 +261,7 @@  tui_show_register_group (struct reggroup *group,
 	    continue;
 
 	  data_item_win =
-            &TUI_DATA_WIN->regs_content[pos]->which_element.data_window;
+            TUI_DATA_WIN->regs_content[pos]->which_element.data_window;
           data = &data_item_win->content[0]->which_element.data;
           if (data)
             {
@@ -306,7 +306,7 @@  tui_display_registers_from (int start_element_no)
           int len;
 
           data_item_win
-	    = &TUI_DATA_WIN->regs_content[i]->which_element.data_window;
+	    = TUI_DATA_WIN->regs_content[i]->which_element.data_window;
           data = &data_item_win->content[0]->which_element.data;
           len = 0;
           p = data->content;
@@ -347,7 +347,7 @@  tui_display_registers_from (int start_element_no)
 	      struct tui_data_element *data_element_ptr;
 
 	      /* Create the window if necessary.  */
-	      data_item_win = &TUI_DATA_WIN->regs_content[i]
+	      data_item_win = TUI_DATA_WIN->regs_content[i]
                 ->which_element.data_window;
 	      data_element_ptr = &data_item_win->content[0]->which_element.data;
               if (data_item_win->handle != NULL
@@ -485,7 +485,7 @@  tui_check_register_values (struct frame_info *frame)
 	      struct tui_gen_win_info *data_item_win_ptr;
 	      int was_hilighted;
 
-	      data_item_win_ptr = &TUI_DATA_WIN->regs_content[i]->
+	      data_item_win_ptr = TUI_DATA_WIN->regs_content[i]->
                 which_element.data_window;
 	      data = &data_item_win_ptr->content[0]->which_element.data;
 	      was_hilighted = data->highlight;
diff --git a/gdb/tui/tui-win.c b/gdb/tui/tui-win.c
index dc40ab7736d..e4c1522a62d 100644
--- a/gdb/tui/tui-win.c
+++ b/gdb/tui/tui-win.c
@@ -1273,7 +1273,7 @@  tui_data_window::set_new_height (int height)
   for (int i = 0; i < generic.content_size; i++)
     {
       struct tui_gen_win_info *gen_win_info
-	= &generic.content[i]->which_element.data_window;
+	= generic.content[i]->which_element.data_window;
       tui_delete_win (gen_win_info->handle);
       gen_win_info->handle = NULL;
     }
diff --git a/gdb/tui/tui-windata.c b/gdb/tui/tui-windata.c
index 770baf857f6..1647527e240 100644
--- a/gdb/tui/tui-windata.c
+++ b/gdb/tui/tui-windata.c
@@ -54,7 +54,7 @@  tui_first_data_item_displayed (void)
       struct tui_gen_win_info *data_item_win;
 
       data_item_win
-	= &TUI_DATA_WIN->generic.content[i]->which_element.data_window;
+	= TUI_DATA_WIN->generic.content[i]->which_element.data_window;
       if (data_item_win->handle != NULL
 	  && data_item_win->is_visible)
 	element_no = i;
@@ -75,7 +75,7 @@  tui_delete_data_content_windows (void)
   for (i = 0; (i < TUI_DATA_WIN->generic.content_size); i++)
     {
       data_item_win_ptr
-	= &TUI_DATA_WIN->generic.content[i]->which_element.data_window;
+	= TUI_DATA_WIN->generic.content[i]->which_element.data_window;
       tui_delete_win (data_item_win_ptr->handle);
       data_item_win_ptr->handle = NULL;
       data_item_win_ptr->is_visible = false;
diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c
index c1778289442..ccee399057a 100644
--- a/gdb/tui/tui-wingeneral.c
+++ b/gdb/tui/tui-wingeneral.c
@@ -43,7 +43,7 @@  tui_refresh_win (struct tui_gen_win_info *win_info)
 	{
 	  struct tui_gen_win_info *data_item_win_ptr;
 
-	  data_item_win_ptr = &win_info->content[i]->which_element.data_window;
+	  data_item_win_ptr = win_info->content[i]->which_element.data_window;
 	  if (data_item_win_ptr != NULL
 	      && data_item_win_ptr->handle != NULL)
 	    wrefresh (data_item_win_ptr->handle);