mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-07-29 12:53:43 +08:00
2010-02-05 Sami Wagiaalla <swagiaal@redhat.com>
PR c++/7935: * gdb.cp/namespace-using.exp: Removed kfail; bug has been fixed. 2010-02-05 Sami Wagiaalla <swagiaal@redhat.com> PR c++/7935: * cp-support.h: Added char* alias element to using_direct data struct. (cp_add_using): Added char* alias argument. (cp_add_using_directive): Ditto. * cp-namespace.c: Updated with the above changes. (cp_lookup_symbol_imports): Check for aliases. * dwarf2read.c (read_import_statement): Figure out local alias for the import and pass it on to cp_add_using. (read_namespace): Pass alias argument to cp_add_using.
This commit is contained in:
@ -117,7 +117,7 @@ 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);
|
||||
cp_add_using_directive (dest, src, NULL);
|
||||
}
|
||||
/* The "+ 2" is for the "::". */
|
||||
previous_component = next_component + 2;
|
||||
@ -132,7 +132,7 @@ cp_scan_for_anonymous_namespaces (const struct symbol *symbol)
|
||||
has already been added, don't add it twice. */
|
||||
|
||||
void
|
||||
cp_add_using_directive (const char *dest, const char *src)
|
||||
cp_add_using_directive (const char *dest, const char *src, const char *alias)
|
||||
{
|
||||
struct using_direct *current;
|
||||
struct using_direct *new;
|
||||
@ -146,7 +146,7 @@ cp_add_using_directive (const char *dest, const char *src)
|
||||
return;
|
||||
}
|
||||
|
||||
using_directives = cp_add_using (dest, src, using_directives);
|
||||
using_directives = cp_add_using (dest, src, alias, using_directives);
|
||||
|
||||
}
|
||||
|
||||
@ -198,8 +198,9 @@ cp_is_anonymous (const char *namespace)
|
||||
!= NULL);
|
||||
}
|
||||
|
||||
/* Create a new struct using direct which imports the namespace SRC
|
||||
into the scope DEST.
|
||||
/* 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. */
|
||||
@ -207,6 +208,7 @@ cp_is_anonymous (const char *namespace)
|
||||
struct using_direct *
|
||||
cp_add_using (const char *dest,
|
||||
const char *src,
|
||||
const char *alias,
|
||||
struct using_direct *next)
|
||||
{
|
||||
struct using_direct *retval;
|
||||
@ -214,6 +216,12 @@ cp_add_using (const char *dest,
|
||||
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;
|
||||
|
||||
@ -344,13 +352,28 @@ cp_lookup_symbol_imports (const char *scope,
|
||||
current->searched = 1;
|
||||
searched_cleanup = make_cleanup (reset_directive_searched, current);
|
||||
|
||||
sym = cp_lookup_symbol_namespace (current->import_src,
|
||||
name,
|
||||
linkage_name,
|
||||
block,
|
||||
domain,
|
||||
0);
|
||||
|
||||
if (current->alias != NULL && strcmp (name, current->alias) == 0)
|
||||
/* If the import is creating an alias and the alias matches the
|
||||
sought name. Pass current->import_src as the NAME to direct the
|
||||
search towards the aliased namespace. */
|
||||
{
|
||||
sym = cp_lookup_symbol_in_namespace (scope,
|
||||
current->import_src,
|
||||
linkage_name,
|
||||
block,
|
||||
domain);
|
||||
}
|
||||
else if (current->alias == NULL)
|
||||
{
|
||||
/* If this import statement creates no alias, pass current->inner as
|
||||
NAMESPACE to direct the search towards the imported namespace. */
|
||||
sym = cp_lookup_symbol_imports (current->import_src,
|
||||
name,
|
||||
linkage_name,
|
||||
block,
|
||||
domain,
|
||||
0);
|
||||
}
|
||||
current->searched = 0;
|
||||
discard_cleanups (searched_cleanup);
|
||||
|
||||
|
Reference in New Issue
Block a user