10 #ifndef LLVM_DEBUGINFO_CODEVIEW_SYMBOLDESERIALIZER_H
11 #define LLVM_DEBUGINFO_CODEVIEW_SYMBOLDESERIALIZER_H
24 class SymbolVisitorDelegate;
28 : Stream(RecordData), Reader(Stream), Mapping(Reader) {}
37 : Delegate(Delegate) {}
40 assert(!Mapping &&
"Already in a symbol mapping!");
41 Mapping = llvm::make_unique<MappingInfo>(Record.
content());
42 return Mapping->Mapping.visitSymbolBegin(Record);
45 assert(Mapping &&
"Not in a symbol mapping!");
46 auto EC = Mapping->Mapping.visitSymbolEnd(Record);
51 #define SYMBOL_RECORD(EnumName, EnumVal, Name) \
52 Error visitKnownRecord(CVSymbol &CVR, Name &Record) override { \
53 return visitKnownRecordImpl(CVR, Record); \
55 #define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
56 #include "CVSymbolTypes.def"
59 template <
typename T>
Error visitKnownRecordImpl(
CVSymbol &CVR,
T &Record) {
63 if (
auto EC = Mapping->Mapping.visitKnownRecord(CVR, Record))
68 SymbolVisitorDelegate *Delegate;
69 std::unique_ptr<MappingInfo> Mapping;
SymbolDeserializer(SymbolVisitorDelegate *Delegate)
virtual uint32_t getRecordOffset(msf::StreamReader Reader)=0
CVRecord< SymbolKind > CVSymbol
static ErrorSuccess success()
Create a success value.
ArrayRef< uint8_t > content() const
Error visitSymbolEnd(CVSymbol &Record) override
Error visitSymbolBegin(CVSymbol &Record) override
Paired begin/end actions for all symbols.
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
Lightweight error class with error context and mandatory checking.