10 #ifndef LLVM_DEBUGINFO_CODEVIEW_TYPEVISITORCALLBACKPIPELINE_H
11 #define LLVM_DEBUGINFO_CODEVIEW_TYPEVISITORCALLBACKPIPELINE_H
27 for (
auto Visitor : Pipeline) {
28 if (
auto EC = Visitor->visitUnknownType(Record))
35 for (
auto Visitor : Pipeline) {
36 if (
auto EC = Visitor->visitUnknownMember(Record))
43 for (
auto Visitor : Pipeline) {
44 if (
auto EC = Visitor->visitTypeBegin(Record))
51 for (
auto Visitor : Pipeline) {
52 if (
auto EC = Visitor->visitTypeEnd(Record))
59 for (
auto Visitor : Pipeline) {
60 if (
auto EC = Visitor->visitMemberBegin(Record))
67 for (
auto Visitor : Pipeline) {
68 if (
auto EC = Visitor->visitMemberEnd(Record))
75 Pipeline.push_back(&Callbacks);
78 #define TYPE_RECORD(EnumName, EnumVal, Name) \
79 Error visitKnownRecord(CVType &CVR, Name##Record &Record) override { \
80 return visitKnownRecordImpl(CVR, Record); \
82 #define MEMBER_RECORD(EnumName, EnumVal, Name) \
83 Error visitKnownMember(CVMemberRecord &CVMR, Name##Record &Record) \
85 return visitKnownMemberImpl(CVMR, Record); \
87 #define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
88 #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
89 #include "llvm/DebugInfo/CodeView/TypeRecords.def"
92 template <
typename T>
Error visitKnownRecordImpl(
CVType &CVR,
T &Record) {
93 for (
auto Visitor : Pipeline) {
94 if (
auto EC = Visitor->visitKnownRecord(CVR, Record))
100 template <
typename T>
101 Error visitKnownMemberImpl(CVMemberRecord &CVMR,
T &Record) {
102 for (
auto Visitor : Pipeline) {
103 if (
auto EC = Visitor->visitKnownMember(CVMR, Record))
108 std::vector<TypeVisitorCallbacks *> Pipeline;
114 #endif // LLVM_DEBUGINFO_CODEVIEW_TYPEVISITORCALLBACKPIPELINE_H
CVRecord< TypeLeafKind > CVType
Error visitUnknownMember(CVMemberRecord &Record) override
Error visitTypeBegin(CVType &Record) override
Paired begin/end actions for all types.
TypeVisitorCallbackPipeline()=default
Error visitMemberBegin(CVMemberRecord &Record) override
static ErrorSuccess success()
Create a success value.
Lightweight error class with error context and mandatory checking.
Error visitMemberEnd(CVMemberRecord &Record) override
Error visitTypeEnd(CVType &Record) override
void addCallbackToPipeline(TypeVisitorCallbacks &Callbacks)
Error visitUnknownType(CVRecord< TypeLeafKind > &Record) override