This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: patch for gdb/mi 680
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: "J. Johnston" <jjohnstn at redhat dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Mon, 21 Oct 2002 19:04:08 -0400
- Subject: Re: patch for gdb/mi 680
- References: <3DA5EB31.8A9EF8B@redhat.com>
J. Johnston writes:
> 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.
>
Approved, but (nitpick) I would prefer more meaningful names instead of
'cleanup1, cleanup2, cleanup3' Something like cleanup_frame,
cleanup_child, etc.
Elena
> 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);