public inbox for gdb-cvs@sourceware.org help / color / mirror / Atom feed
From: Tom Tromey <tromey@sourceware.org> To: gdb-cvs@sourceware.org Subject: [binutils-gdb] Use ui_out_redirect_pop in more places Date: Wed, 31 Aug 2022 17:14:19 +0000 (GMT) [thread overview] Message-ID: <20220831171419.F169B38582A7@sourceware.org> (raw) https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=992aeed80b0a6ef1d60ce01df52f3397c3274f35 commit 992aeed80b0a6ef1d60ce01df52f3397c3274f35 Author: Tom Tromey <tromey@adacore.com> Date: Thu Aug 11 10:07:18 2022 -0600 Use ui_out_redirect_pop in more places This changes ui_out_redirect_pop to also perform the redirection, and then updates several sites to use this, rather than explicit redirects. Diff: --- gdb/breakpoint.c | 13 ++----------- gdb/guile/scm-breakpoint.c | 3 +-- gdb/guile/scm-ports.c | 3 +-- gdb/mi/mi-interp.c | 29 ++++++++--------------------- gdb/python/py-breakpoint.c | 4 +--- gdb/top.c | 3 +-- gdb/ui-out.h | 6 ++++-- 7 files changed, 18 insertions(+), 43 deletions(-) diff --git a/gdb/breakpoint.c b/gdb/breakpoint.c index 63feea9e9cd..bff3bac7d1a 100644 --- a/gdb/breakpoint.c +++ b/gdb/breakpoint.c @@ -14058,18 +14058,9 @@ save_breakpoints (const char *filename, int from_tty, { fp.puts (" commands\n"); - current_uiout->redirect (&fp); - try - { - print_command_lines (current_uiout, tp->commands.get (), 2); - } - catch (const gdb_exception &ex) - { - current_uiout->redirect (NULL); - throw; - } + ui_out_redirect_pop redir (current_uiout, &fp); + print_command_lines (current_uiout, tp->commands.get (), 2); - current_uiout->redirect (NULL); fp.puts (" end\n"); } diff --git a/gdb/guile/scm-breakpoint.c b/gdb/guile/scm-breakpoint.c index 5406b74a389..a7799416c50 100644 --- a/gdb/guile/scm-breakpoint.c +++ b/gdb/guile/scm-breakpoint.c @@ -999,10 +999,10 @@ gdbscm_breakpoint_commands (SCM self) string_file buf; - current_uiout->redirect (&buf); gdbscm_gdb_exception exc {}; try { + ui_out_redirect_pop redir (current_uiout, &buf); print_command_lines (current_uiout, breakpoint_commands (bp), 0); } catch (const gdb_exception &except) @@ -1010,7 +1010,6 @@ gdbscm_breakpoint_commands (SCM self) exc = unpack (except); } - current_uiout->redirect (NULL); GDBSCM_HANDLE_GDB_EXCEPTION (exc); result = gdbscm_scm_from_c_string (buf.c_str ()); diff --git a/gdb/guile/scm-ports.c b/gdb/guile/scm-ports.c index 946859aa1f3..9173cb6f26e 100644 --- a/gdb/guile/scm-ports.c +++ b/gdb/guile/scm-ports.c @@ -607,8 +607,7 @@ ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport, gdb_stderr = port_file.get (); else { - current_uiout->redirect (port_file.get ()); - redirect_popper.emplace (current_uiout); + redirect_popper.emplace (current_uiout, port_file.get ()); gdb_stdout = port_file.get (); } diff --git a/gdb/mi/mi-interp.c b/gdb/mi/mi-interp.c index 368c13f5925..ed097cf5d5f 100644 --- a/gdb/mi/mi-interp.c +++ b/gdb/mi/mi-interp.c @@ -816,16 +816,14 @@ mi_tsv_modified (const struct trace_state_variable *tsv) gdb_printf (mi->event_channel, "tsv-modified"); - mi_uiout->redirect (mi->event_channel); + ui_out_redirect_pop redir (mi_uiout, mi->event_channel); mi_uiout->field_string ("name", tsv->name); mi_uiout->field_string ("initial", - plongest (tsv->initial_value)); + plongest (tsv->initial_value)); if (tsv->value_known) mi_uiout->field_string ("current", plongest (tsv->value)); - mi_uiout->redirect (NULL); - gdb_flush (mi->event_channel); } } @@ -844,7 +842,7 @@ mi_print_breakpoint_for_event (struct mi_interp *mi, breakpoint *bp) break if anything is output to mi_uiout prior to calling the breakpoint_created notifications. So, we use ui_out_redirect. */ - mi_uiout->redirect (mi->event_channel); + ui_out_redirect_pop redir (mi_uiout, mi->event_channel); try { @@ -857,8 +855,6 @@ mi_print_breakpoint_for_event (struct mi_interp *mi, breakpoint *bp) { exception_print (gdb_stderr, ex); } - - mi_uiout->redirect (NULL); } /* Emit notification about a created breakpoint. */ @@ -1090,12 +1086,10 @@ mi_solib_loaded (struct so_list *solib) gdb_printf (mi->event_channel, "library-loaded"); - uiout->redirect (mi->event_channel); + ui_out_redirect_pop redir (uiout, mi->event_channel); mi_output_solib_attribs (uiout, solib); - uiout->redirect (NULL); - gdb_flush (mi->event_channel); } } @@ -1118,7 +1112,7 @@ mi_solib_unloaded (struct so_list *solib) gdb_printf (mi->event_channel, "library-unloaded"); - uiout->redirect (mi->event_channel); + ui_out_redirect_pop redir (uiout, mi->event_channel); uiout->field_string ("id", solib->so_original_name); uiout->field_string ("target-name", solib->so_original_name); @@ -1128,8 +1122,6 @@ mi_solib_unloaded (struct so_list *solib) uiout->field_fmt ("thread-group", "i%d", current_inferior ()->num); } - uiout->redirect (NULL); - gdb_flush (mi->event_channel); } } @@ -1157,13 +1149,11 @@ mi_command_param_changed (const char *param, const char *value) gdb_printf (mi->event_channel, "cmd-param-changed"); - mi_uiout->redirect (mi->event_channel); + ui_out_redirect_pop redir (mi_uiout, mi->event_channel); mi_uiout->field_string ("param", param); mi_uiout->field_string ("value", value); - mi_uiout->redirect (NULL); - gdb_flush (mi->event_channel); } } @@ -1193,7 +1183,7 @@ mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr, gdb_printf (mi->event_channel, "memory-changed"); - mi_uiout->redirect (mi->event_channel); + ui_out_redirect_pop redir (mi_uiout, mi->event_channel); mi_uiout->field_fmt ("thread-group", "i%d", inferior->num); mi_uiout->field_core_addr ("addr", target_gdbarch (), memaddr); @@ -1210,8 +1200,6 @@ mi_memory_changed (struct inferior *inferior, CORE_ADDR memaddr, mi_uiout->field_string ("type", "code"); } - mi_uiout->redirect (NULL); - gdb_flush (mi->event_channel); } } @@ -1243,8 +1231,7 @@ mi_user_selected_context_changed (user_selected_what selection) mi_uiout = top_level_interpreter ()->interp_ui_out (); - mi_uiout->redirect (mi->event_channel); - ui_out_redirect_pop redirect_popper (mi_uiout); + ui_out_redirect_pop redirect_popper (mi_uiout, mi->event_channel); target_terminal::scoped_restore_terminal_state term_state; target_terminal::ours_for_output (); diff --git a/gdb/python/py-breakpoint.c b/gdb/python/py-breakpoint.c index 48ec86cebfe..dd4519a1b05 100644 --- a/gdb/python/py-breakpoint.c +++ b/gdb/python/py-breakpoint.c @@ -548,19 +548,17 @@ bppy_get_commands (PyObject *self, void *closure) string_file stb; - current_uiout->redirect (&stb); try { + ui_out_redirect_pop redir (current_uiout, &stb); print_command_lines (current_uiout, breakpoint_commands (bp), 0); } catch (const gdb_exception &except) { - current_uiout->redirect (NULL); gdbpy_convert_exception (except); return NULL; } - current_uiout->redirect (NULL); return host_string_to_python_string (stb.c_str ()).release (); } diff --git a/gdb/top.c b/gdb/top.c index 18a447e701b..d8e0ee5495a 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -735,8 +735,7 @@ execute_fn_to_ui_file (struct ui_file *file, std::function<void(void)> fn) scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0); { - current_uiout->redirect (file); - ui_out_redirect_pop redirect_popper (current_uiout); + ui_out_redirect_pop redirect_popper (current_uiout, file); scoped_restore save_stdout = make_scoped_restore (&gdb_stdout, file); diff --git a/gdb/ui-out.h b/gdb/ui-out.h index 1d74da905e4..65d40875926 100644 --- a/gdb/ui-out.h +++ b/gdb/ui-out.h @@ -428,15 +428,17 @@ private: struct ui_out *m_uiout; }; -/* On destruction, pop the last redirection by calling the uiout's +/* On construction, redirect a uiout to a given stream. On + destruction, pop the last redirection by calling the uiout's redirect method with a NULL parameter. */ class ui_out_redirect_pop { public: - ui_out_redirect_pop (ui_out *uiout) + ui_out_redirect_pop (ui_out *uiout, ui_file *stream) : m_uiout (uiout) { + m_uiout->redirect (stream); } ~ui_out_redirect_pop ()
reply other threads:[~2022-08-31 17:14 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20220831171419.F169B38582A7@sourceware.org \ --to=tromey@sourceware.org \ --cc=gdb-cvs@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).