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};