diff options
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp')
-rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp | 152 |
1 files changed, 68 insertions, 84 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp index 5512072529f..79f2f221696 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.cpp @@ -9,96 +9,80 @@ #include "DWARFDeclContext.h" -const char * -DWARFDeclContext::GetQualifiedName () const -{ - if (m_qualified_name.empty()) - { - // The declaration context array for a class named "foo" in namespace - // "a::b::c" will be something like: - // [0] DW_TAG_class_type "foo" - // [1] DW_TAG_namespace "c" - // [2] DW_TAG_namespace "b" - // [3] DW_TAG_namespace "a" - if (!m_entries.empty()) - { - if (m_entries.size() == 1) - { - if (m_entries[0].name) - { - m_qualified_name.append("::"); - m_qualified_name.append(m_entries[0].name); - } - } +const char *DWARFDeclContext::GetQualifiedName() const { + if (m_qualified_name.empty()) { + // The declaration context array for a class named "foo" in namespace + // "a::b::c" will be something like: + // [0] DW_TAG_class_type "foo" + // [1] DW_TAG_namespace "c" + // [2] DW_TAG_namespace "b" + // [3] DW_TAG_namespace "a" + if (!m_entries.empty()) { + if (m_entries.size() == 1) { + if (m_entries[0].name) { + m_qualified_name.append("::"); + m_qualified_name.append(m_entries[0].name); + } + } else { + collection::const_reverse_iterator pos; + collection::const_reverse_iterator begin = m_entries.rbegin(); + collection::const_reverse_iterator end = m_entries.rend(); + for (pos = begin; pos != end; ++pos) { + if (pos != begin) + m_qualified_name.append("::"); + if (pos->name == NULL) { + if (pos->tag == DW_TAG_namespace) + m_qualified_name.append("(anonymous namespace)"); + else if (pos->tag == DW_TAG_class_type) + m_qualified_name.append("(anonymous class)"); + else if (pos->tag == DW_TAG_structure_type) + m_qualified_name.append("(anonymous struct)"); + else if (pos->tag == DW_TAG_union_type) + m_qualified_name.append("(anonymous union)"); else - { - collection::const_reverse_iterator pos; - collection::const_reverse_iterator begin = m_entries.rbegin(); - collection::const_reverse_iterator end = m_entries.rend(); - for (pos = begin; pos != end; ++pos) - { - if (pos != begin) - m_qualified_name.append("::"); - if (pos->name == NULL) - { - if (pos->tag == DW_TAG_namespace) - m_qualified_name.append ("(anonymous namespace)"); - else if (pos->tag == DW_TAG_class_type) - m_qualified_name.append ("(anonymous class)"); - else if (pos->tag == DW_TAG_structure_type) - m_qualified_name.append ("(anonymous struct)"); - else if (pos->tag == DW_TAG_union_type) - m_qualified_name.append ("(anonymous union)"); - else - m_qualified_name.append ("(anonymous)"); - } - else - m_qualified_name.append(pos->name); - } - } + m_qualified_name.append("(anonymous)"); + } else + m_qualified_name.append(pos->name); } + } } - if (m_qualified_name.empty()) - return NULL; - return m_qualified_name.c_str(); + } + if (m_qualified_name.empty()) + return NULL; + return m_qualified_name.c_str(); } +bool DWARFDeclContext::operator==(const DWARFDeclContext &rhs) const { + if (m_entries.size() != rhs.m_entries.size()) + return false; -bool -DWARFDeclContext::operator==(const DWARFDeclContext& rhs) const -{ - if (m_entries.size() != rhs.m_entries.size()) - return false; - - collection::const_iterator pos; - collection::const_iterator begin = m_entries.begin(); - collection::const_iterator end = m_entries.end(); + collection::const_iterator pos; + collection::const_iterator begin = m_entries.begin(); + collection::const_iterator end = m_entries.end(); - collection::const_iterator rhs_pos; - collection::const_iterator rhs_begin = rhs.m_entries.begin(); - // The two entry arrays have the same size - - // First compare the tags before we do expensive name compares - for (pos = begin, rhs_pos = rhs_begin; pos != end; ++pos, ++rhs_pos) - { - if (pos->tag != rhs_pos->tag) - { - // Check for DW_TAG_structure_type and DW_TAG_class_type as they are often - // used interchangeably in GCC - if (pos->tag == DW_TAG_structure_type && rhs_pos->tag == DW_TAG_class_type) - continue; - if (pos->tag == DW_TAG_class_type && rhs_pos->tag == DW_TAG_structure_type) - continue; - return false; - } - } - // The tags all match, now compare the names - for (pos = begin, rhs_pos = rhs_begin; pos != end; ++pos, ++rhs_pos) - { - if (!pos->NameMatches (*rhs_pos)) - return false; + collection::const_iterator rhs_pos; + collection::const_iterator rhs_begin = rhs.m_entries.begin(); + // The two entry arrays have the same size + + // First compare the tags before we do expensive name compares + for (pos = begin, rhs_pos = rhs_begin; pos != end; ++pos, ++rhs_pos) { + if (pos->tag != rhs_pos->tag) { + // Check for DW_TAG_structure_type and DW_TAG_class_type as they are often + // used interchangeably in GCC + if (pos->tag == DW_TAG_structure_type && + rhs_pos->tag == DW_TAG_class_type) + continue; + if (pos->tag == DW_TAG_class_type && + rhs_pos->tag == DW_TAG_structure_type) + continue; + return false; } - // All tags and names match - return true; + } + // The tags all match, now compare the names + for (pos = begin, rhs_pos = rhs_begin; pos != end; ++pos, ++rhs_pos) { + if (!pos->NameMatches(*rhs_pos)) + return false; + } + // All tags and names match + return true; } - |