summaryrefslogtreecommitdiff
path: root/include/lldb/Symbol/DebugMacros.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Symbol/DebugMacros.h')
-rw-r--r--include/lldb/Symbol/DebugMacros.h140
1 files changed, 140 insertions, 0 deletions
diff --git a/include/lldb/Symbol/DebugMacros.h b/include/lldb/Symbol/DebugMacros.h
new file mode 100644
index 0000000000000..24bf03a8c3b1a
--- /dev/null
+++ b/include/lldb/Symbol/DebugMacros.h
@@ -0,0 +1,140 @@
+//===-- DebugMacros.h -------------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef liblldb_DebugMacros_h_
+#define liblldb_DebugMacros_h_
+
+// C Includes
+// C++ Includes
+#include <memory>
+#include <vector>
+
+// Other libraries and framework includes
+// Project includes
+#include "lldb/lldb-private.h"
+#include "lldb/Core/ConstString.h"
+
+namespace lldb_private {
+
+class CompileUnit;
+class DebugMacros;
+typedef std::shared_ptr<DebugMacros> DebugMacrosSP;
+
+class DebugMacroEntry
+{
+public:
+ enum EntryType
+ {
+ INVALID,
+ DEFINE,
+ UNDEF,
+ START_FILE,
+ END_FILE,
+ INDIRECT
+ };
+
+public:
+ static DebugMacroEntry
+ CreateDefineEntry(uint32_t line, const char *str);
+
+ static DebugMacroEntry
+ CreateUndefEntry(uint32_t line, const char *str);
+
+ static DebugMacroEntry
+ CreateStartFileEntry(uint32_t line, uint32_t debug_line_file_idx);
+
+ static DebugMacroEntry
+ CreateEndFileEntry();
+
+ static DebugMacroEntry
+ CreateIndirectEntry(const DebugMacrosSP &debug_macros_sp);
+
+ DebugMacroEntry() : m_type(INVALID) { }
+
+ ~DebugMacroEntry() = default;
+
+ EntryType
+ GetType() const
+ {
+ return m_type;
+ }
+
+ uint64_t
+ GetLineNumber() const
+ {
+ return m_line;
+ }
+
+ ConstString
+ GetMacroString() const
+ {
+ return m_str;
+ }
+
+ const FileSpec& GetFileSpec(CompileUnit *comp_unit) const;
+
+ DebugMacros *
+ GetIndirectDebugMacros() const
+ {
+ return m_debug_macros_sp.get();
+ }
+
+private:
+ DebugMacroEntry(EntryType type,
+ uint32_t line,
+ uint32_t debug_line_file_idx,
+ const char *str);
+
+ DebugMacroEntry(EntryType type,
+ const DebugMacrosSP &debug_macros_sp);
+
+ EntryType m_type:3;
+ uint32_t m_line:29;
+ uint32_t m_debug_line_file_idx;
+ ConstString m_str;
+ DebugMacrosSP m_debug_macros_sp;
+};
+
+class DebugMacros
+{
+public:
+ DebugMacros() = default;
+
+ ~DebugMacros() = default;
+
+ void
+ AddMacroEntry(const DebugMacroEntry &entry)
+ {
+ m_macro_entries.push_back(entry);
+ }
+
+ size_t
+ GetNumMacroEntries() const
+ {
+ return m_macro_entries.size();
+ }
+
+ DebugMacroEntry
+ GetMacroEntryAtIndex(const size_t index) const
+ {
+ if (index < m_macro_entries.size())
+ return m_macro_entries[index];
+ else
+ return DebugMacroEntry();
+ }
+
+private:
+ DISALLOW_COPY_AND_ASSIGN(DebugMacros);
+
+ std::vector<DebugMacroEntry> m_macro_entries;
+};
+
+} // namespace lldb_private
+
+#endif // liblldb_DebugMacros_h_