mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-24 21:42:54 +02:00
ad8956d21b
The *real* difference between these two was that a) The "graphical" dumper could recurse, while the text one could not. b) The "text" dumper could display nested types and functions, while the graphical one could not. Merge these two so that there is only one dumper that can recurse arbitrarily deep and optionally display nested types or not. llvm-svn: 301204
59 lines
1.7 KiB
C++
59 lines
1.7 KiB
C++
//===- PrettyClassLayoutGraphicalDumper.h -----------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_TOOLS_LLVMPDBDUMP_PRETTYCLASSLAYOUTGRAPHICALDUMPER_H
|
|
#define LLVM_TOOLS_LLVMPDBDUMP_PRETTYCLASSLAYOUTGRAPHICALDUMPER_H
|
|
|
|
#include "llvm/ADT/BitVector.h"
|
|
|
|
#include "llvm/DebugInfo/PDB/PDBSymDumper.h"
|
|
|
|
namespace llvm {
|
|
|
|
namespace pdb {
|
|
|
|
class UDTLayoutBase;
|
|
class LayoutItemBase;
|
|
class LinePrinter;
|
|
|
|
class PrettyClassLayoutGraphicalDumper : public PDBSymDumper {
|
|
public:
|
|
PrettyClassLayoutGraphicalDumper(LinePrinter &P, uint32_t RecurseLevel,
|
|
uint32_t InitialOffset);
|
|
|
|
bool start(const UDTLayoutBase &Layout);
|
|
|
|
// Layout based symbol types.
|
|
void dump(const PDBSymbolTypeBaseClass &Symbol) override;
|
|
void dump(const PDBSymbolData &Symbol) override;
|
|
void dump(const PDBSymbolTypeVTable &Symbol) override;
|
|
|
|
// Non layout-based symbol types.
|
|
void dump(const PDBSymbolTypeEnum &Symbol) override;
|
|
void dump(const PDBSymbolFunc &Symbol) override;
|
|
void dump(const PDBSymbolTypeTypedef &Symbol) override;
|
|
void dump(const PDBSymbolTypeUDT &Symbol) override;
|
|
void dump(const PDBSymbolTypeBuiltin &Symbol) override;
|
|
|
|
private:
|
|
bool shouldRecurse() const;
|
|
void printPaddingRow(uint32_t Amount);
|
|
|
|
LinePrinter &Printer;
|
|
|
|
LayoutItemBase *CurrentItem = nullptr;
|
|
uint32_t RecursionLevel = 0;
|
|
uint32_t ClassOffsetZero = 0;
|
|
uint32_t CurrentAbsoluteOffset = 0;
|
|
bool DumpedAnything = false;
|
|
};
|
|
}
|
|
}
|
|
#endif
|