2010-03-09 Sami Wagiaalla <swagiaal@redhat.com>
authorSami Wagiaalla <swagiaal@redhat.com>
Wed, 10 Mar 2010 16:22:29 +0000 (16:22 +0000)
committerSami Wagiaalla <swagiaal@redhat.com>
Wed, 10 Mar 2010 16:22:29 +0000 (16:22 +0000)
PR C++/11236:
* cp-namespace.c (cp_add_using): Deleted.
(cp_add_using_directive): Use obstack allocations.
Merged the function cp_add_using into this one.
Added 'struct obstack *' argument.
(cp_scan_for_anonymous_namespaces): Updated.
* cp-support.h: Updated.
* dwarf2read.c (read_import_statement): Updated.
(read_namespace): Updated.

gdb/ChangeLog
gdb/cp-namespace.c
gdb/cp-support.h
gdb/dwarf2read.c

index 45baf5cf18284efdf05cb083d2e232ec9bd53cc5..ad91ff6fcdda7ca56dbe83f336b1c3b78dc89818 100644 (file)
@@ -1,3 +1,15 @@
+2010-03-10  Sami Wagiaalla  <swagiaal@redhat.com>
+
+       PR C++/11236:
+       * cp-namespace.c (cp_add_using): Deleted.
+       (cp_add_using_directive): Use obstack allocations.
+       Merged the function cp_add_using into this one.
+       Added 'struct obstack *' argument.
+       (cp_scan_for_anonymous_namespaces): Updated.
+       * cp-support.h: Updated.
+       * dwarf2read.c (read_import_statement): Updated.
+       (read_namespace): Updated.
+
 2010-03-10  Pierre Muller  <muller@ics.u-strasbg.fr>
 
        * windows-nat.c (cygwin_conv_path): Remove old macro.
index ba134929c378555e2081ba8967bebcab52517dde..edac2bd86421e385bd75c75172f4ce0e7a0dde3e 100644 (file)
@@ -115,7 +115,8 @@ cp_scan_for_anonymous_namespaces (const struct symbol *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);
+             cp_add_using_directive (dest, src, NULL,
+                                     &SYMBOL_SYMTAB (symbol)->objfile->objfile_obstack);
            }
          /* The "+ 2" is for the "::".  */
          previous_component = next_component + 2;
@@ -126,11 +127,18 @@ cp_scan_for_anonymous_namespaces (const struct symbol *symbol)
     }
 }
 
-/* Add a using directive to using_list. If the using directive in question
-   has already been added, don't add it twice.  */
+
+/* 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.
+   The arguments are copied into newly allocated memory so they can be 
+   temporaries.  */
 
 void
-cp_add_using_directive (const char *dest, const char *src, const char *alias)
+cp_add_using_directive (const char *dest, const char *src, const char *alias,
+                        struct obstack *obstack)
 {
   struct using_direct *current;
   struct using_direct *new;
@@ -140,12 +148,23 @@ cp_add_using_directive (const char *dest, const char *src, const char *alias)
   for (current = using_directives; current != NULL; current = current->next)
     {
       if (strcmp (current->import_src, src) == 0
-          && strcmp (current->import_dest, dest) == 0)
+          && strcmp (current->import_dest, dest) == 0
+          && ((alias == NULL && current->alias == NULL)
+              || (alias != NULL && current->alias != NULL
+                 && strcmp (alias, current->alias) == 0)))
        return;
     }
 
-  using_directives = cp_add_using (dest, src, alias, using_directives);
+  new = OBSTACK_ZALLOC (obstack, struct using_direct);
 
+  new->import_src = obsavestring (src, strlen (src), obstack);
+  new->import_dest = obsavestring (dest, strlen (dest), obstack);
+
+  if (alias != NULL)
+    new->alias = obsavestring (alias, strlen (alias), obstack);
+
+  new->next = using_directives;
+  using_directives = new;
 }
 
 /* Record the namespace that the function defined by SYMBOL was
@@ -196,36 +215,6 @@ cp_is_anonymous (const char *namespace)
          != NULL);
 }
 
-/* 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.
-   Set its next member in the linked list to NEXT; allocate all memory
-   using xmalloc.  It copies the strings, so NAME can be a temporary
-   string.  */
-
-struct using_direct *
-cp_add_using (const char *dest,
-              const char *src,
-              const char *alias,
-             struct using_direct *next)
-{
-  struct using_direct *retval;
-
-  retval = xmalloc (sizeof (struct using_direct));
-  retval->import_src = savestring (src, strlen(src));
-  retval->import_dest = savestring (dest, strlen(dest));
-
-  if (alias != NULL)
-    retval->alias = savestring (alias, strlen (alias));
-  else
-    retval->alias = NULL;
-
-  retval->next = next;
-  retval->searched = 0;
-
-  return retval;
-}
-
 /* The C++-specific version of name lookup for static and global
    names.  This makes sure that names get looked for in all namespaces
    that are in scope.  NAME is the natural name of the symbol that
index 619dc1f3bad8efd73c9d3ac414fab1d24fe4aa8b..e10f5a979fdecc345c3cad7d6440103eb0acd604 100644 (file)
@@ -90,12 +90,8 @@ extern int cp_is_anonymous (const char *namespace);
 
 extern void cp_add_using_directive (const char *dest,
                                     const char *src,
-                                    const char *alias);
-
-extern struct using_direct *cp_add_using (const char *dest,
-                                          const char *src,
-                                          const char *alias,
-                                         struct using_direct *next);
+                                    const char *alias,
+                                    struct obstack *obstack);
 
 extern void cp_initialize_namespace (void);
 
index fd75c74d43e1be66e1521b8d78b1e62c6147e2c4..378d192790c36efc3a46347cf59df5e912f5e140 100644 (file)
@@ -3530,10 +3530,10 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
       strcpy (canonical_name, imported_name);
     }
 
-  using_directives = cp_add_using (import_prefix,
-                                   canonical_name,
-                                   import_alias,
-                                   using_directives);
+  cp_add_using_directive (import_prefix,
+                          canonical_name,
+                          import_alias,
+                          &cu->objfile->objfile_obstack);
 }
 
 static void
@@ -5651,7 +5651,8 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
       if (is_anonymous)
        {
          const char *previous_prefix = determine_prefix (die, cu);
-         cp_add_using_directive (previous_prefix, TYPE_NAME (type), NULL);
+         cp_add_using_directive (previous_prefix, TYPE_NAME (type), NULL,
+                                 &objfile->objfile_obstack);
        }
     }