| //===-- DWARFDeclContext.h --------------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef SymbolFileDWARF_DWARFDeclContext_h_ |
| #define SymbolFileDWARF_DWARFDeclContext_h_ |
| |
| // C Includes |
| // C++ Includes |
| #include <string> |
| #include <vector> |
| // Other libraries and framework includes |
| #include "lldb/Utility/ConstString.h" |
| // Project includes |
| #include "DWARFDefines.h" |
| |
| //---------------------------------------------------------------------- |
| // DWARFDeclContext |
| // |
| // A class that represents a declaration context all the way down to a |
| // DIE. This is useful when trying to find a DIE in one DWARF to a DIE |
| // in another DWARF file. |
| //---------------------------------------------------------------------- |
| |
| class DWARFDeclContext { |
| public: |
| struct Entry { |
| Entry() : tag(0), name(NULL) {} |
| Entry(dw_tag_t t, const char *n) : tag(t), name(n) {} |
| |
| bool NameMatches(const Entry &rhs) const { |
| if (name == rhs.name) |
| return true; |
| else if (name && rhs.name) |
| return strcmp(name, rhs.name) == 0; |
| return false; |
| } |
| |
| // Test operator |
| explicit operator bool() const { return tag != 0; } |
| |
| dw_tag_t tag; |
| const char *name; |
| }; |
| |
| DWARFDeclContext() : m_entries(), m_language(lldb::eLanguageTypeUnknown) {} |
| |
| void AppendDeclContext(dw_tag_t tag, const char *name) { |
| m_entries.push_back(Entry(tag, name)); |
| } |
| |
| bool operator==(const DWARFDeclContext &rhs) const; |
| |
| uint32_t GetSize() const { return m_entries.size(); } |
| |
| Entry &operator[](uint32_t idx) { |
| // "idx" must be valid |
| return m_entries[idx]; |
| } |
| |
| const Entry &operator[](uint32_t idx) const { |
| // "idx" must be valid |
| return m_entries[idx]; |
| } |
| |
| const char *GetQualifiedName() const; |
| |
| // Same as GetQaulifiedName, but the life time of the returned string will |
| // be that of the LLDB session. |
| lldb_private::ConstString GetQualifiedNameAsConstString() const { |
| return lldb_private::ConstString(GetQualifiedName()); |
| } |
| |
| void Clear() { |
| m_entries.clear(); |
| m_qualified_name.clear(); |
| } |
| |
| lldb::LanguageType GetLanguage() const { return m_language; } |
| |
| void SetLanguage(lldb::LanguageType language) { m_language = language; } |
| |
| protected: |
| typedef std::vector<Entry> collection; |
| collection m_entries; |
| mutable std::string m_qualified_name; |
| lldb::LanguageType m_language; |
| }; |
| |
| #endif // SymbolFileDWARF_DWARFDeclContext_h_ |