LLVM: include/llvm/DebugInfo/CodeView/TypeVisitorCallbackPipeline.h Source File (original) (raw)
22public:
24
26 for (auto *Visitor : Pipeline) {
27 if (auto EC = Visitor->visitUnknownType(Record))
28 return EC;
29 }
31 }
32
34 for (auto *Visitor : Pipeline) {
35 if (auto EC = Visitor->visitUnknownMember(Record))
36 return EC;
37 }
39 }
40
42 for (auto *Visitor : Pipeline) {
43 if (auto EC = Visitor->visitTypeBegin(Record))
44 return EC;
45 }
47 }
48
50 for (auto *Visitor : Pipeline) {
51 if (auto EC = Visitor->visitTypeBegin(Record, Index))
52 return EC;
53 }
55 }
56
58 for (auto *Visitor : Pipeline) {
59 if (auto EC = Visitor->visitTypeEnd(Record))
60 return EC;
61 }
63 }
64
66 for (auto *Visitor : Pipeline) {
67 if (auto EC = Visitor->visitMemberBegin(Record))
68 return EC;
69 }
71 }
72
74 for (auto *Visitor : Pipeline) {
75 if (auto EC = Visitor->visitMemberEnd(Record))
76 return EC;
77 }
79 }
80
82 Pipeline.push_back(&Callbacks);
83 }
84
85#define TYPE_RECORD(EnumName, EnumVal, Name) \
86 Error visitKnownRecord(CVType &CVR, Name##Record &Record) override { \
87 return visitKnownRecordImpl(CVR, Record); \
88 }
89#define MEMBER_RECORD(EnumName, EnumVal, Name) \
90 Error visitKnownMember(CVMemberRecord &CVMR, Name##Record &Record) \
91 override { \
92 return visitKnownMemberImpl(CVMR, Record); \
93 }
94#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
95#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
96#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
97
98private:
99 template Error visitKnownRecordImpl(CVType &CVR, T &Record) {
100 for (auto *Visitor : Pipeline) {
101 if (auto EC = Visitor->visitKnownRecord(CVR, Record))
102 return EC;
103 }
105 }
106
107 template
108 Error visitKnownMemberImpl(CVMemberRecord &CVMR, T &Record) {
109 for (auto *Visitor : Pipeline) {
110 if (auto EC = Visitor->visitKnownMember(CVMR, Record))
111 return EC;
112 }
114 }
115 std::vector<TypeVisitorCallbacks *> Pipeline;
116};