1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
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_
|