blob: 8f78b3b503d0dc378eb2cdd90feca0a974100f32 [file] [log] [blame]
Zachary Turner9e7dda32017-04-12 23:18:51 +00001//===- PrettyClassLayoutGraphicalDumper.h -----------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Zachary Turner9e7dda32017-04-12 23:18:51 +00006//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_TOOLS_LLVMPDBDUMP_PRETTYCLASSLAYOUTGRAPHICALDUMPER_H
10#define LLVM_TOOLS_LLVMPDBDUMP_PRETTYCLASSLAYOUTGRAPHICALDUMPER_H
11
12#include "llvm/ADT/BitVector.h"
13
14#include "llvm/DebugInfo/PDB/PDBSymDumper.h"
15
16namespace llvm {
17
18namespace pdb {
19
Zachary Turner4dc4f012017-04-13 21:11:00 +000020class UDTLayoutBase;
Zachary Turner16901642017-04-24 17:47:24 +000021class LayoutItemBase;
Zachary Turner9e7dda32017-04-12 23:18:51 +000022class LinePrinter;
23
24class PrettyClassLayoutGraphicalDumper : public PDBSymDumper {
25public:
Zachary Turnerda949c12017-04-24 17:47:52 +000026 PrettyClassLayoutGraphicalDumper(LinePrinter &P, uint32_t RecurseLevel,
27 uint32_t InitialOffset);
Zachary Turner9e7dda32017-04-12 23:18:51 +000028
Zachary Turner4dc4f012017-04-13 21:11:00 +000029 bool start(const UDTLayoutBase &Layout);
Zachary Turner9e7dda32017-04-12 23:18:51 +000030
Zachary Turnerda949c12017-04-24 17:47:52 +000031 // Layout based symbol types.
Zachary Turner9e7dda32017-04-12 23:18:51 +000032 void dump(const PDBSymbolTypeBaseClass &Symbol) override;
33 void dump(const PDBSymbolData &Symbol) override;
Zachary Turner9e7dda32017-04-12 23:18:51 +000034 void dump(const PDBSymbolTypeVTable &Symbol) override;
Zachary Turner4dc4f012017-04-13 21:11:00 +000035
Zachary Turnerda949c12017-04-24 17:47:52 +000036 // Non layout-based symbol types.
37 void dump(const PDBSymbolTypeEnum &Symbol) override;
38 void dump(const PDBSymbolFunc &Symbol) override;
39 void dump(const PDBSymbolTypeTypedef &Symbol) override;
40 void dump(const PDBSymbolTypeUDT &Symbol) override;
41 void dump(const PDBSymbolTypeBuiltin &Symbol) override;
42
Zachary Turner4dc4f012017-04-13 21:11:00 +000043private:
Zachary Turnerda949c12017-04-24 17:47:52 +000044 bool shouldRecurse() const;
Zachary Turner4dc4f012017-04-13 21:11:00 +000045 void printPaddingRow(uint32_t Amount);
46
47 LinePrinter &Printer;
48
Zachary Turner16901642017-04-24 17:47:24 +000049 LayoutItemBase *CurrentItem = nullptr;
Zachary Turnerda949c12017-04-24 17:47:52 +000050 uint32_t RecursionLevel = 0;
Zachary Turner4dc4f012017-04-13 21:11:00 +000051 uint32_t ClassOffsetZero = 0;
52 uint32_t CurrentAbsoluteOffset = 0;
53 bool DumpedAnything = false;
Zachary Turner9e7dda32017-04-12 23:18:51 +000054};
55}
56}
57#endif