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: [PATCH 5/5] cp-namespace.c cleanup pass: remove redundancies in cp_lookup_symbol_nonlocal


Doug Evans <xdje42@gmail.com> writes:
> Hi.
>
> This patch removes some redundancies in cp_lookup_symbol_nonlocal.
>
> It also makes cp_lookup_symbol_nonlocal way easier for me to understand.
> cp_lookup_symbol_nonlocal basically just calls two functions:
>
>   sym = lookup_namespace_scope (name, block,
> 				domain, scope, 0);
>   if (sym != NULL)
>     return sym;
>
>   return cp_lookup_symbol_namespace (scope, name,
> 				     block, domain);
>
> One has to dig to understand what's going on here because
> the names lookup_namespace_scope and cp_lookup_symbol_namespace
> are quite similar and a bit opaque.
>
> The redundancy is that the first thing cp_lookup_symbol_namespace does
> is repeat what we've already done in the call to lookup_namespace_scope.
>
> So this patch just factors out the cp_lookup_symbol_via_imports loop
> and calls that from both cp_lookup_symbol_namespace and
> cp_lookup_symbol_nonlocal.

Hi.
Here is a revised patch for current HEAD.

2014-12-17  Doug Evans  <xdje42@gmail.com>

	* cp-namespace.c (cp_lookup_symbol_via_all_imports): New function.
	(cp_lookup_symbol_namespace): Call it.
	(cp_lookup_symbol_nonlocal): Ditto.

diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index c58efa4..6e256e1 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -678,12 +678,35 @@ cp_lookup_symbol_imports_or_template (const char *scope,
   return result;
 }
 
+/* Search for NAME by applying relevant import statements belonging to BLOCK
+   and its parents.  SCOPE is the namespace scope of the context in which the
+   search is being evaluated.  */
+
+static struct symbol *
+cp_lookup_symbol_via_all_imports (const char *scope, const char *name,
+				  const struct block *block,
+				  const domain_enum domain)
+{
+  struct symbol *sym;
+
+  while (block != NULL)
+    {
+      sym = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 0, 1);
+      if (sym)
+	return sym;
+
+      block = BLOCK_SUPERBLOCK (block);
+    }
+
+  return NULL;
+}
+
 /* Searches for NAME in the current namespace, and by applying
    relevant import statements belonging to BLOCK and its parents.
    SCOPE is the namespace scope of the context in which the search is
    being evaluated.  */
 
-struct symbol*
+struct symbol *
 cp_lookup_symbol_namespace (const char *scope,
                             const char *name,
                             const struct block *block,
@@ -700,46 +723,19 @@ cp_lookup_symbol_namespace (const char *scope,
     }
 
   /* First, try to find the symbol in the given namespace.  */
-  sym = cp_lookup_symbol_in_namespace (scope, name,
-				       block, domain, 1);
-  if (sym != NULL)
-    {
-      if (symbol_lookup_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "cp_lookup_symbol_namespace (...) = %s\n",
-			      host_address_to_string (sym));
-	}
-      return sym;
-    }
-
-  /* Search for name in namespaces imported to this and parent
-     blocks.  */
-  while (block != NULL)
-    {
-      sym = cp_lookup_symbol_via_imports (scope, name, block,
-					  domain, 0, 0, 1);
-
-      if (sym)
-	{
-	  if (symbol_lookup_debug)
-	    {
-	      fprintf_unfiltered (gdb_stdlog,
-				  "cp_lookup_symbol_namespace (...) = %s\n",
-				  host_address_to_string (sym));
-	    }
-	  return sym;
-	}
+  sym = cp_lookup_symbol_in_namespace (scope, name, block, domain, 1);
 
-      block = BLOCK_SUPERBLOCK (block);
-    }
+  /* Search for name in namespaces imported to this and parent blocks.  */
+  if (sym == NULL)
+    sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain);
 
   if (symbol_lookup_debug)
     {
       fprintf_unfiltered (gdb_stdlog,
-			  "cp_lookup_symbol_namespace (...) = NULL\n");
+			  "cp_lookup_symbol_namespace (...) = %s\n",
+			  sym != NULL ? host_address_to_string (sym) : "NULL");
     }
-  return NULL;
+  return sym;
 }
 
 /* Lookup NAME at namespace scope (or, in C terms, in static and
@@ -819,19 +815,14 @@ cp_lookup_symbol_nonlocal (const char *name,
 			  domain_name (domain));
     }
 
+  /* First, try to find the symbol in the given namespace, and all
+     containing namespaces.  */
   sym = lookup_namespace_scope (name, block, domain, scope, 0);
-  if (sym != NULL)
-    {
-      if (symbol_lookup_debug)
-	{
-	  fprintf_unfiltered (gdb_stdlog,
-			      "cp_lookup_symbol_nonlocal (...) = %s\n",
-			      host_address_to_string (sym));
-	}
-      return sym;
-    }
 
-  sym = cp_lookup_symbol_namespace (scope, name, block, domain);
+  /* Search for name in namespaces imported to this and parent blocks.  */
+  if (sym == NULL)
+    sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain);
+
   if (symbol_lookup_debug)
     {
       fprintf_unfiltered (gdb_stdlog,


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