From a9921622de0a7332a333c5206ce8cd632803df97 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 13 Aug 2017 14:44:08 -0600 Subject: [PATCH] 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 * 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. --- gdb/ChangeLog | 7 +++++++ gdb/cli/cli-script.c | 31 +++++++++++++++++++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 00fbd0b0a3a..a0dfb782383 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2017-09-11 Tom Tromey + + * 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 * cli/cli-script.c (restore_interp): Remove. diff --git a/gdb/cli/cli-script.c b/gdb/cli/cli-script.c index dc3e856bcfd..37466fd7663 100644 --- a/gdb/cli/cli-script.c +++ b/gdb/cli/cli-script.c @@ -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); } }