1320013Sdim//===- MinimalTypeDumper.h ------------------------------------ *- C++ --*-===//
2320013Sdim//
3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4353358Sdim// See https://llvm.org/LICENSE.txt for license information.
5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6320013Sdim//
7320013Sdim//===----------------------------------------------------------------------===//
8320013Sdim
9320013Sdim#ifndef LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H
10320013Sdim#define LLVM_TOOLS_LLVMPDBUTIL_MINIMAL_TYPE_DUMPER_H
11320013Sdim
12320013Sdim#include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h"
13320013Sdim#include "llvm/Support/BinaryStreamArray.h"
14320013Sdim
15320013Sdimnamespace llvm {
16320013Sdimnamespace codeview {
17320013Sdimclass LazyRandomTypeCollection;
18320013Sdim}
19320013Sdim
20320013Sdimnamespace pdb {
21320013Sdimclass LinePrinter;
22344779Sdimclass TpiStream;
23353358Sdimclass TypeReferenceTracker;
24320013Sdim
25320013Sdimclass MinimalTypeDumpVisitor : public codeview::TypeVisitorCallbacks {
26320013Sdimpublic:
27320013Sdim  MinimalTypeDumpVisitor(LinePrinter &P, uint32_t Width, bool RecordBytes,
28320013Sdim                         bool Hashes, codeview::LazyRandomTypeCollection &Types,
29353358Sdim                         TypeReferenceTracker *RefTracker,
30321238Sdim                         uint32_t NumHashBuckets,
31344779Sdim                         FixedStreamArray<support::ulittle32_t> HashValues,
32344779Sdim                         pdb::TpiStream *Stream)
33320013Sdim      : P(P), Width(Width), RecordBytes(RecordBytes), Hashes(Hashes),
34353358Sdim        Types(Types), RefTracker(RefTracker), NumHashBuckets(NumHashBuckets),
35353358Sdim        HashValues(HashValues), Stream(Stream) {}
36320013Sdim
37320013Sdim  Error visitTypeBegin(codeview::CVType &Record,
38320013Sdim                       codeview::TypeIndex Index) override;
39320013Sdim  Error visitTypeEnd(codeview::CVType &Record) override;
40320013Sdim  Error visitMemberBegin(codeview::CVMemberRecord &Record) override;
41320013Sdim  Error visitMemberEnd(codeview::CVMemberRecord &Record) override;
42320013Sdim
43320013Sdim#define TYPE_RECORD(EnumName, EnumVal, Name)                                   \
44320013Sdim  Error visitKnownRecord(codeview::CVType &CVR,                                \
45320013Sdim                         codeview::Name##Record &Record) override;
46320013Sdim#define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \
47320013Sdim  Error visitKnownMember(codeview::CVMemberRecord &CVR,                        \
48320013Sdim                         codeview::Name##Record &Record) override;
49320013Sdim#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
50320013Sdim#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
51320013Sdim#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
52320013Sdim
53320013Sdimprivate:
54320013Sdim  StringRef getTypeName(codeview::TypeIndex TI) const;
55320013Sdim
56320013Sdim  LinePrinter &P;
57320013Sdim  uint32_t Width;
58320013Sdim  bool RecordBytes = false;
59320013Sdim  bool Hashes = false;
60320013Sdim  codeview::LazyRandomTypeCollection &Types;
61353358Sdim  pdb::TypeReferenceTracker *RefTracker = nullptr;
62321238Sdim  uint32_t NumHashBuckets;
63344779Sdim  codeview::TypeIndex CurrentTypeIndex;
64320013Sdim  FixedStreamArray<support::ulittle32_t> HashValues;
65344779Sdim  pdb::TpiStream *Stream = nullptr;
66320013Sdim};
67320013Sdim} // namespace pdb
68320013Sdim} // namespace llvm
69320013Sdim
70320013Sdim#endif
71