* cp-namespace.c (cp_lookup_symbol_imports): Support ALIAS for the
	CURRENT->DECLARATION case.
	* cp-support.h (struct using_direct): Provide extended comment.
This commit is contained in:
Jan Kratochvil 2010-05-03 20:10:22 +00:00
parent 7c54a10880
commit 1ac77ea163
3 changed files with 51 additions and 18 deletions

View File

@ -1,3 +1,9 @@
2010-05-03 Jan Kratochvil <jan.kratochvil@redhat.com>
* cp-namespace.c (cp_lookup_symbol_imports): Support ALIAS for the
CURRENT->DECLARATION case.
* cp-support.h (struct using_direct): Provide extended comment.
2010-05-03 Mark Kettenis <kettenis@gnu.org>
* hppaobsd-tdep.c (HPPAOBSD_SIZEOF_GREGS): Renamed from

View File

@ -355,12 +355,14 @@ cp_lookup_symbol_imports (const char *scope,
searched_cleanup = make_cleanup (reset_directive_searched, current);
/* If there is an import of a single declaration, compare the imported
declaration with the sought out name. If there is a match pass
current->import_src as NAMESPACE to direct the search towards the
imported namespace. */
if (current->declaration && strcmp (name, current->declaration) == 0)
declaration (after optional renaming by its alias) with the sought
out name. If there is a match pass current->import_src as NAMESPACE
to direct the search towards the imported namespace. */
if (current->declaration
&& strcmp (name, current->alias ? current->alias
: current->declaration) == 0)
sym = cp_lookup_symbol_in_namespace (current->import_src,
name,
current->declaration,
block,
domain);

View File

@ -37,19 +37,44 @@ struct type;
struct demangle_component;
/* This struct is designed to store data from using directives. It
says that names from namespace IMPORT_SRC should be visible within
namespace IMPORT_DEST. These form a linked list; NEXT is the next element
of the list. If the imported namespace has been aliased, ALIAS is set to a
string representing the alias. Otherwise, ALIAS is NULL.
Eg:
namespace C = A::B;
ALIAS = "C"
DECLARATION is the name of the imported declaration, if this import
statement represents one.
Eg:
using A::x;
Where x is variable in namespace A. DECLARATION is set to x.
*/
says that names from namespace IMPORT_SRC should be visible within namespace
IMPORT_DEST. These form a linked list; NEXT is the next element of the
list. If the imported namespace or declaration has been aliased within the
IMPORT_DEST namespace, ALIAS is set to a string representing the alias.
Otherwise, ALIAS is NULL. DECLARATION is the name of the imported
declaration, if this import statement represents one. Otherwise DECLARATION
is NULL and this import statement represents a namespace.
C++: using namespace A;
Fortran: use A
import_src = "A"
import_dest = local scope of the import statement even such as ""
alias = NULL
declaration = NULL
C++: using A::x;
Fortran: use A, only: x
import_src = "A"
import_dest = local scope of the import statement even such as ""
alias = NULL
declaration = "x"
The declaration will get imported as import_dest::x.
C++: namespace LOCALNS = A;
Fortran has no way to address non-local namespace/module.
import_src = "A"
import_dest = local scope of the import statement even such as ""
alias = "LOCALNS"
declaration = NULL
The namespace will get imported as the import_dest::LOCALNS namespace.
C++ cannot express it, it would be something like: using localname = A::x;
Fortran: use A, only localname => x
import_src = "A"
import_dest = local scope of the import statement even such as ""
alias = "localname"
declaration = "x"
The declaration will get imported as localname or `import_dest`localname. */
struct using_direct
{