From 46b9c12945629fffb61001a8f13a37c96675c0b7 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Wed, 12 Apr 2017 16:10:02 -0600 Subject: [PATCH] More uses of ui_out_emit_tuple This patch adds a few more uses of ui_out_emit_tuple. In these cases a slightly more complicated change was needed. This also adds annotate_arg_emitter, for use in stack.c, to avoid having to introduce a new scope and reindent the code for a single call. ChangeLog 2017-04-22 Tom Tromey * stack.c (print_frame_arg): Use ui_out_emit_tuple, annotate_arg_emitter. * breakpoint.c (print_mention_watchpoint) (print_mention_masked_watchpoint): Use ui_out_emit_tuple. * annotate.h (struct annotate_arg_emitter): New. --- gdb/ChangeLog | 8 ++++++++ gdb/annotate.h | 11 +++++++++++ gdb/breakpoint.c | 22 +++++++++++----------- gdb/stack.c | 11 ++--------- 4 files changed, 32 insertions(+), 20 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2e0ea7a85b4..9ea2c4b5827 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2017-04-22 Tom Tromey + + * stack.c (print_frame_arg): Use ui_out_emit_tuple, + annotate_arg_emitter. + * breakpoint.c (print_mention_watchpoint) + (print_mention_masked_watchpoint): Use ui_out_emit_tuple. + * annotate.h (struct annotate_arg_emitter): New. + 2017-04-22 Tom Tromey * record-btrace.c (record_btrace_insn_history) diff --git a/gdb/annotate.h b/gdb/annotate.h index a1454a1223c..7161689b390 100644 --- a/gdb/annotate.h +++ b/gdb/annotate.h @@ -74,6 +74,17 @@ extern void annotate_arg_name_end (void); extern void annotate_arg_value (struct type *); extern void annotate_arg_end (void); +/* Wrap calls to annotate_arg_begin and annotate_arg_end in an RAII + class. */ +struct annotate_arg_emitter +{ + annotate_arg_emitter () { annotate_arg_begin (); } + ~annotate_arg_emitter () { annotate_arg_end (); } + + annotate_arg_emitter (const annotate_arg_emitter &) = delete; + annotate_arg_emitter &operator= (const annotate_arg_emitter &) = delete; +}; + extern void annotate_source (char *, int, int, int, struct gdbarch *, CORE_ADDR); diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 2ff44062756..269cddd251b 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -10778,37 +10778,37 @@ print_it_watchpoint (bpstat bs) static void print_mention_watchpoint (struct breakpoint *b) { - struct cleanup *ui_out_chain; struct watchpoint *w = (struct watchpoint *) b; struct ui_out *uiout = current_uiout; + const char *tuple_name; switch (b->type) { case bp_watchpoint: uiout->text ("Watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt"); + tuple_name = "wpt"; break; case bp_hardware_watchpoint: uiout->text ("Hardware watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt"); + tuple_name = "wpt"; break; case bp_read_watchpoint: uiout->text ("Hardware read watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt"); + tuple_name = "hw-rwpt"; break; case bp_access_watchpoint: uiout->text ("Hardware access (read/write) watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt"); + tuple_name = "hw-awpt"; break; default: internal_error (__FILE__, __LINE__, _("Invalid hardware watchpoint type.")); } + ui_out_emit_tuple tuple_emitter (uiout, tuple_name); uiout->field_int ("number", b->number); uiout->text (": "); uiout->field_string ("exp", w->exp_string); - do_cleanups (ui_out_chain); } /* Implement the "print_recreate" breakpoint_ops method for @@ -10977,31 +10977,31 @@ print_mention_masked_watchpoint (struct breakpoint *b) { struct watchpoint *w = (struct watchpoint *) b; struct ui_out *uiout = current_uiout; - struct cleanup *ui_out_chain; + const char *tuple_name; switch (b->type) { case bp_hardware_watchpoint: uiout->text ("Masked hardware watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "wpt"); + tuple_name = "wpt"; break; case bp_read_watchpoint: uiout->text ("Masked hardware read watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-rwpt"); + tuple_name = "hw-rwpt"; break; case bp_access_watchpoint: uiout->text ("Masked hardware access (read/write) watchpoint "); - ui_out_chain = make_cleanup_ui_out_tuple_begin_end (uiout, "hw-awpt"); + tuple_name = "hw-awpt"; break; default: internal_error (__FILE__, __LINE__, _("Invalid hardware watchpoint type.")); } + ui_out_emit_tuple tuple_emitter (uiout, tuple_name); uiout->field_int ("number", b->number); uiout->text (": "); uiout->field_string ("exp", w->exp_string); - do_cleanups (ui_out_chain); } /* Implement the "print_recreate" breakpoint_ops method for diff --git a/gdb/stack.c b/gdb/stack.c index 32acca1741b..fa4726448ac 100644 --- a/gdb/stack.c +++ b/gdb/stack.c @@ -224,7 +224,6 @@ static void print_frame_arg (const struct frame_arg *arg) { struct ui_out *uiout = current_uiout; - struct cleanup *old_chain; const char *error_message = NULL; string_file stb; @@ -235,9 +234,8 @@ print_frame_arg (const struct frame_arg *arg) || (!uiout->is_mi_like_p () && arg->entry_kind == print_entry_values_compact)); - annotate_arg_begin (); - - old_chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL); + annotate_arg_emitter arg_emitter; + ui_out_emit_tuple tuple_emitter (uiout, NULL); fprintf_symbol_filtered (&stb, SYMBOL_PRINT_NAME (arg->sym), SYMBOL_LANGUAGE (arg->sym), DMGL_PARAMS | DMGL_ANSI); if (arg->entry_kind == print_entry_values_compact) @@ -305,11 +303,6 @@ print_frame_arg (const struct frame_arg *arg) } uiout->field_stream ("value", stb); - - /* Also invoke ui_out_tuple_end. */ - do_cleanups (old_chain); - - annotate_arg_end (); } /* Read in inferior function local SYM at FRAME into ARGP. Caller is