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:
parent
9a1e3f0031
commit
b7b633e9b1
13 changed files with 155 additions and 77 deletions
|
@ -1,3 +1,26 @@
|
||||||
|
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.
|
||||||
|
|
||||||
2016-10-21 Tom Tromey <tom@tromey.com>
|
2016-10-21 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* xcoffread.c (read_xcoff_symtab): Make "filestring" const.
|
* xcoffread.c (read_xcoff_symtab): Make "filestring" const.
|
||||||
|
|
|
@ -4255,15 +4255,12 @@ arm_insert_single_step_breakpoint (struct gdbarch *gdbarch,
|
||||||
struct address_space *aspace,
|
struct address_space *aspace,
|
||||||
CORE_ADDR pc)
|
CORE_ADDR pc)
|
||||||
{
|
{
|
||||||
struct cleanup *old_chain
|
scoped_restore save_override_mode
|
||||||
= make_cleanup_restore_integer (&arm_override_mode);
|
= make_scoped_restore (&arm_override_mode,
|
||||||
|
(int) IS_THUMB_ADDR (pc));
|
||||||
arm_override_mode = IS_THUMB_ADDR (pc);
|
|
||||||
pc = gdbarch_addr_bits_remove (gdbarch, pc);
|
pc = gdbarch_addr_bits_remove (gdbarch, pc);
|
||||||
|
|
||||||
insert_single_step_breakpoint (gdbarch, aspace, pc);
|
insert_single_step_breakpoint (gdbarch, aspace, pc);
|
||||||
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
|
/* Given BUF, which is OLD_LEN bytes ending at ENDADDR, expand
|
||||||
|
|
|
@ -380,8 +380,7 @@ execute_user_command (struct cmd_list_element *c, char *args)
|
||||||
not confused with Insight. */
|
not confused with Insight. */
|
||||||
in_user_command = 1;
|
in_user_command = 1;
|
||||||
|
|
||||||
make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
command_nest_depth++;
|
command_nest_depth++;
|
||||||
while (cmdlines)
|
while (cmdlines)
|
||||||
|
@ -654,7 +653,6 @@ static void
|
||||||
while_command (char *arg, int from_tty)
|
while_command (char *arg, int from_tty)
|
||||||
{
|
{
|
||||||
struct command_line *command = NULL;
|
struct command_line *command = NULL;
|
||||||
struct cleanup *old_chain;
|
|
||||||
|
|
||||||
control_level = 1;
|
control_level = 1;
|
||||||
command = get_command_line (while_control, arg);
|
command = get_command_line (while_control, arg);
|
||||||
|
@ -662,13 +660,10 @@ while_command (char *arg, int from_tty)
|
||||||
if (command == NULL)
|
if (command == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
old_chain = make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
execute_control_command_untraced (command);
|
execute_control_command_untraced (command);
|
||||||
free_command_lines (&command);
|
free_command_lines (&command);
|
||||||
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* "if" command support. Execute either the true or false arm depending
|
/* "if" command support. Execute either the true or false arm depending
|
||||||
|
@ -686,13 +681,10 @@ if_command (char *arg, int from_tty)
|
||||||
if (command == NULL)
|
if (command == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
old_chain = make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
execute_control_command_untraced (command);
|
execute_control_command_untraced (command);
|
||||||
free_command_lines (&command);
|
free_command_lines (&command);
|
||||||
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Cleanup */
|
/* Cleanup */
|
||||||
|
@ -1693,10 +1685,8 @@ script_from_file (FILE *stream, const char *file)
|
||||||
source_line_number = 0;
|
source_line_number = 0;
|
||||||
source_file_name = file;
|
source_file_name = file;
|
||||||
|
|
||||||
make_cleanup_restore_integer (¤t_ui->async);
|
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
|
|
||||||
TRY
|
TRY
|
||||||
{
|
{
|
||||||
|
|
99
gdb/common/scoped_restore.h
Normal file
99
gdb/common/scoped_restore.h
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
/* scoped_restore, a simple class for saving and restoring a value
|
||||||
|
|
||||||
|
Copyright (C) 2016 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GDB.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef SCOPED_RESTORE_H
|
||||||
|
#define SCOPED_RESTORE_H
|
||||||
|
|
||||||
|
/* Base class for scoped_restore_tmpl. */
|
||||||
|
struct scoped_restore_base
|
||||||
|
{
|
||||||
|
};
|
||||||
|
|
||||||
|
/* A convenience typedef. Users of make_scoped_restore declare the
|
||||||
|
local RAII object as having this type. */
|
||||||
|
typedef const scoped_restore_base &scoped_restore;
|
||||||
|
|
||||||
|
/* An RAII-based object that saves a variable's value, and then
|
||||||
|
restores it again when this object is destroyed. */
|
||||||
|
template<typename T>
|
||||||
|
class scoped_restore_tmpl : public scoped_restore_base
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/* Create a new scoped_restore object that saves the current value
|
||||||
|
of *VAR. *VAR will be restored when this scoped_restore object
|
||||||
|
is destroyed. */
|
||||||
|
scoped_restore_tmpl (T *var)
|
||||||
|
: m_saved_var (var),
|
||||||
|
m_saved_value (*var)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Create a new scoped_restore object that saves the current value
|
||||||
|
of *VAR, and sets *VAR to VALUE. *VAR will be restored when this
|
||||||
|
scoped_restore object is destroyed. */
|
||||||
|
scoped_restore_tmpl (T *var, T value)
|
||||||
|
: m_saved_var (var),
|
||||||
|
m_saved_value (*var)
|
||||||
|
{
|
||||||
|
*var = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
scoped_restore_tmpl (const scoped_restore_tmpl<T> &other)
|
||||||
|
: m_saved_var (other.m_saved_var),
|
||||||
|
m_saved_value (other.m_saved_value)
|
||||||
|
{
|
||||||
|
other.m_saved_var = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
~scoped_restore_tmpl ()
|
||||||
|
{
|
||||||
|
if (m_saved_var != NULL)
|
||||||
|
*m_saved_var = m_saved_value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
/* No need for this. It is intentionally not defined anywhere. */
|
||||||
|
scoped_restore_tmpl &operator= (const scoped_restore_tmpl &);
|
||||||
|
|
||||||
|
/* The saved variable. */
|
||||||
|
mutable T *m_saved_var;
|
||||||
|
|
||||||
|
/* The saved value. */
|
||||||
|
const T m_saved_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Make a scoped_restore. This is useful because it lets template
|
||||||
|
argument deduction work. */
|
||||||
|
template<typename T>
|
||||||
|
scoped_restore_tmpl<T> make_scoped_restore (T *var)
|
||||||
|
{
|
||||||
|
return scoped_restore_tmpl<T> (var);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make a scoped_restore. This is useful because it lets template
|
||||||
|
argument deduction work. */
|
||||||
|
template<typename T>
|
||||||
|
scoped_restore_tmpl<T> make_scoped_restore (T *var, T value)
|
||||||
|
{
|
||||||
|
return scoped_restore_tmpl<T> (var, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* SCOPED_RESTORE_H */
|
|
@ -91,8 +91,7 @@ compile_file_command (char *arg, int from_tty)
|
||||||
char *buffer;
|
char *buffer;
|
||||||
struct cleanup *cleanup;
|
struct cleanup *cleanup;
|
||||||
|
|
||||||
cleanup = make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
/* Check the user did not just <enter> after command. */
|
/* Check the user did not just <enter> after command. */
|
||||||
if (arg == NULL)
|
if (arg == NULL)
|
||||||
|
@ -115,7 +114,7 @@ compile_file_command (char *arg, int from_tty)
|
||||||
|
|
||||||
arg = skip_spaces (arg);
|
arg = skip_spaces (arg);
|
||||||
arg = gdb_abspath (arg);
|
arg = gdb_abspath (arg);
|
||||||
make_cleanup (xfree, arg);
|
cleanup = make_cleanup (xfree, arg);
|
||||||
buffer = xstrprintf ("#include \"%s\"\n", arg);
|
buffer = xstrprintf ("#include \"%s\"\n", arg);
|
||||||
make_cleanup (xfree, buffer);
|
make_cleanup (xfree, buffer);
|
||||||
eval_compile_command (NULL, buffer, scope, NULL);
|
eval_compile_command (NULL, buffer, scope, NULL);
|
||||||
|
@ -130,11 +129,9 @@ compile_file_command (char *arg, int from_tty)
|
||||||
static void
|
static void
|
||||||
compile_code_command (char *arg, int from_tty)
|
compile_code_command (char *arg, int from_tty)
|
||||||
{
|
{
|
||||||
struct cleanup *cleanup;
|
|
||||||
enum compile_i_scope_types scope = COMPILE_I_SIMPLE_SCOPE;
|
enum compile_i_scope_types scope = COMPILE_I_SIMPLE_SCOPE;
|
||||||
|
|
||||||
cleanup = make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
if (arg != NULL && check_raw_argument (&arg))
|
if (arg != NULL && check_raw_argument (&arg))
|
||||||
{
|
{
|
||||||
|
@ -155,13 +152,12 @@ compile_code_command (char *arg, int from_tty)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct command_line *l = get_command_line (compile_control, "");
|
struct command_line *l = get_command_line (compile_control, "");
|
||||||
|
struct cleanup *cleanup = make_cleanup_free_command_lines (&l);
|
||||||
|
|
||||||
make_cleanup_free_command_lines (&l);
|
|
||||||
l->control_u.compile.scope = scope;
|
l->control_u.compile.scope = scope;
|
||||||
execute_control_command_untraced (l);
|
execute_control_command_untraced (l);
|
||||||
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Callback for compile_print_command. */
|
/* Callback for compile_print_command. */
|
||||||
|
@ -183,12 +179,10 @@ static void
|
||||||
compile_print_command (char *arg_param, int from_tty)
|
compile_print_command (char *arg_param, int from_tty)
|
||||||
{
|
{
|
||||||
const char *arg = arg_param;
|
const char *arg = arg_param;
|
||||||
struct cleanup *cleanup;
|
|
||||||
enum compile_i_scope_types scope = COMPILE_I_PRINT_ADDRESS_SCOPE;
|
enum compile_i_scope_types scope = COMPILE_I_PRINT_ADDRESS_SCOPE;
|
||||||
struct format_data fmt;
|
struct format_data fmt;
|
||||||
|
|
||||||
cleanup = make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
/* Passing &FMT as SCOPE_DATA is safe as do_module_cleanup will not
|
/* Passing &FMT as SCOPE_DATA is safe as do_module_cleanup will not
|
||||||
touch the stale pointer if compile_object_run has already quit. */
|
touch the stale pointer if compile_object_run has already quit. */
|
||||||
|
@ -199,14 +193,13 @@ compile_print_command (char *arg_param, int from_tty)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct command_line *l = get_command_line (compile_control, "");
|
struct command_line *l = get_command_line (compile_control, "");
|
||||||
|
struct cleanup *cleanup = make_cleanup_free_command_lines (&l);
|
||||||
|
|
||||||
make_cleanup_free_command_lines (&l);
|
|
||||||
l->control_u.compile.scope = scope;
|
l->control_u.compile.scope = scope;
|
||||||
l->control_u.compile.scope_data = &fmt;
|
l->control_u.compile.scope_data = &fmt;
|
||||||
execute_control_command_untraced (l);
|
execute_control_command_untraced (l);
|
||||||
|
do_cleanups (cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A cleanup function to remove a directory and all its contents. */
|
/* A cleanup function to remove a directory and all its contents. */
|
||||||
|
|
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
|
/* Asynchronous version of wait_for_inferior. It is called by the
|
||||||
event loop whenever a change of state is detected on the file
|
event loop whenever a change of state is detected on the file
|
||||||
descriptor corresponding to the target. It can be called more than
|
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 execution_control_state *ecs = &ecss;
|
||||||
struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
|
struct cleanup *old_chain = make_cleanup (null_cleanup, NULL);
|
||||||
struct cleanup *ts_old_chain;
|
struct cleanup *ts_old_chain;
|
||||||
enum exec_direction_kind save_exec_dir = execution_direction;
|
|
||||||
int cmd_done = 0;
|
int cmd_done = 0;
|
||||||
ptid_t waiton_ptid = minus_one_ptid;
|
ptid_t waiton_ptid = minus_one_ptid;
|
||||||
|
|
||||||
|
@ -3945,8 +3933,8 @@ fetch_inferior_event (void *client_data)
|
||||||
event. */
|
event. */
|
||||||
target_dcache_invalidate ();
|
target_dcache_invalidate ();
|
||||||
|
|
||||||
make_cleanup (restore_execution_direction, &save_exec_dir);
|
scoped_restore save_exec_dir
|
||||||
execution_direction = target_execution_direction ();
|
= make_scoped_restore (&execution_direction, target_execution_direction ());
|
||||||
|
|
||||||
ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws,
|
ecs->ptid = do_target_wait (waiton_ptid, &ecs->ws,
|
||||||
target_can_async_p () ? TARGET_WNOHANG : 0);
|
target_can_async_p () ? TARGET_WNOHANG : 0);
|
||||||
|
|
|
@ -680,7 +680,6 @@ checkpoint_command (char *args, int from_tty)
|
||||||
struct value *fork_fn = NULL, *ret;
|
struct value *fork_fn = NULL, *ret;
|
||||||
struct fork_info *fp;
|
struct fork_info *fp;
|
||||||
pid_t retpid;
|
pid_t retpid;
|
||||||
struct cleanup *old_chain;
|
|
||||||
|
|
||||||
if (!target_has_execution)
|
if (!target_has_execution)
|
||||||
error (_("The program is not being run."));
|
error (_("The program is not being run."));
|
||||||
|
@ -704,11 +703,13 @@ checkpoint_command (char *args, int from_tty)
|
||||||
ret = value_from_longest (builtin_type (gdbarch)->builtin_int, 0);
|
ret = value_from_longest (builtin_type (gdbarch)->builtin_int, 0);
|
||||||
|
|
||||||
/* Tell linux-nat.c that we're checkpointing this inferior. */
|
/* Tell linux-nat.c that we're checkpointing this inferior. */
|
||||||
old_chain = make_cleanup_restore_integer (&checkpointing_pid);
|
{
|
||||||
checkpointing_pid = ptid_get_pid (inferior_ptid);
|
scoped_restore save_pid
|
||||||
|
= make_scoped_restore (&checkpointing_pid, ptid_get_pid (inferior_ptid));
|
||||||
|
|
||||||
|
ret = call_function_by_hand (fork_fn, 0, &ret);
|
||||||
|
}
|
||||||
|
|
||||||
ret = call_function_by_hand (fork_fn, 0, &ret);
|
|
||||||
do_cleanups (old_chain);
|
|
||||||
if (!ret) /* Probably can't happen. */
|
if (!ret) /* Probably can't happen. */
|
||||||
error (_("checkpoint: call_function_by_hand returned null."));
|
error (_("checkpoint: call_function_by_hand returned null."));
|
||||||
|
|
||||||
|
|
|
@ -608,7 +608,6 @@ mi_cmd_var_assign (char *command, char **argv, int argc)
|
||||||
struct ui_out *uiout = current_uiout;
|
struct ui_out *uiout = current_uiout;
|
||||||
struct varobj *var;
|
struct varobj *var;
|
||||||
char *expression, *val;
|
char *expression, *val;
|
||||||
struct cleanup *cleanup;
|
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
error (_("-var-assign: Usage: NAME EXPRESSION."));
|
error (_("-var-assign: Usage: NAME EXPRESSION."));
|
||||||
|
@ -623,9 +622,8 @@ mi_cmd_var_assign (char *command, char **argv, int argc)
|
||||||
|
|
||||||
/* MI command '-var-assign' may write memory, so suppress memory
|
/* MI command '-var-assign' may write memory, so suppress memory
|
||||||
changed notification if it does. */
|
changed notification if it does. */
|
||||||
cleanup
|
scoped_restore save_suppress
|
||||||
= make_cleanup_restore_integer (&mi_suppress_notification.memory);
|
= make_scoped_restore (&mi_suppress_notification.memory, 1);
|
||||||
mi_suppress_notification.memory = 1;
|
|
||||||
|
|
||||||
if (!varobj_set_value (var, expression))
|
if (!varobj_set_value (var, expression))
|
||||||
error (_("-var-assign: Could not assign "
|
error (_("-var-assign: Could not assign "
|
||||||
|
@ -634,8 +632,6 @@ mi_cmd_var_assign (char *command, char **argv, int argc)
|
||||||
val = varobj_get_value (var);
|
val = varobj_get_value (var);
|
||||||
ui_out_field_string (uiout, "value", val);
|
ui_out_field_string (uiout, "value", val);
|
||||||
xfree (val);
|
xfree (val);
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Type used for parameters passing to mi_cmd_var_update_iter. */
|
/* Type used for parameters passing to mi_cmd_var_update_iter. */
|
||||||
|
|
|
@ -301,7 +301,7 @@ exec_continue (char **argv, int argc)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct cleanup *back_to = make_cleanup_restore_integer (&sched_multi);
|
scoped_restore save_multi = make_scoped_restore (&sched_multi);
|
||||||
|
|
||||||
if (current_context->all)
|
if (current_context->all)
|
||||||
{
|
{
|
||||||
|
@ -316,7 +316,6 @@ exec_continue (char **argv, int argc)
|
||||||
same. */
|
same. */
|
||||||
continue_1 (1);
|
continue_1 (1);
|
||||||
}
|
}
|
||||||
do_cleanups (back_to);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1937,7 +1937,6 @@ undisplay_command (char *args, int from_tty)
|
||||||
static void
|
static void
|
||||||
do_one_display (struct display *d)
|
do_one_display (struct display *d)
|
||||||
{
|
{
|
||||||
struct cleanup *old_chain;
|
|
||||||
int within_current_scope;
|
int within_current_scope;
|
||||||
|
|
||||||
if (d->enabled_p == 0)
|
if (d->enabled_p == 0)
|
||||||
|
@ -1989,8 +1988,8 @@ do_one_display (struct display *d)
|
||||||
if (!within_current_scope)
|
if (!within_current_scope)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
old_chain = make_cleanup_restore_integer (¤t_display_number);
|
scoped_restore save_display_number
|
||||||
current_display_number = d->number;
|
= make_scoped_restore (¤t_display_number, d->number);
|
||||||
|
|
||||||
annotate_display_begin ();
|
annotate_display_begin ();
|
||||||
printf_filtered ("%d", d->number);
|
printf_filtered ("%d", d->number);
|
||||||
|
@ -2078,7 +2077,6 @@ do_one_display (struct display *d)
|
||||||
annotate_display_end ();
|
annotate_display_end ();
|
||||||
|
|
||||||
gdb_flush (gdb_stdout);
|
gdb_flush (gdb_stdout);
|
||||||
do_cleanups (old_chain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display all of the values on the auto-display chain which can be
|
/* Display all of the values on the auto-display chain which can be
|
||||||
|
|
|
@ -319,11 +319,9 @@ static void
|
||||||
python_interactive_command (char *arg, int from_tty)
|
python_interactive_command (char *arg, int from_tty)
|
||||||
{
|
{
|
||||||
struct ui *ui = current_ui;
|
struct ui *ui = current_ui;
|
||||||
struct cleanup *cleanup;
|
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
cleanup = make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
arg = skip_spaces (arg);
|
arg = skip_spaces (arg);
|
||||||
|
|
||||||
|
@ -351,8 +349,6 @@ python_interactive_command (char *arg, int from_tty)
|
||||||
gdbpy_print_stack ();
|
gdbpy_print_stack ();
|
||||||
error (_("Error while executing Python code."));
|
error (_("Error while executing Python code."));
|
||||||
}
|
}
|
||||||
|
|
||||||
do_cleanups (cleanup);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* A wrapper around PyRun_SimpleFile. FILE is the Python script to run
|
/* A wrapper around PyRun_SimpleFile. FILE is the Python script to run
|
||||||
|
@ -467,8 +463,7 @@ python_command (char *arg, int from_tty)
|
||||||
|
|
||||||
cleanup = ensure_python_env (get_current_arch (), current_language);
|
cleanup = ensure_python_env (get_current_arch (), current_language);
|
||||||
|
|
||||||
make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
arg = skip_spaces (arg);
|
arg = skip_spaces (arg);
|
||||||
if (arg && *arg)
|
if (arg && *arg)
|
||||||
|
@ -651,8 +646,7 @@ execute_gdb_command (PyObject *self, PyObject *args, PyObject *kw)
|
||||||
struct cleanup *cleanup = make_cleanup (xfree, copy);
|
struct cleanup *cleanup = make_cleanup (xfree, copy);
|
||||||
struct interp *interp;
|
struct interp *interp;
|
||||||
|
|
||||||
make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
make_cleanup_restore_current_uiout ();
|
make_cleanup_restore_current_uiout ();
|
||||||
|
|
||||||
|
|
|
@ -701,8 +701,7 @@ execute_command_to_string (char *p, int from_tty)
|
||||||
restoration callbacks. */
|
restoration callbacks. */
|
||||||
cleanup = set_batch_flag_and_make_cleanup_restore_page_info ();
|
cleanup = set_batch_flag_and_make_cleanup_restore_page_info ();
|
||||||
|
|
||||||
make_cleanup_restore_integer (¤t_ui->async);
|
scoped_restore save_async = make_scoped_restore (¤t_ui->async, 0);
|
||||||
current_ui->async = 0;
|
|
||||||
|
|
||||||
str_file = mem_fileopen ();
|
str_file = mem_fileopen ();
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#define UTILS_H
|
#define UTILS_H
|
||||||
|
|
||||||
#include "exceptions.h"
|
#include "exceptions.h"
|
||||||
|
#include "common/scoped_restore.h"
|
||||||
|
|
||||||
extern void initialize_utils (void);
|
extern void initialize_utils (void);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue