2010-03-09 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.
This commit is contained in:
parent
452fa0647c
commit
c0cc3a7670
4 changed files with 45 additions and 47 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue