aboutsummaryrefslogtreecommitdiff
path: root/gdb/cp-namespace.c
diff options
context:
space:
mode:
authorDavid Carlton <carlton@bactrian.org>2004-01-14 16:54:43 +0000
committerDavid Carlton <carlton@bactrian.org>2004-01-14 16:54:43 +0000
commit63d06c5c42c2367dcafe44679742b5435463418b (patch)
tree3b8ffe8095efd54a0b6d13ade03177bd8dbcf216 /gdb/cp-namespace.c
parenta51dab8874fc8a1775adc510e9f867270966805e (diff)
downloadgdb-63d06c5c42c2367dcafe44679742b5435463418b.zip
gdb-63d06c5c42c2367dcafe44679742b5435463418b.tar.gz
gdb-63d06c5c42c2367dcafe44679742b5435463418b.tar.bz2
2004-01-14 David Carlton <carlton@kealia.com>
Change symbols for C++ nested types to contain the fully qualified name, if possible. (At least in the DWARF-2 case.) Partial fix for PR's c++/57, c++/488, c++/539, c++/573, c++/609, c++/832, c++/895. * c-exp.y: Update copyright: (qualified_type): Handle types nested within classes. * cp-namespace.c: Update comments. (cp_set_block_scope): Delete #if 0. (cp_lookup_nested_type): Handle types nested within classes. * dwarf2read.c: (scan_partial_symbols): Call add_partial_structure when appropriate. (add_partial_symbol): Add the name of the enclosing namespace to types. (pdi_needs_namespace): New. (add_partial_namespace): Tweak comment. (add_partial_structure): New. (psymtab_to_symtab_1): Initialize processing_current_prefix here... (process_die): instead of here. (read_structure_scope): Try to figure out the name of the class or namespace that the structure might be defined within. (read_enumeration): Generate fully-qualified names, if possible. (read_namespace): Don't set name to NULL. (die_specification): New. (new_symbol): Generate fully-qualified names for types. (read_type_die): Determine appropriate prefix. (determine_prefix): New. (typename_concat): New. (class_name): New. * valops.c: Update copyright. (value_aggregate_elt): Pass NOSIDE to value_struct_elt_for_reference. (value_struct_elt_for_reference): Make static, add NOSIDE parameter, call value_maybe_namespace_elt as a last resort. (value_namespace_elt): Break out code into value_maybe_namespace_elt. (value_maybe_namespace_elt): New. 2004-01-14 David Carlton <carlton@kealia.com> * gdb.cp/namespace.exp: Add tests involving classes defined within namespaces. * gdb.cp/namespace.cc (C::CClass): New. * gdb.cp/namespace1.cc: Update copyright. (C::OtherFileClass): New.
Diffstat (limited to 'gdb/cp-namespace.c')
-rw-r--r--gdb/cp-namespace.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index a766acb..fed440e 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -32,9 +32,12 @@
#include "dictionary.h"
#include "command.h"
-/* When set, the file that we're processing seems to have debugging
- info for C++ namespaces, so cp-namespace.c shouldn't try to guess
- namespace info itself. */
+/* When set, the file that we're processing is known to have debugging
+ info for C++ namespaces. */
+
+/* NOTE: carlton/2004-01-13: No currently released version of GCC (the
+ latest of which is 3.3.x at the time of this writing) produces this
+ debug info. GCC 3.4 should, however. */
unsigned char processing_has_namespace_info;
@@ -222,12 +225,6 @@ cp_set_block_scope (const struct symbol *symbol,
if (SYMBOL_CPLUS_DEMANGLED_NAME (symbol) != NULL)
{
-#if 0
- /* FIXME: carlton/2003-06-12: As mentioned above,
- 'processing_has_namespace_info' currently isn't entirely
- reliable, so let's always use demangled names to get this
- information for now. */
-
if (processing_has_namespace_info)
{
block_set_scope
@@ -237,7 +234,6 @@ cp_set_block_scope (const struct symbol *symbol,
obstack);
}
else
-#endif
{
/* Try to figure out the appropriate namespace from the
demangled name. */
@@ -520,10 +516,6 @@ lookup_symbol_file (const char *name,
class or namespace given by PARENT_TYPE, from within the context
given by BLOCK. Return NULL if there is no such nested type. */
-/* FIXME: carlton/2003-09-24: For now, this only works for nested
- namespaces; the patch to make this work on other sorts of nested
- types is next on my TODO list. */
-
struct type *
cp_lookup_nested_type (struct type *parent_type,
const char *nested_name,
@@ -531,8 +523,16 @@ cp_lookup_nested_type (struct type *parent_type,
{
switch (TYPE_CODE (parent_type))
{
+ case TYPE_CODE_STRUCT:
case TYPE_CODE_NAMESPACE:
{
+ /* NOTE: carlton/2003-11-10: We don't treat C++ class members
+ of classes like, say, data or function members. Instead,
+ they're just represented by symbols whose names are
+ qualified by the name of the surrounding class. This is
+ just like members of namespaces; in particular,
+ lookup_symbol_namespace works when looking them up. */
+
const char *parent_name = TYPE_TAG_NAME (parent_type);
struct symbol *sym = cp_lookup_symbol_namespace (parent_name,
nested_name,
@@ -547,7 +547,7 @@ cp_lookup_nested_type (struct type *parent_type,
}
default:
internal_error (__FILE__, __LINE__,
- "cp_lookup_nested_type called on a non-namespace.");
+ "cp_lookup_nested_type called on a non-aggregate type.");
}
}