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.
This commit is contained in:
parent
a51dab8874
commit
63d06c5c42
9 changed files with 605 additions and 94 deletions
|
@ -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.");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue