10b57cec5SDimitry Andric //===- PDBSymDumper.h - base interface for PDB symbol dumper *- C++ -----*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #ifndef LLVM_DEBUGINFO_PDB_PDBSYMDUMPER_H
100b57cec5SDimitry Andric #define LLVM_DEBUGINFO_PDB_PDBSYMDUMPER_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include "PDBTypes.h"
130b57cec5SDimitry Andric 
140b57cec5SDimitry Andric namespace llvm {
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric class raw_ostream;
170b57cec5SDimitry Andric namespace pdb {
180b57cec5SDimitry Andric 
190b57cec5SDimitry Andric class PDBSymDumper {
200b57cec5SDimitry Andric public:
210b57cec5SDimitry Andric   PDBSymDumper(bool ShouldRequireImpl);
220b57cec5SDimitry Andric   virtual ~PDBSymDumper();
230b57cec5SDimitry Andric 
240b57cec5SDimitry Andric   virtual void dump(const PDBSymbolAnnotation &Symbol);
250b57cec5SDimitry Andric   virtual void dump(const PDBSymbolBlock &Symbol);
260b57cec5SDimitry Andric   virtual void dump(const PDBSymbolCompiland &Symbol);
270b57cec5SDimitry Andric   virtual void dump(const PDBSymbolCompilandDetails &Symbol);
280b57cec5SDimitry Andric   virtual void dump(const PDBSymbolCompilandEnv &Symbol);
290b57cec5SDimitry Andric   virtual void dump(const PDBSymbolCustom &Symbol);
300b57cec5SDimitry Andric   virtual void dump(const PDBSymbolData &Symbol);
310b57cec5SDimitry Andric   virtual void dump(const PDBSymbolExe &Symbol);
320b57cec5SDimitry Andric   virtual void dump(const PDBSymbolFunc &Symbol);
330b57cec5SDimitry Andric   virtual void dump(const PDBSymbolFuncDebugEnd &Symbol);
340b57cec5SDimitry Andric   virtual void dump(const PDBSymbolFuncDebugStart &Symbol);
350b57cec5SDimitry Andric   virtual void dump(const PDBSymbolLabel &Symbol);
360b57cec5SDimitry Andric   virtual void dump(const PDBSymbolPublicSymbol &Symbol);
370b57cec5SDimitry Andric   virtual void dump(const PDBSymbolThunk &Symbol);
380b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeArray &Symbol);
390b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeBaseClass &Symbol);
400b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeBuiltin &Symbol);
410b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeCustom &Symbol);
420b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeDimension &Symbol);
430b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeEnum &Symbol);
440b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeFriend &Symbol);
450b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeFunctionArg &Symbol);
460b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeFunctionSig &Symbol);
470b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeManaged &Symbol);
480b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypePointer &Symbol);
490b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeTypedef &Symbol);
500b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeUDT &Symbol);
510b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeVTable &Symbol);
520b57cec5SDimitry Andric   virtual void dump(const PDBSymbolTypeVTableShape &Symbol);
530b57cec5SDimitry Andric   virtual void dump(const PDBSymbolUnknown &Symbol);
540b57cec5SDimitry Andric   virtual void dump(const PDBSymbolUsingNamespace &Symbol);
550b57cec5SDimitry Andric 
dumpRight(const PDBSymbolTypeArray & Symbol)560b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeArray &Symbol) {}
dumpRight(const PDBSymbolTypeBaseClass & Symbol)570b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeBaseClass &Symbol) {}
dumpRight(const PDBSymbolTypeBuiltin & Symbol)580b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeBuiltin &Symbol) {}
dumpRight(const PDBSymbolTypeCustom & Symbol)590b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeCustom &Symbol) {}
dumpRight(const PDBSymbolTypeDimension & Symbol)600b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeDimension &Symbol) {}
dumpRight(const PDBSymbolTypeEnum & Symbol)610b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeEnum &Symbol) {}
dumpRight(const PDBSymbolTypeFriend & Symbol)620b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeFriend &Symbol) {}
dumpRight(const PDBSymbolTypeFunctionArg & Symbol)630b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeFunctionArg &Symbol) {}
dumpRight(const PDBSymbolTypeFunctionSig & Symbol)640b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeFunctionSig &Symbol) {}
dumpRight(const PDBSymbolTypeManaged & Symbol)650b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeManaged &Symbol) {}
dumpRight(const PDBSymbolTypePointer & Symbol)660b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypePointer &Symbol) {}
dumpRight(const PDBSymbolTypeTypedef & Symbol)670b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeTypedef &Symbol) {}
dumpRight(const PDBSymbolTypeUDT & Symbol)680b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeUDT &Symbol) {}
dumpRight(const PDBSymbolTypeVTable & Symbol)690b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeVTable &Symbol) {}
dumpRight(const PDBSymbolTypeVTableShape & Symbol)700b57cec5SDimitry Andric   virtual void dumpRight(const PDBSymbolTypeVTableShape &Symbol) {}
710b57cec5SDimitry Andric 
720b57cec5SDimitry Andric private:
730b57cec5SDimitry Andric   bool RequireImpl;
740b57cec5SDimitry Andric };
750b57cec5SDimitry Andric }
760b57cec5SDimitry Andric }
770b57cec5SDimitry Andric 
780b57cec5SDimitry Andric #endif
79