forked from Imagelibrary/binutils-gdb
Use RAII to save and restore scalars
This patch replaces many (but not all) uses of make_cleanup_restore_integer with a simple RAII-based template class. It also removes the similar restore_execution_direction cleanup in favor of this new class. Subsequent patches will replace other similar cleanups with this class. The class is typically instantiated using make_scoped_restore. This allows for template argument deduction. 2016-10-21 Tom Tromey <tom@tromey.com> * common/scoped_restore.h: New file. * utils.h: Include scoped_restore.h. * top.c (execute_command_to_string): Use scoped_restore. * python/python.c (python_interactive_command): Use scoped_restore. (python_command, execute_gdb_command): Likewise. * printcmd.c (do_one_display): Use scoped_restore. * mi/mi-main.c (exec_continue): Use scoped_restore. * mi/mi-cmd-var.c (mi_cmd_var_assign): Use scoped_restore. * linux-fork.c (checkpoint_command): Use scoped_restore. * infrun.c (restore_execution_direction): Remove. (fetch_inferior_event): Use scoped_restore. * compile/compile.c (compile_file_command): Use scoped_restore. (compile_code_command, compile_print_command): Likewise. * cli/cli-script.c (execute_user_command): Use scoped_restore. (while_command, if_command, script_from_file): Likewise. * arm-tdep.c (arm_insert_single_step_breakpoint): Use scoped_restore.
This commit is contained in:
16
gdb/infrun.c
16
gdb/infrun.c
@@ -3879,17 +3879,6 @@ all_uis_on_sync_execution_starting (void)
|
||||
}
|
||||
}
|
||||
|
||||
/* A cleanup that restores the execution direction to the value saved
|
||||
in *ARG. */
|
||||
|
||||
static void
|
||||
restore_execution_direction (void *arg)
|
||||
{
|
||||
enum exec_direction_kind *save_exec_dir = (enum exec_direction_kind *) arg;
|
||||
|
||||
execution_direction = *save_exec_dir;
|
||||
}
|
||||
|
||||
/* Asynchronous version of wait_for_inferior. It is called by the
|
||||
event loop whenever a change of state is detected on the file
|
||||
descriptor corresponding to the target. It can be called more than
|
||||
@@ -3906,7 +3895,6 @@ fetch_inferior_event (void *client_data)
|
||||
struct execution_control_state *ecs = &ecss;
|
||||
struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
|
||||
struct cleanup *ts_old_chain;
|
||||
enum exec_direction_kind save_exec_dir = execution_direction;
|
||||
int cmd_done = 0;
|
||||
ptid_t waiton_ptid = minus_one_ptid;
|
||||
|
||||
@@ -3945,8 +3933,8 @@ fetch_inferior_event (void *client_data)
|
||||
event. */
|
||||
target_dcache_invalidate ();
|
||||
|
||||
make_cleanup (restore_execution_direction, &save_exec_dir);
|
||||
execution_direction = target_execution_direction ();
|
||||
scoped_restore save_exec_dir
|
||||
= make_scoped_restore (&execution_direction, target_execution_direction ());
|
||||
|
||||
ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws,
|
||||
target_can_async_p () ? TARGET_WNOHANG : 0);
|
||||
|
||||
Reference in New Issue
Block a user