1283625Sdim//===- ClassDefinitionDumper.h - --------------------------------*- C++ -*-===// 2283625Sdim// 3283625Sdim// The LLVM Compiler Infrastructure 4283625Sdim// 5283625Sdim// This file is distributed under the University of Illinois Open Source 6283625Sdim// License. See LICENSE.TXT for details. 7283625Sdim// 8283625Sdim//===----------------------------------------------------------------------===// 9283625Sdim 10283625Sdim#ifndef LLVM_TOOLS_LLVMPDBDUMP_CLASSDEFINITIONDUMPER_H 11283625Sdim#define LLVM_TOOLS_LLVMPDBDUMP_CLASSDEFINITIONDUMPER_H 12283625Sdim 13283625Sdim#include "llvm/DebugInfo/PDB/PDBSymDumper.h" 14283625Sdim#include "llvm/DebugInfo/PDB/PDBSymbolFunc.h" 15283625Sdim#include "llvm/DebugInfo/PDB/PDBSymbolData.h" 16283625Sdim 17283625Sdim#include <list> 18283625Sdim#include <memory> 19283625Sdim#include <unordered_map> 20283625Sdim 21283625Sdimnamespace llvm { 22283625Sdim 23283625Sdimclass LinePrinter; 24283625Sdim 25283625Sdimclass ClassDefinitionDumper : public PDBSymDumper { 26283625Sdimpublic: 27283625Sdim ClassDefinitionDumper(LinePrinter &P); 28283625Sdim 29283625Sdim void start(const PDBSymbolTypeUDT &Exe); 30283625Sdim 31283625Sdim void dump(const PDBSymbolTypeBaseClass &Symbol) override; 32283625Sdim void dump(const PDBSymbolData &Symbol) override; 33283625Sdim void dump(const PDBSymbolTypeEnum &Symbol) override; 34283625Sdim void dump(const PDBSymbolFunc &Symbol) override; 35283625Sdim void dump(const PDBSymbolTypeTypedef &Symbol) override; 36283625Sdim void dump(const PDBSymbolTypeUDT &Symbol) override; 37283625Sdim void dump(const PDBSymbolTypeVTable &Symbol) override; 38283625Sdim 39283625Sdimprivate: 40283625Sdim LinePrinter &Printer; 41283625Sdim 42283625Sdim struct SymbolGroup { 43283625Sdim SymbolGroup() {} 44283625Sdim SymbolGroup(SymbolGroup &&Other) { 45283625Sdim Functions = std::move(Other.Functions); 46283625Sdim Data = std::move(Other.Data); 47283625Sdim Unknown = std::move(Other.Unknown); 48283625Sdim } 49283625Sdim 50283625Sdim std::list<std::unique_ptr<PDBSymbolFunc>> Functions; 51283625Sdim std::list<std::unique_ptr<PDBSymbolData>> Data; 52283625Sdim std::list<std::unique_ptr<PDBSymbol>> Unknown; 53283625Sdim SymbolGroup(const SymbolGroup &other) = delete; 54283625Sdim SymbolGroup &operator=(const SymbolGroup &other) = delete; 55283625Sdim }; 56283625Sdim typedef std::unordered_map<int, SymbolGroup> SymbolGroupByAccess; 57283625Sdim 58283625Sdim int dumpAccessGroup(PDB_MemberAccess Access, const SymbolGroup &Group); 59283625Sdim}; 60283625Sdim} 61283625Sdim 62283625Sdim#endif 63