mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-03 04:12:10 +08:00
Replace clear_hook_in_cleanup with scoped_restore_hook_in
This removes clear_hook_in_cleanup in favor of a scoped_restore-like class. scoped_restore itself can't be used because hook_in is a bitfield. ChangeLog 2017-09-11 Tom Tromey <tom@tromey.com> * cli/cli-script.c (class scoped_restore_hook_in): New. (clear_hook_in_cleanup): Remove. (execute_cmd_pre_hook, execute_cmd_post_hook): Use scoped_restore_hook_in.
This commit is contained in:
parent
be0d7abb5e
commit
a9921622de
@ -1,3 +1,10 @@
|
||||
2017-09-11 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* cli/cli-script.c (class scoped_restore_hook_in): New.
|
||||
(clear_hook_in_cleanup): Remove.
|
||||
(execute_cmd_pre_hook, execute_cmd_post_hook): Use
|
||||
scoped_restore_hook_in.
|
||||
|
||||
2017-09-11 Tom Tromey <tom@tromey.com>
|
||||
|
||||
* cli/cli-script.c (restore_interp): Remove.
|
||||
|
@ -340,23 +340,36 @@ print_command_lines (struct ui_out *uiout, struct command_line *cmd,
|
||||
|
||||
/* Handle pre-post hooks. */
|
||||
|
||||
static void
|
||||
clear_hook_in_cleanup (void *data)
|
||||
class scoped_restore_hook_in
|
||||
{
|
||||
struct cmd_list_element *c = (struct cmd_list_element *) data;
|
||||
public:
|
||||
|
||||
c->hook_in = 0; /* Allow hook to work again once it is complete. */
|
||||
}
|
||||
scoped_restore_hook_in (struct cmd_list_element *c)
|
||||
: m_cmd (c)
|
||||
{
|
||||
}
|
||||
|
||||
~scoped_restore_hook_in ()
|
||||
{
|
||||
m_cmd->hook_in = 0;
|
||||
}
|
||||
|
||||
scoped_restore_hook_in (const scoped_restore_hook_in &) = delete;
|
||||
scoped_restore_hook_in &operator= (const scoped_restore_hook_in &) = delete;
|
||||
|
||||
private:
|
||||
|
||||
struct cmd_list_element *m_cmd;
|
||||
};
|
||||
|
||||
void
|
||||
execute_cmd_pre_hook (struct cmd_list_element *c)
|
||||
{
|
||||
if ((c->hook_pre) && (!c->hook_in))
|
||||
{
|
||||
struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
|
||||
scoped_restore_hook_in restore_hook (c);
|
||||
c->hook_in = 1; /* Prevent recursive hooking. */
|
||||
execute_user_command (c->hook_pre, (char *) 0);
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
}
|
||||
|
||||
@ -365,11 +378,9 @@ execute_cmd_post_hook (struct cmd_list_element *c)
|
||||
{
|
||||
if ((c->hook_post) && (!c->hook_in))
|
||||
{
|
||||
struct cleanup *cleanups = make_cleanup (clear_hook_in_cleanup, c);
|
||||
|
||||
scoped_restore_hook_in restore_hook (c);
|
||||
c->hook_in = 1; /* Prevent recursive hooking. */
|
||||
execute_user_command (c->hook_post, (char *) 0);
|
||||
do_cleanups (cleanups);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user