|
14 | 14 | #ifndef LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVELEMENT_H
|
15 | 15 | #define LLVM_DEBUGINFO_LOGICALVIEW_CORE_LVELEMENT_H
|
16 | 16 |
|
| 17 | +#include "llvm/BinaryFormat/Dwarf.h" |
| 18 | +#include "llvm/DebugInfo/CodeView/CodeView.h" |
17 | 19 | #include "llvm/DebugInfo/LogicalView/Core/LVObject.h"
|
18 | 20 | #include "llvm/Support/Casting.h"
|
19 | 21 | #include <map>
|
20 | 22 | #include <set>
|
| 23 | +#include <variant> |
21 | 24 | #include <vector>
|
22 | 25 |
|
23 | 26 | namespace llvm {
|
@@ -64,6 +67,22 @@ using LVElementKindSet = std::set<LVElementKind>;
|
64 | 67 | using LVElementDispatch = std::map<LVElementKind, LVElementGetFunction>;
|
65 | 68 | using LVElementRequest = std::vector<LVElementGetFunction>;
|
66 | 69 |
|
| 70 | +/// A source language supported by any of the debug info representations. |
| 71 | +struct LVSourceLanguage { |
| 72 | + LVSourceLanguage() = default; |
| 73 | + LVSourceLanguage(llvm::dwarf::SourceLanguage SL) : Language(SL) {} |
| 74 | + LVSourceLanguage(llvm::codeview::SourceLanguage SL) : Language(SL) {} |
| 75 | + |
| 76 | + bool isValid() const { return Language.index() != 0; } |
| 77 | + template <typename T> T getAs() { return std::get<T>(Language); } |
| 78 | + StringRef getName() const; |
| 79 | + |
| 80 | +private: |
| 81 | + std::variant<std::monostate, llvm::dwarf::SourceLanguage, |
| 82 | + llvm::codeview::SourceLanguage> |
| 83 | + Language; |
| 84 | +}; |
| 85 | + |
67 | 86 | class LVElement : public LVObject {
|
68 | 87 | enum class Property {
|
69 | 88 | IsLine, // A logical line.
|
@@ -214,6 +233,9 @@ class LVElement : public LVObject {
|
214 | 233 | virtual StringRef getProducer() const { return StringRef(); }
|
215 | 234 | virtual void setProducer(StringRef ProducerName) {}
|
216 | 235 |
|
| 236 | + virtual LVSourceLanguage getSourceLanguage() const { return {}; } |
| 237 | + virtual void setSourceLanguage(LVSourceLanguage SL) {} |
| 238 | + |
217 | 239 | virtual bool isCompileUnit() const { return false; }
|
218 | 240 | virtual bool isRoot() const { return false; }
|
219 | 241 |
|
|
0 commit comments