|
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