Remove set_batch_flag_and_make_cleanup_restore_page_info

This removes set_batch_flag_and_make_cleanup_restore_page_info and
make_cleanup_restore_page_info in favor of a new RAII class.  This
then allows for the removal of make_cleanup_restore_uinteger and
make_cleanup_restore_integer

ChangeLog
2017-10-03  Tom Tromey  <tom@tromey.com>

	* guile/scm-ports.c (ioscm_with_output_to_port_worker): Update.
	* top.c (execute_command_to_string): Update.
	* utils.c (make_cleanup_restore_page_info): Remove.
	(do_restore_page_info_cleanup): Remove.
	(set_batch_flag_and_restore_page_info):
	New.
	(make_cleanup_restore_page_info): Remove.
	(set_batch_flag_and_make_cleanup_restore_page_info): Remove.
	(~set_batch_flag_and_restore_page_info): New
	(make_cleanup_restore_uinteger): Remove.
	(make_cleanup_restore_integer): Remove.
	(struct restore_integer_closure): Remove.
	(restore_integer): Remove.
	* utils.h (struct set_batch_flag_and_restore_page_info): New
	class.
	(set_batch_flag_and_make_cleanup_restore_page_info): Remove.
	(make_cleanup_restore_page_info): Remove.
	(make_cleanup_restore_uinteger) Remove.
	(make_cleanup_restore_integer) Remove.
This commit is contained in:
Tom Tromey 2017-09-29 22:07:37 -06:00
parent 070365117b
commit b95de2b7ae
5 changed files with 58 additions and 85 deletions

View file

@ -1,3 +1,25 @@
2017-10-03 Tom Tromey <tom@tromey.com>
* guile/scm-ports.c (ioscm_with_output_to_port_worker): Update.
* top.c (execute_command_to_string): Update.
* utils.c (make_cleanup_restore_page_info): Remove.
(do_restore_page_info_cleanup): Remove.
(set_batch_flag_and_restore_page_info):
New.
(make_cleanup_restore_page_info): Remove.
(set_batch_flag_and_make_cleanup_restore_page_info): Remove.
(~set_batch_flag_and_restore_page_info): New
(make_cleanup_restore_uinteger): Remove.
(make_cleanup_restore_integer): Remove.
(struct restore_integer_closure): Remove.
(restore_integer): Remove.
* utils.h (struct set_batch_flag_and_restore_page_info): New
class.
(set_batch_flag_and_make_cleanup_restore_page_info): Remove.
(make_cleanup_restore_page_info): Remove.
(make_cleanup_restore_uinteger) Remove.
(make_cleanup_restore_integer) Remove.
2017-10-03 Tom Tromey <tom@tromey.com> 2017-10-03 Tom Tromey <tom@tromey.com>
* record-full.h (record_full_gdb_operation_disable_set): Return * record-full.h (record_full_gdb_operation_disable_set): Return

View file

@ -461,7 +461,6 @@ static SCM
ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport, ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport,
const char *func_name) const char *func_name)
{ {
struct cleanup *cleanups;
SCM result; SCM result;
SCM_ASSERT_TYPE (gdbscm_is_true (scm_output_port_p (port)), port, SCM_ASSERT_TYPE (gdbscm_is_true (scm_output_port_p (port)), port,
@ -469,7 +468,7 @@ ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport,
SCM_ASSERT_TYPE (gdbscm_is_true (scm_thunk_p (thunk)), thunk, SCM_ASSERT_TYPE (gdbscm_is_true (scm_thunk_p (thunk)), thunk,
SCM_ARG2, func_name, _("thunk")); SCM_ARG2, func_name, _("thunk"));
cleanups = set_batch_flag_and_make_cleanup_restore_page_info (); set_batch_flag_and_restore_page_info save_page_info;
scoped_restore restore_async = make_scoped_restore (&current_ui->async, 0); scoped_restore restore_async = make_scoped_restore (&current_ui->async, 0);
@ -493,8 +492,6 @@ ioscm_with_output_to_port_worker (SCM port, SCM thunk, enum oport oport,
result = gdbscm_safe_call_0 (thunk, NULL); result = gdbscm_safe_call_0 (thunk, NULL);
} }
do_cleanups (cleanups);
if (gdbscm_is_exception (result)) if (gdbscm_is_exception (result))
gdbscm_throw (result); gdbscm_throw (result);

View file

@ -666,11 +666,9 @@ execute_command (char *p, int from_tty)
std::string std::string
execute_command_to_string (char *p, int from_tty) execute_command_to_string (char *p, int from_tty)
{ {
struct cleanup *cleanup;
/* GDB_STDOUT should be better already restored during these /* GDB_STDOUT should be better already restored during these
restoration callbacks. */ restoration callbacks. */
cleanup = set_batch_flag_and_make_cleanup_restore_page_info (); set_batch_flag_and_restore_page_info save_page_info;
scoped_restore save_async = make_scoped_restore (&current_ui->async, 0); scoped_restore save_async = make_scoped_restore (&current_ui->async, 0);
@ -694,8 +692,6 @@ execute_command_to_string (char *p, int from_tty)
execute_command (p, from_tty); execute_command (p, from_tty);
} }
do_cleanups (cleanup);
return std::move (str_file.string ()); return std::move (str_file.string ());
} }

View file

@ -150,44 +150,6 @@ make_cleanup_free_section_addr_info (struct section_addr_info *addrs)
return make_cleanup (do_free_section_addr_info, addrs); return make_cleanup (do_free_section_addr_info, addrs);
} }
struct restore_integer_closure
{
int *variable;
int value;
};
static void
restore_integer (void *p)
{
struct restore_integer_closure *closure
= (struct restore_integer_closure *) p;
*(closure->variable) = closure->value;
}
/* Remember the current value of *VARIABLE and make it restored when
the cleanup is run. */
struct cleanup *
make_cleanup_restore_integer (int *variable)
{
struct restore_integer_closure *c = XNEW (struct restore_integer_closure);
c->variable = variable;
c->value = *variable;
return make_cleanup_dtor (restore_integer, (void *) c, xfree);
}
/* Remember the current value of *VARIABLE and make it restored when
the cleanup is run. */
struct cleanup *
make_cleanup_restore_uinteger (unsigned int *variable)
{
return make_cleanup_restore_integer ((int *) variable);
}
/* Helper for make_cleanup_unpush_target. */ /* Helper for make_cleanup_unpush_target. */
static void static void
@ -1464,42 +1426,23 @@ filtered_printing_initialized (void)
return wrap_buffer != NULL; return wrap_buffer != NULL;
} }
/* Helper for make_cleanup_restore_page_info. */ set_batch_flag_and_restore_page_info::set_batch_flag_and_restore_page_info ()
: m_save_lines_per_page (lines_per_page),
static void m_save_chars_per_line (chars_per_line),
do_restore_page_info_cleanup (void *arg) m_save_batch_flag (batch_flag)
{ {
set_screen_size ();
set_width ();
}
/* Provide cleanup for restoring the terminal size. */
struct cleanup *
make_cleanup_restore_page_info (void)
{
struct cleanup *back_to;
back_to = make_cleanup (do_restore_page_info_cleanup, NULL);
make_cleanup_restore_uinteger (&lines_per_page);
make_cleanup_restore_uinteger (&chars_per_line);
return back_to;
}
/* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
Provide cleanup for restoring the original state. */
struct cleanup *
set_batch_flag_and_make_cleanup_restore_page_info (void)
{
struct cleanup *back_to = make_cleanup_restore_page_info ();
make_cleanup_restore_integer (&batch_flag);
batch_flag = 1; batch_flag = 1;
init_page_info (); init_page_info ();
}
return back_to; set_batch_flag_and_restore_page_info::~set_batch_flag_and_restore_page_info ()
{
batch_flag = m_save_batch_flag;
chars_per_line = m_save_chars_per_line;
lines_per_page = m_save_lines_per_page;
set_screen_size ();
set_width ();
} }
/* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */ /* Set the screen size based on LINES_PER_PAGE and CHARS_PER_LINE. */

View file

@ -211,9 +211,6 @@ extern struct cleanup *(make_cleanup_free_section_addr_info
/* For make_cleanup_close see common/filestuff.h. */ /* For make_cleanup_close see common/filestuff.h. */
extern struct cleanup *make_cleanup_restore_integer (int *variable);
extern struct cleanup *make_cleanup_restore_uinteger (unsigned int *variable);
struct target_ops; struct target_ops;
extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops); extern struct cleanup *make_cleanup_unpush_target (struct target_ops *ops);
@ -236,9 +233,27 @@ extern void free_current_contents (void *);
extern void init_page_info (void); extern void init_page_info (void);
extern struct cleanup *make_cleanup_restore_page_info (void); /* Temporarily set BATCH_FLAG and the associated unlimited terminal size.
extern struct cleanup * Restore when destroyed. */
set_batch_flag_and_make_cleanup_restore_page_info (void);
struct set_batch_flag_and_restore_page_info
{
public:
set_batch_flag_and_restore_page_info ();
~set_batch_flag_and_restore_page_info ();
DISABLE_COPY_AND_ASSIGN (set_batch_flag_and_restore_page_info);
private:
/* Note that this doesn't use scoped_restore, because it's important
to control the ordering of operations in the destruction, and it
was simpler to avoid introducing a new ad hoc class. */
unsigned m_save_lines_per_page;
unsigned m_save_chars_per_line;
int m_save_batch_flag;
};
extern struct cleanup *make_bpstat_clear_actions_cleanup (void); extern struct cleanup *make_bpstat_clear_actions_cleanup (void);