diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-06-28 20:35:52 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2010-06-28 20:35:52 +0000 |
commit | 41f62f3939b1c69e68ef5652feb44fef90eb85c9 (patch) | |
tree | b3af0713fd6e2bc24b1554eaaab7c5716ea903f9 /gdb/cp-namespace.c | |
parent | af53d23161e42735bc2adbb8236d411a307b574c (diff) | |
download | gdb-41f62f3939b1c69e68ef5652feb44fef90eb85c9.zip gdb-41f62f3939b1c69e68ef5652feb44fef90eb85c9.tar.gz gdb-41f62f3939b1c69e68ef5652feb44fef90eb85c9.tar.bz2 |
gdb/
* cp-namespace.c (cp_lookup_nested_type): New variable
concatenated_name. Turn the current return condition into a reverse
one. Call also lookup_static_symbol_aux on the constructed qualified
name.
* symtab.c (lookup_symbol_aux): Move variable objfile and searching in
other files into a called ...
(lookup_static_symbol_aux): ... new function here.
* symtab.h (lookup_static_symbol_aux): New prototype.
* valops.c (value_maybe_namespace_elt): Call also
lookup_static_symbol_aux if we failed otherwise.
gdb/testsuite/
* gdb.cp/namespace.exp (whatis C::cOtherFileType)
(whatis ::C::cOtherFileType, whatis C::cOtherFileVar)
(whatis ::C::cOtherFileVar, print C::cOtherFileVar)
(print ::C::cOtherFileVar)
(whatis C::OtherFileClass::cOtherFileClassType)
(whatis ::C::OtherFileClass::cOtherFileClassType)
(print C::OtherFileClass::cOtherFileClassVar)
(print ::cOtherFileClassVar)
(print ::C::OtherFileClass::cOtherFileClassVar): New tests.
(ptype OtherFileClass, ptype ::C::OtherFileClass): Permit arbitrary
trailing content.
* gdb.cp/namespace1.cc (C::OtherFileClass::cOtherFileClassType)
(C::OtherFileClass::cOtherFileClassVar)
(C::OtherFileClass::cOtherFileClassVar_use, C::cOtherFileType)
(C::cOtherFileVar, C::cOtherFileVar_use): New.
Diffstat (limited to 'gdb/cp-namespace.c')
-rw-r--r-- | gdb/cp-namespace.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index 0daf732..d0fdcbe 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -578,11 +578,24 @@ cp_lookup_nested_type (struct type *parent_type, nested_name, block, VAR_DOMAIN); + char *concatenated_name; - if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF) - return NULL; - else + if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF) return SYMBOL_TYPE (sym); + + /* Now search all static file-level symbols. Not strictly correct, + but more useful than an error. We do not try to guess any imported + namespace as even the fully specified namespace seach is is already + not C++ compliant and more assumptions could make it too magic. */ + + concatenated_name = alloca (strlen (parent_name) + 2 + + strlen (nested_name) + 1); + sprintf (concatenated_name, "%s::%s", parent_name, nested_name); + sym = lookup_static_symbol_aux (concatenated_name, VAR_DOMAIN); + if (sym != NULL && SYMBOL_CLASS (sym) == LOC_TYPEDEF) + return SYMBOL_TYPE (sym); + + return NULL; } default: internal_error (__FILE__, __LINE__, |