ClassDefinitionDumper.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. //===- ClassDefinitionDumper.h - --------------------------------*- C++ -*-===//
  2. //
  3. // The LLVM Compiler Infrastructure
  4. //
  5. // This file is distributed under the University of Illinois Open Source
  6. // License. See LICENSE.TXT for details.
  7. //
  8. //===----------------------------------------------------------------------===//
  9. #ifndef LLVM_TOOLS_LLVMPDBDUMP_CLASSDEFINITIONDUMPER_H
  10. #define LLVM_TOOLS_LLVMPDBDUMP_CLASSDEFINITIONDUMPER_H
  11. #include "llvm/DebugInfo/PDB/PDBSymDumper.h"
  12. #include "llvm/DebugInfo/PDB/PDBSymbolFunc.h"
  13. #include "llvm/DebugInfo/PDB/PDBSymbolData.h"
  14. #include <list>
  15. #include <memory>
  16. #include <unordered_map>
  17. namespace llvm {
  18. class LinePrinter;
  19. class ClassDefinitionDumper : public PDBSymDumper {
  20. public:
  21. ClassDefinitionDumper(LinePrinter &P);
  22. void start(const PDBSymbolTypeUDT &Exe);
  23. void dump(const PDBSymbolTypeBaseClass &Symbol) override;
  24. void dump(const PDBSymbolData &Symbol) override;
  25. void dump(const PDBSymbolTypeEnum &Symbol) override;
  26. void dump(const PDBSymbolFunc &Symbol) override;
  27. void dump(const PDBSymbolTypeTypedef &Symbol) override;
  28. void dump(const PDBSymbolTypeUDT &Symbol) override;
  29. void dump(const PDBSymbolTypeVTable &Symbol) override;
  30. private:
  31. LinePrinter &Printer;
  32. struct SymbolGroup {
  33. SymbolGroup() {}
  34. SymbolGroup(SymbolGroup &&Other) {
  35. Functions = std::move(Other.Functions);
  36. Data = std::move(Other.Data);
  37. Unknown = std::move(Other.Unknown);
  38. }
  39. std::list<std::unique_ptr<PDBSymbolFunc>> Functions;
  40. std::list<std::unique_ptr<PDBSymbolData>> Data;
  41. std::list<std::unique_ptr<PDBSymbol>> Unknown;
  42. SymbolGroup(const SymbolGroup &other) = delete;
  43. SymbolGroup &operator=(const SymbolGroup &other) = delete;
  44. };
  45. typedef std::unordered_map<int, SymbolGroup> SymbolGroupByAccess;
  46. int dumpAccessGroup(PDB_MemberAccess Access, const SymbolGroup &Group);
  47. };
  48. }
  49. #endif