diff options
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h')
| -rw-r--r-- | lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h new file mode 100644 index 00000000000..85c97f1c68f --- /dev/null +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h @@ -0,0 +1,107 @@ +//===-- 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/Core/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 strcmp(name, rhs.name) == 0; + return name == NULL && rhs.name == NULL; + } + + // Test operator + operator bool() const + { + return tag != 0; + } + + dw_tag_t tag; + const char *name; + }; + + DWARFDeclContext () : + m_entries() + { + } + + 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; + +protected: + typedef std::vector<Entry> collection; + collection m_entries; + mutable std::string m_qualified_name; +}; + +#endif // SymbolFileDWARF_DWARFDeclContext_h_ |

