File indexing completed on 2026-05-10 08:43:40
0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef LLVM_DEBUGINFO_CODEVIEW_SYMBOLVISITORCALLBACKPIPELINE_H
0010 #define LLVM_DEBUGINFO_CODEVIEW_SYMBOLVISITORCALLBACKPIPELINE_H
0011
0012 #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
0013 #include "llvm/DebugInfo/CodeView/SymbolVisitorCallbacks.h"
0014 #include "llvm/Support/Error.h"
0015 #include <vector>
0016
0017 namespace llvm {
0018 namespace codeview {
0019
0020 class SymbolVisitorCallbackPipeline : public SymbolVisitorCallbacks {
0021 public:
0022 SymbolVisitorCallbackPipeline() = default;
0023
0024 Error visitUnknownSymbol(CVSymbol &Record) override {
0025 for (auto *Visitor : Pipeline) {
0026 if (auto EC = Visitor->visitUnknownSymbol(Record))
0027 return EC;
0028 }
0029 return Error::success();
0030 }
0031
0032 Error visitSymbolBegin(CVSymbol &Record, uint32_t Offset) override {
0033 for (auto *Visitor : Pipeline) {
0034 if (auto EC = Visitor->visitSymbolBegin(Record, Offset))
0035 return EC;
0036 }
0037 return Error::success();
0038 }
0039
0040 Error visitSymbolBegin(CVSymbol &Record) override {
0041 for (auto *Visitor : Pipeline) {
0042 if (auto EC = Visitor->visitSymbolBegin(Record))
0043 return EC;
0044 }
0045 return Error::success();
0046 }
0047
0048 Error visitSymbolEnd(CVSymbol &Record) override {
0049 for (auto *Visitor : Pipeline) {
0050 if (auto EC = Visitor->visitSymbolEnd(Record))
0051 return EC;
0052 }
0053 return Error::success();
0054 }
0055
0056 void addCallbackToPipeline(SymbolVisitorCallbacks &Callbacks) {
0057 Pipeline.push_back(&Callbacks);
0058 }
0059
0060 #define SYMBOL_RECORD(EnumName, EnumVal, Name) \
0061 Error visitKnownRecord(CVSymbol &CVR, Name &Record) override { \
0062 for (auto Visitor : Pipeline) { \
0063 if (auto EC = Visitor->visitKnownRecord(CVR, Record)) \
0064 return EC; \
0065 } \
0066 return Error::success(); \
0067 }
0068 #define SYMBOL_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
0069 #include "llvm/DebugInfo/CodeView/CodeViewSymbols.def"
0070
0071 private:
0072 std::vector<SymbolVisitorCallbacks *> Pipeline;
0073 };
0074
0075 }
0076 }
0077
0078 #endif