From: Tom Tromey Date: Thu, 11 Aug 2022 16:07:18 +0000 (-0600) Subject: Use ui_out_redirect_pop in more places X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=992aeed80b0a6ef1d60ce01df52f3397c3274f35;p=binutils-gdb.git 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 --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 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 ()