Remove make_cleanup_ui_out_redirect_pop
This patch introduces ui_out_redirect_pop. All uses of make_cleanup_ui_out_redirect_pop are replaced with this new class. ChangeLog 2017-09-09 Tom Tromey <tom@tromey.com> * mi/mi-interp.c (mi_user_selected_context_changed): Use ui_out_redirect_pop. * guile/scm-ports.c (ioscm_with_output_to_port_worker): Use ui_out_redirect_pop. * utils.c (do_ui_out_redirect_pop) (make_cleanup_ui_out_redirect_pop): Remove. * top.c (execute_command_to_string): Use ui_out_redirect_pop. * utils.h (make_cleanup_ui_out_redirect_pop): Remove. * ui-out.h (ui_out_redirect_pop): New class.
This commit is contained in:
parent
e6a2252ac3
commit
ca5909c7de
@ -1,3 +1,15 @@
|
||||
2017-09-09 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* mi/mi-interp.c (mi_user_selected_context_changed): Use
|
||||
ui_out_redirect_pop.
|
||||
* guile/scm-ports.c (ioscm_with_output_to_port_worker): Use
|
||||
ui_out_redirect_pop.
|
||||
* utils.c (do_ui_out_redirect_pop)
|
||||
(make_cleanup_ui_out_redirect_pop): Remove.
|
||||
* top.c (execute_command_to_string): Use ui_out_redirect_pop.
|
||||
* utils.h (make_cleanup_ui_out_redirect_pop): Remove.
|
||||
* ui-out.h (ui_out_redirect_pop): New class.
|
||||
|
||||
2017-09-09 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* mi/mi-main.c (output_cores): Use ui_out_emit_list.
|
||||
|
@ -26,6 +26,7 @@
|
||||
#include "top.h"
|
||||
#include "target.h"
|
||||
#include "guile-internal.h"
|
||||
#include "common/gdb_optional.h"
|
||||
|
||||
#ifdef HAVE_POLL
|
||||
#if defined (HAVE_POLL_H)
|
||||
@ -477,17 +478,20 @@ ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport,
|
||||
scoped_restore save_file = make_scoped_restore (oport == GDB_STDERR
|
||||
? &gdb_stderr : &gdb_stdout);
|
||||
|
||||
if (oport == GDB_STDERR)
|
||||
gdb_stderr = port_file.get ();
|
||||
else
|
||||
{
|
||||
current_uiout->redirect (port_file.get ());
|
||||
make_cleanup_ui_out_redirect_pop (current_uiout);
|
||||
{
|
||||
gdb::optional<ui_out_redirect_pop> redirect_popper;
|
||||
if (oport == GDB_STDERR)
|
||||
gdb_stderr = port_file.get ();
|
||||
else
|
||||
{
|
||||
current_uiout->redirect (port_file.get ());
|
||||
redirect_popper.emplace (current_uiout);
|
||||
|
||||
gdb_stdout = port_file.get ();
|
||||
}
|
||||
gdb_stdout = port_file.get ();
|
||||
}
|
||||
|
||||
result = gdbscm_safe_call_0 (thunk, NULL);
|
||||
result = gdbscm_safe_call_0 (thunk, NULL);
|
||||
}
|
||||
|
||||
do_cleanups (cleanups);
|
||||
|
||||
|
@ -1314,10 +1314,9 @@ mi_user_selected_context_changed (user_selected_what selection)
|
||||
mi_uiout = interp_ui_out (top_level_interpreter ());
|
||||
|
||||
mi_uiout->redirect (mi->event_channel);
|
||||
ui_out_redirect_pop redirect_popper (mi_uiout);
|
||||
|
||||
old_chain = make_cleanup_ui_out_redirect_pop (mi_uiout);
|
||||
|
||||
make_cleanup_restore_target_terminal ();
|
||||
old_chain = make_cleanup_restore_target_terminal ();
|
||||
target_terminal_ours_for_output ();
|
||||
|
||||
if (selection & USER_SELECTED_INFERIOR)
|
||||
|
28
gdb/top.c
28
gdb/top.c
@ -679,21 +679,23 @@ execute_command_to_string (char *p, int from_tty)
|
||||
|
||||
string_file str_file;
|
||||
|
||||
current_uiout->redirect (&str_file);
|
||||
make_cleanup_ui_out_redirect_pop (current_uiout);
|
||||
{
|
||||
current_uiout->redirect (&str_file);
|
||||
ui_out_redirect_pop redirect_popper (current_uiout);
|
||||
|
||||
scoped_restore save_stdout
|
||||
= make_scoped_restore (&gdb_stdout, &str_file);
|
||||
scoped_restore save_stderr
|
||||
= make_scoped_restore (&gdb_stderr, &str_file);
|
||||
scoped_restore save_stdlog
|
||||
= make_scoped_restore (&gdb_stdlog, &str_file);
|
||||
scoped_restore save_stdtarg
|
||||
= make_scoped_restore (&gdb_stdtarg, &str_file);
|
||||
scoped_restore save_stdtargerr
|
||||
= make_scoped_restore (&gdb_stdtargerr, &str_file);
|
||||
scoped_restore save_stdout
|
||||
= make_scoped_restore (&gdb_stdout, &str_file);
|
||||
scoped_restore save_stderr
|
||||
= make_scoped_restore (&gdb_stderr, &str_file);
|
||||
scoped_restore save_stdlog
|
||||
= make_scoped_restore (&gdb_stdlog, &str_file);
|
||||
scoped_restore save_stdtarg
|
||||
= make_scoped_restore (&gdb_stdtarg, &str_file);
|
||||
scoped_restore save_stdtargerr
|
||||
= make_scoped_restore (&gdb_stdtargerr, &str_file);
|
||||
|
||||
execute_command (p, from_tty);
|
||||
execute_command (p, from_tty);
|
||||
}
|
||||
|
||||
do_cleanups (cleanup);
|
||||
|
||||
|
23
gdb/ui-out.h
23
gdb/ui-out.h
@ -242,4 +242,27 @@ private:
|
||||
struct ui_out *m_uiout;
|
||||
};
|
||||
|
||||
/* 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)
|
||||
: m_uiout (uiout)
|
||||
{
|
||||
}
|
||||
|
||||
~ui_out_redirect_pop ()
|
||||
{
|
||||
m_uiout->redirect (NULL);
|
||||
}
|
||||
|
||||
ui_out_redirect_pop (const ui_out_redirect_pop &) = delete;
|
||||
ui_out_redirect_pop &operator= (const ui_out_redirect_pop &) = delete;
|
||||
|
||||
private:
|
||||
struct ui_out *m_uiout;
|
||||
};
|
||||
|
||||
#endif /* UI_OUT_H */
|
||||
|
19
gdb/utils.c
19
gdb/utils.c
@ -137,25 +137,6 @@ show_pagination_enabled (struct ui_file *file, int from_tty,
|
||||
because while they use the "cleanup API" they are not part of the
|
||||
"cleanup API". */
|
||||
|
||||
/* Helper function for make_cleanup_ui_out_redirect_pop. */
|
||||
|
||||
static void
|
||||
do_ui_out_redirect_pop (void *arg)
|
||||
{
|
||||
struct ui_out *uiout = (struct ui_out *) arg;
|
||||
|
||||
uiout->redirect (NULL);
|
||||
}
|
||||
|
||||
/* Return a new cleanup that pops the last redirection by ui_out_redirect
|
||||
with NULL parameter. */
|
||||
|
||||
struct cleanup *
|
||||
make_cleanup_ui_out_redirect_pop (struct ui_out *uiout)
|
||||
{
|
||||
return make_cleanup (do_ui_out_redirect_pop, uiout);
|
||||
}
|
||||
|
||||
static void
|
||||
do_free_section_addr_info (void *arg)
|
||||
{
|
||||
|
@ -205,10 +205,6 @@ private:
|
||||
|
||||
/* Cleanup utilities. */
|
||||
|
||||
struct ui_out;
|
||||
extern struct cleanup *
|
||||
make_cleanup_ui_out_redirect_pop (struct ui_out *uiout);
|
||||
|
||||
struct section_addr_info;
|
||||
extern struct cleanup *(make_cleanup_free_section_addr_info
|
||||
(struct section_addr_info *));
|
||||
|
Loading…
Reference in New Issue
Block a user