summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h')
-rw-r--r--lldb/source/Plugins/SymbolFile/DWARF/DWARFDeclContext.h107
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_
OpenPOWER on IntegriCloud