gdb: Make use of 'add_info' to create info sub-commands.
[deliverable/binutils-gdb.git] / gdb / cp-namespace.c
index aa29c920e11581a3ee05c0a3437402f95e398d7b..989544be0c8b7bbd7f4224540c14721376abf4b6 100644 (file)
@@ -31,6 +31,7 @@
 #include "frame.h"
 #include "buildsym.h"
 #include "language.h"
+#include "namespace.h"
 
 static struct block_symbol
   cp_lookup_nested_symbol_1 (struct type *container_type,
@@ -78,8 +79,8 @@ cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
                              ? 0 : previous_component - 2);
              int src_len = next_component;
 
-             char *dest = alloca (dest_len + 1);
-             char *src = alloca (src_len + 1);
+             char *dest = (char *) alloca (dest_len + 1);
+             char *src = (char *) alloca (src_len + 1);
 
              memcpy (dest, name, dest_len);
              memcpy (src, name, src_len);
@@ -91,8 +92,9 @@ cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
                 anonymous namespace.  So add symbols in it to the
                 namespace given by the previous component if there is
                 one, or to the global namespace if there isn't.  */
-             cp_add_using_directive (dest, src, NULL, NULL, NULL, 1,
-                                     &objfile->objfile_obstack);
+             add_using_directive (&local_using_directives,
+                                  dest, src, NULL, NULL, NULL, 1,
+                                  &objfile->objfile_obstack);
            }
          /* The "+ 2" is for the "::".  */
          previous_component = next_component + 2;
@@ -103,102 +105,6 @@ cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
     }
 }
 
-/* Add a using directive to using_directives.  If the using directive
-   in question has already been added, don't add it twice.
-
-   Create a new struct using_direct which imports the namespace SRC
-   into the scope DEST.  ALIAS is the name of the imported namespace
-   in the current scope.  If ALIAS is NULL then the namespace is known
-   by its original name.  DECLARATION is the name if the imported
-   varable if this is a declaration import (Eg. using A::x), otherwise
-   it is NULL.  EXCLUDES is a list of names not to import from an
-   imported module or NULL.  If COPY_NAMES is non-zero, then the
-   arguments are copied into newly allocated memory so they can be
-   temporaries.  For EXCLUDES the VEC pointers are copied but the
-   pointed to characters are not copied.  */
-
-void
-cp_add_using_directive (const char *dest,
-                       const char *src,
-                       const char *alias,
-                       const char *declaration,
-                       VEC (const_char_ptr) *excludes,
-                       int copy_names,
-                        struct obstack *obstack)
-{
-  struct using_direct *current;
-  struct using_direct *newobj;
-
-  /* Has it already been added?  */
-
-  for (current = using_directives; current != NULL; current = current->next)
-    {
-      int ix;
-      const char *param;
-
-      if (strcmp (current->import_src, src) != 0)
-       continue;
-      if (strcmp (current->import_dest, dest) != 0)
-       continue;
-      if ((alias == NULL && current->alias != NULL)
-         || (alias != NULL && current->alias == NULL)
-         || (alias != NULL && current->alias != NULL
-             && strcmp (alias, current->alias) != 0))
-       continue;
-      if ((declaration == NULL && current->declaration != NULL)
-         || (declaration != NULL && current->declaration == NULL)
-         || (declaration != NULL && current->declaration != NULL
-             && strcmp (declaration, current->declaration) != 0))
-       continue;
-
-      /* Compare the contents of EXCLUDES.  */
-      for (ix = 0; VEC_iterate (const_char_ptr, excludes, ix, param); ix++)
-       if (current->excludes[ix] == NULL
-           || strcmp (param, current->excludes[ix]) != 0)
-         break;
-      if (ix < VEC_length (const_char_ptr, excludes)
-         || current->excludes[ix] != NULL)
-       continue;
-
-      /* Parameters exactly match CURRENT.  */
-      return;
-    }
-
-  newobj = obstack_alloc (obstack, (sizeof (*newobj)
-                                + (VEC_length (const_char_ptr, excludes)
-                                   * sizeof (*newobj->excludes))));
-  memset (newobj, 0, sizeof (*newobj));
-
-  if (copy_names)
-    {
-      newobj->import_src = obstack_copy0 (obstack, src, strlen (src));
-      newobj->import_dest = obstack_copy0 (obstack, dest, strlen (dest));
-    }
-  else
-    {
-      newobj->import_src = src;
-      newobj->import_dest = dest;
-    }
-
-  if (alias != NULL && copy_names)
-    newobj->alias = obstack_copy0 (obstack, alias, strlen (alias));
-  else
-    newobj->alias = alias;
-
-  if (declaration != NULL && copy_names)
-    newobj->declaration = obstack_copy0 (obstack,
-                                     declaration, strlen (declaration));
-  else
-    newobj->declaration = declaration;
-
-  memcpy (newobj->excludes, VEC_address (const_char_ptr, excludes),
-         VEC_length (const_char_ptr, excludes) * sizeof (*newobj->excludes));
-  newobj->excludes[VEC_length (const_char_ptr, excludes)] = NULL;
-
-  newobj->next = using_directives;
-  using_directives = newobj;
-}
-
 /* Test whether or not NAMESPACE looks like it mentions an anonymous
    namespace; return nonzero if so.  */
 
@@ -402,8 +308,8 @@ cp_lookup_symbol_in_namespace (const char *the_namespace, const char *name,
 
   if (the_namespace[0] != '\0')
     {
-      concatenated_name = alloca (strlen (the_namespace) + 2
-                                 + strlen (name) + 1);
+      concatenated_name
+       = (char *) alloca (strlen (the_namespace) + 2 + strlen (name) + 1);
       strcpy (concatenated_name, the_namespace);
       strcat (concatenated_name, "::");
       strcat (concatenated_name, name);
@@ -437,7 +343,7 @@ cp_lookup_symbol_in_namespace (const char *the_namespace, const char *name,
 static void
 reset_directive_searched (void *data)
 {
-  struct using_direct *direct = data;
+  struct using_direct *direct = (struct using_direct *) data;
   direct->searched = 0;
 }
 
@@ -485,6 +391,7 @@ cp_lookup_symbol_via_imports (const char *scope,
   struct cleanup *searched_cleanup;
 
   sym.symbol = NULL;
+  sym.block = NULL;
 
   /* First, try to find the symbol in the given namespace if requested.  */
   if (search_scope_first)
@@ -833,7 +740,7 @@ lookup_namespace_scope (const struct language_defn *langdef,
   if (scope_len == 0 && strchr (name, ':') == NULL)
     return cp_lookup_bare_symbol (langdef, name, block, domain, 1);
 
-  the_namespace = alloca (scope_len + 1);
+  the_namespace = (char *) alloca (scope_len + 1);
   strncpy (the_namespace, scope, scope_len);
   the_namespace[scope_len] = '\0';
   return cp_lookup_symbol_in_namespace (the_namespace, name,
@@ -939,7 +846,7 @@ find_symbol_in_baseclass (struct type *parent_type, const char *name,
        continue;
 
       len = strlen (base_name) + 2 + strlen (name) + 1;
-      concatenated_name = xrealloc (concatenated_name, len);
+      concatenated_name = (char *) xrealloc (concatenated_name, len);
       xsnprintf (concatenated_name, len, "%s::%s", base_name, name);
 
       sym = cp_lookup_nested_symbol_1 (base_type, name, concatenated_name,
@@ -1070,7 +977,7 @@ cp_lookup_nested_symbol (struct type *parent_type,
        int is_in_anonymous;
 
        size = strlen (parent_name) + 2 + strlen (nested_name) + 1;
-       concatenated_name = alloca (size);
+       concatenated_name = (char *) alloca (size);
        xsnprintf (concatenated_name, size, "%s::%s",
                   parent_name, nested_name);
        is_in_anonymous = cp_is_in_anonymous (concatenated_name);
@@ -1169,7 +1076,7 @@ cp_lookup_transparent_type_loop (const char *name,
        return retval;
     }
 
-  full_name = alloca (scope_length + 2 + strlen (name) + 1);
+  full_name = (char *) alloca (scope_length + 2 + strlen (name) + 1);
   strncpy (full_name, scope, scope_length);
   strncpy (full_name + scope_length, "::", 2);
   strcpy (full_name + scope_length + 2, name);
This page took 0.025552 seconds and 4 git commands to generate.