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:
Tom Tromey
2017-08-13 14:44:08 -06:00
parent be0d7abb5e
commit a9921622de
2 changed files with 28 additions and 10 deletions

View File

@@ -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> 2017-09-11 Tom Tromey <tom@tromey.com>
* cli/cli-script.c (restore_interp): Remove. * cli/cli-script.c (restore_interp): Remove.

View File

@@ -340,23 +340,36 @@ print_command_lines (struct ui_out *uiout, struct command_line *cmd,
/* Handle pre-post hooks. */ /* Handle pre-post hooks. */
static void class scoped_restore_hook_in
clear_hook_in_cleanup (void *data)
{ {
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 void
execute_cmd_pre_hook (struct cmd_list_element *c) execute_cmd_pre_hook (struct cmd_list_element *c)
{ {
if ((c->hook_pre) && (!c->hook_in)) 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. */ c->hook_in = 1; /* Prevent recursive hooking. */
execute_user_command (c->hook_pre, (char *) 0); 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)) 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. */ c->hook_in = 1; /* Prevent recursive hooking. */
execute_user_command (c->hook_post, (char *) 0); execute_user_command (c->hook_post, (char *) 0);
do_cleanups (cleanups);
} }
} }