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;
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;
return;
}
- using_directives = cp_add_using (dest, src, using_directives);
+ using_directives = cp_add_using (dest, src, alias, using_directives);
}
!= 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. */
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;
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);