This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[patch 2/3] Extend C++ import to support renaming even declarations
- From: Jan Kratochvil <jan dot kratochvil at redhat dot com>
- To: gdb-patches at sourceware dot org
- Cc: Sami Wagiaalla <swagiaal at redhat dot com>
- Date: Fri, 30 Apr 2010 20:16:48 +0200
- Subject: [patch 2/3] Extend C++ import to support renaming even declarations
Hi,
the current C++ using-directive supports renaming of namespaces but it does
not support renaming of specific imported declarations. This is fine as C++
does not support the latter.
The Fortran patch 3/3 uses the existing FSF GDB C++ infrastructure, therefore
it had to extend it.
C++: using namespace A;
Fortran: use A
- namespace import, therefore not a "declaration" import
- no renaming happens
C++: using A::x;
Fortran: use A, only: x
- "declaration" import of the specific variable `x'.
- no renaming happens
namespace B = A;
Fortran has no way to address non-local namespace/module.
- namespace import, therefore not a "declaration" import
- renaming "A" to "B"
C++ cannot, it would be something like: using y = A::x;
Fortran: use A, only y => x
- "declaration" import of the specific variable `x'.
- renaming "x" to "y"
Therefore this patch implements the last case. It does not affect existing
C++ functionality in the other 3 cases.
No regressions on {x86_64,x86_64-m32,i686}-fedora12-linux-gnu for the whole
patch series.
Thanks,
Jan
2010-04-30 Jan Kratochvil <jan.kratochvil@redhat.com>
* cp-namespace.c (cp_lookup_symbol_imports): Support ALIAS for the
CURRENT->DECLARATION case.
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -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);