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