This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA 05/13] Remove directive-searched cleanups


On 2017-11-02 18:36, Tom Tromey wrote:
This removes a few cleanups related to the "searched" field in
struct using_direct, replacing these with scoped_restore.

gdb/ChangeLog
2017-11-02  Tom Tromey  <tom@tromey.com>

	* cp-namespace.c (reset_directive_searched): Remove.
	(cp_lookup_symbol_via_imports): Use scoped_restore.
	* cp-support.c (reset_directive_searched): Remove.
	(make_symbol_overload_list_using): Use scoped_restore.
	* d-namespace.c (d_lookup_symbol_imports): Use scoped_restore.
	(reset_directive_searched): Remove.
---
 gdb/ChangeLog      |  9 +++++++++
 gdb/cp-namespace.c | 25 +++----------------------
 gdb/cp-support.c   | 19 ++-----------------
 gdb/d-namespace.c  | 26 +++-----------------------
 4 files changed, 17 insertions(+), 62 deletions(-)

diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index 214b7e1cf4..d8817c0372 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -338,15 +338,6 @@ cp_lookup_symbol_in_namespace (const char
*the_namespace, const char *name,
   return sym;
 }

-/* Used for cleanups to reset the "searched" flag in case of an error. */
-
-static void
-reset_directive_searched (void *data)
-{
-  struct using_direct *direct = (struct using_direct *) data;
-  direct->searched = 0;
-}
-
 /* Search for NAME by applying all import statements belonging to
    BLOCK which are applicable in SCOPE.  If DECLARATION_ONLY the
    search is restricted to using declarations.
@@ -388,7 +379,6 @@ cp_lookup_symbol_via_imports (const char *scope,
   struct block_symbol sym;
   int len;
   int directive_match;
-  struct cleanup *searched_cleanup;

   sym.symbol = NULL;
   sym.block = NULL;
@@ -425,9 +415,8 @@ cp_lookup_symbol_via_imports (const char *scope,
 	{
 	  /* Mark this import as searched so that the recursive call
 	     does not search it again.  */
-	  current->searched = 1;
-	  searched_cleanup = make_cleanup (reset_directive_searched,
-					   current);
+	  scoped_restore reset_directive_searched
+	    = make_scoped_restore (&current->searched, 1);

 	  /* If there is an import of a single declaration, compare the
 	     imported declaration (after optional renaming by its alias)
@@ -446,9 +435,6 @@ cp_lookup_symbol_via_imports (const char *scope,
 	     search of this import is complete.  */
 	  if (declaration_only || sym.symbol != NULL || current->declaration)
 	    {
-	      current->searched = 0;
-	      discard_cleanups (searched_cleanup);
-
 	      if (sym.symbol != NULL)
 		return sym;

@@ -460,10 +446,7 @@ cp_lookup_symbol_via_imports (const char *scope,
 	    if (strcmp (name, *excludep) == 0)
 	      break;
 	  if (*excludep)
-	    {
-	      discard_cleanups (searched_cleanup);
-	      continue;
-	    }
+	    continue;

In this case, the cleanup is discarded. Shouldn't the same thing happen with the scoped_restore? Or was it an error in the original code, and we always want to reset searched?

There's the same case in d-namespace.c.

Simon


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]