This is the mail archive of the gdb-patches@sources.redhat.com 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 for gdb/mi 680


The following is a patch for PR gdb/mi 680.  To summarize, the patch changes
all usages of ui_out_tuple_begin/ui_out_tuple_end and ui_out_list_begin/ui_out_list_end
in the mi code to use the make_cleanup_ui_out_xxxx_begin_end/do_cleanups alternative.  This patch
was generated from code that contains other patches I have made that have not yet been 
approved so I have diff'd so only the changes pertaining to this PR are shown.  

gdb/mi/ChangeLog:

2002-10-10  Jeff Johnston  <jjohnstn@redhat.com>

        * mi-cmd-var.c: Change all remaining occurrences of ui_out_tuple_begin to
        make_cleanup_ui_out_tuple_begin_end.  Change all remaining occurrences of
        ui_out_list_begin to make_cleanup_ui_out_list_begin_end.  Use do_cleanups
        instead of ui_out_list_end or ui_out_tuple_end.  This is a fix for
        PR gdb/680.
        * mi-cmd-stack.c: Ditto.
        * mi-main.c: Ditto.

-- Jeff J.
Index: mi/mi-cmd-stack.c
===================================================================
RCS file: /cvs/src/src/gdb/mi/mi-cmd-stack.c,v
retrieving revision 1.11
diff -u -r1.11 mi-cmd-stack.c
--- mi/mi-cmd-stack.c	5 Apr 2002 22:04:43 -0000	1.11
+++ mi/mi-cmd-stack.c	10 Oct 2002 19:34:51 -0000
@@ -45,6 +45,7 @@
   int frame_low;
   int frame_high;
   int i;
+  struct cleanup *cleanup;
   struct frame_info *fi;
 
   if (!target_has_stack)
@@ -76,7 +77,7 @@
   if (fi == NULL)
     error ("mi_cmd_stack_list_frames: Not enough frames in stack.");
 
-  ui_out_list_begin (uiout, "stack");
+  cleanup = make_cleanup_ui_out_list_begin_end (uiout, "stack");
 
   /* Now let;s print the frames up to frame_high, or until there are
      frames in the stack. */
@@ -95,7 +96,7 @@
 			0 /* args */ );
     }
 
-  ui_out_list_end (uiout);
+  do_cleanups (cleanup);
   if (i < frame_high)
     error ("mi_cmd_stack_list_frames: Not enough frames in stack.");
 
@@ -155,6 +156,7 @@
   int frame_high;
   int i;
   struct frame_info *fi;
+  struct cleanup *cleanup;
 
   if (argc < 1 || argc > 3 || argc == 2)
     error ("mi_cmd_stack_list_args: Usage: PRINT_VALUES [FRAME_LOW FRAME_HIGH]");
@@ -182,7 +184,7 @@
   if (fi == NULL)
     error ("mi_cmd_stack_list_args: Not enough frames in stack.");
 
-  ui_out_list_begin (uiout, "stack-args");
+  cleanup = make_cleanup_ui_out_list_begin_end (uiout, "stack-args");
 
   /* Now let's print the frames up to frame_high, or until there are
      frames in the stack. */
@@ -190,14 +192,15 @@
        fi && (i <= frame_high || frame_high == -1);
        i++, fi = get_prev_frame (fi))
     {
+      struct cleanup *cleanup2;
       QUIT;
-      ui_out_tuple_begin (uiout, "frame");
+      cleanup2 = make_cleanup_ui_out_tuple_begin_end (uiout, "frame");
       ui_out_field_int (uiout, "level", i);
       list_args_or_locals (0, atoi (argv[0]), fi);
-      ui_out_tuple_end (uiout);
+      do_cleanups (cleanup2);
     }
 
-  ui_out_list_end (uiout);
+  do_cleanups (cleanup);
   if (i < frame_high)
     error ("mi_cmd_stack_list_args: Not enough frames in stack.");
 
@@ -214,13 +217,14 @@
   struct block *block;
   struct symbol *sym;
   int i, nsyms;
+  struct cleanup *cleanup;
   static struct ui_stream *stb = NULL;
 
   stb = ui_out_stream_new (uiout);
 
   block = get_frame_block (fi, 0);
 
-  ui_out_list_begin (uiout, locals ? "locals" : "args");
+  cleanup = make_cleanup_ui_out_list_begin_end (uiout, locals ? "locals" : "args");
 
   while (block != 0)
     {
@@ -262,8 +266,9 @@
 	    }
 	  if (print_me)
 	    {
+	      struct cleanup *cleanup2;
 	      if (values)
-		ui_out_tuple_begin (uiout, NULL);
+		cleanup2 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
 	      ui_out_field_string (uiout, "name", SYMBOL_NAME (sym));
 
 	      if (values)
@@ -278,7 +283,7 @@
 		    sym2 = sym;
 		  print_variable_value (sym2, fi, stb->stream);
 		  ui_out_field_stream (uiout, "value", stb);
-		  ui_out_tuple_end (uiout);
+		  do_cleanups (cleanup2);
 		}
 	    }
 	}
@@ -287,7 +292,7 @@
       else
 	block = BLOCK_SUPERBLOCK (block);
     }
-  ui_out_list_end (uiout);
+  do_cleanups (cleanup);
   ui_out_stream_delete (stb);
 }
 
--- mi/mi-cmd-var.0.c	Thu Oct 10 13:42:27 2002
+++ mi/mi-cmd-var.c	Thu Oct 10 14:05:33 2002
@@ -254,6 +254,7 @@
   struct varobj *var;
   struct varobj **childlist;
   struct varobj **cc;
+  struct cleanup *cleanup;
   int numchild;
   char *type;
 
@@ -271,11 +272,12 @@
   if (numchild <= 0)
     return MI_CMD_DONE;
 
-  ui_out_tuple_begin (uiout, "children");
+  cleanup = make_cleanup_ui_out_tuple_begin_end (uiout, "children");
   cc = childlist;
   while (*cc != NULL)
     {
-      ui_out_tuple_begin (uiout, "child");
+      struct cleanup *cleanup2;
+      cleanup2 = make_cleanup_ui_out_tuple_begin_end (uiout, "child");
       ui_out_field_string (uiout, "name", varobj_get_objname (*cc));
       ui_out_field_string (uiout, "exp", varobj_get_expression (*cc));
       ui_out_field_int (uiout, "numchild", varobj_get_num_children (*cc));
@@ -283,10 +285,10 @@
       /* C++ pseudo-variables (public, private, protected) do not have a type */
       if (type)
 	ui_out_field_string (uiout, "type", varobj_get_type (*cc));
-      ui_out_tuple_end (uiout);
+      do_cleanups (cleanup2);
       cc++;
     }
-  ui_out_tuple_end (uiout);
+  do_cleanups (cleanup);
   xfree (childlist);
   return MI_CMD_DONE;
 }
--- mi/mi-main.0.c	Thu Oct 10 13:52:55 2002
+++ mi/mi-main.c	Thu Oct 10 13:59:56 2002
@@ -911,19 +911,22 @@
   /* Build the result as a two dimentional table. */
   {
     struct ui_stream *stream = ui_out_stream_new (uiout);
+    struct cleanup *cleanup1;
     int row;
     int row_byte;
-    ui_out_list_begin (uiout, "memory");
+    cleanup1 = make_cleanup_ui_out_list_begin_end (uiout, "memory");
     for (row = 0, row_byte = 0;
 	 row < nr_rows;
 	 row++, row_byte += nr_cols * word_size)
       {
 	int col;
 	int col_byte;
-	ui_out_tuple_begin (uiout, NULL);
+	struct cleanup *cleanup2;
+	struct cleanup *cleanup3;
+	cleanup2 = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
 	ui_out_field_core_addr (uiout, "addr", addr + row_byte);
 	/* ui_out_field_core_addr_symbolic (uiout, "saddr", addr + row_byte); */
-	ui_out_list_begin (uiout, "data");
+	cleanup3 = make_cleanup_ui_out_list_begin_end (uiout, "data");
 	for (col = 0, col_byte = row_byte;
 	     col < nr_cols;
 	     col++, col_byte += word_size)
@@ -940,7 +943,7 @@
 		ui_out_field_stream (uiout, NULL, stream);
 	      }
 	  }
-	ui_out_list_end (uiout);
+	do_cleanups (cleanup3);
 	if (aschar)
 	  {
 	    int byte;
@@ -960,10 +963,10 @@
 	      }
 	    ui_out_field_stream (uiout, "ascii", stream);
 	  }
-	ui_out_tuple_end (uiout);
+	do_cleanups (cleanup2);
       }
     ui_out_stream_delete (stream);
-    ui_out_list_end (uiout);
+    do_cleanups (cleanup1);
   }
   do_cleanups (cleanups);
   return MI_CMD_DONE;
@@ -1415,17 +1418,18 @@
 		 strcmp (previous_sect_name, section_name) : 1);
   if (new_section)
     {
+      struct cleanup *cleanups;
       xfree (previous_sect_name);
       previous_sect_name = xstrdup (section_name);
 
       if (last_async_command)
 	fputs_unfiltered (last_async_command, raw_stdout);
       fputs_unfiltered ("+download", raw_stdout);
-      ui_out_tuple_begin (uiout, NULL);
+      cleanups = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
       ui_out_field_string (uiout, "section", section_name);
       ui_out_field_int (uiout, "section-size", total_section);
       ui_out_field_int (uiout, "total-size", grand_total);
-      ui_out_tuple_end (uiout);
+      do_cleanups (cleanups);
       mi_out_put (uiout, raw_stdout);
       fputs_unfiltered ("\n", raw_stdout);
       gdb_flush (raw_stdout);
@@ -1434,18 +1438,19 @@
   if (delta.tv_sec >= update_threshold.tv_sec &&
       delta.tv_usec >= update_threshold.tv_usec)
     {
+      struct cleanup *cleanups;
       last_update.tv_sec = time_now.tv_sec;
       last_update.tv_usec = time_now.tv_usec;
       if (last_async_command)
 	fputs_unfiltered (last_async_command, raw_stdout);
       fputs_unfiltered ("+download", raw_stdout);
-      ui_out_tuple_begin (uiout, NULL);
+      cleanups = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
       ui_out_field_string (uiout, "section", section_name);
       ui_out_field_int (uiout, "section-sent", sent_so_far);
       ui_out_field_int (uiout, "section-size", total_section);
       ui_out_field_int (uiout, "total-sent", total_sent);
       ui_out_field_int (uiout, "total-size", grand_total);
-      ui_out_tuple_end (uiout);
+      do_cleanups (cleanups);
       mi_out_put (uiout, raw_stdout);
       fputs_unfiltered ("\n", raw_stdout);
       gdb_flush (raw_stdout);

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