28  if (
auto EC = Callbacks.visitKnownRecord(
Record, KnownRecord))
 
 
   38  if (
auto EC = Callbacks.visitKnownMember(
Record, KnownRecord))
 
 
   53#define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \ 
   55    if (auto EC = visitKnownMember<Name##Record>(Record, Callbacks))           \ 
   59#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)                \ 
   60  MEMBER_RECORD(EnumVal, EnumVal, AliasName) 
   61#define TYPE_RECORD(EnumName, EnumVal, Name) 
   62#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 
   63#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" 
 
   76  explicit CVTypeVisitor(TypeVisitorCallbacks &Callbacks);
 
   87  Error visitFieldListMemberStream(BinaryStreamReader &Stream);
 
   93  TypeVisitorCallbacks &Callbacks;
 
   97    : Callbacks(Callbacks) {}
 
  100  switch (Record.
kind()) {
 
  105#define TYPE_RECORD(EnumName, EnumVal, Name)                                   \ 
  107    if (auto EC = visitKnownRecord<Name##Record>(Record, Callbacks))           \ 
  111#define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)                  \ 
  112  TYPE_RECORD(EnumVal, EnumVal, AliasName) 
  113#define MEMBER_RECORD(EnumName, EnumVal, Name) 
  114#define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName) 
  115#include "llvm/DebugInfo/CodeView/CodeViewTypes.def" 
  124Error CVTypeVisitor::visitTypeRecord(
CVType &Record, TypeIndex Index) {
 
  131Error CVTypeVisitor::visitTypeRecord(
CVType &Record) {
 
  138Error CVTypeVisitor::visitMemberRecord(CVMemberRecord Record) {
 
  139  return ::visitMemberRecord(Record, Callbacks);
 
  144  for (
auto I : Types) {
 
  152  for (
auto I : Types) {
 
  159Error CVTypeVisitor::visitTypeStream(TypeCollection &Types) {
 
  160  std::optional<TypeIndex> 
I = 
Types.getFirst();
 
  170Error CVTypeVisitor::visitFieldListMemberStream(BinaryStreamReader &Reader) {
 
  172  while (!Reader.
empty()) {
 
  176    CVMemberRecord Record;
 
  185struct FieldListVisitHelper {
 
  186  FieldListVisitHelper(TypeVisitorCallbacks &Callbacks, ArrayRef<uint8_t> 
Data,
 
  189        Deserializer(Reader),
 
  197  BinaryByteStream Stream;
 
  198  BinaryStreamReader Reader;
 
  199  FieldListDeserializer Deserializer;
 
  200  TypeVisitorCallbackPipeline Pipeline;
 
  201  CVTypeVisitor Visitor;
 
  213  TypeDeserializer Deserializer;
 
  214  TypeVisitorCallbackPipeline Pipeline;
 
  215  CVTypeVisitor Visitor;
 
  222  VisitHelper V(Callbacks, Source);
 
  223  return V.Visitor.visitTypeRecord(
Record, Index);
 
 
  229  VisitHelper V(Callbacks, Source);
 
  230  return V.Visitor.visitTypeRecord(
Record);
 
 
  236  VisitHelper V(Callbacks, Source);
 
  237  return V.Visitor.visitTypeStream(Types);
 
 
  243  return V.Visitor.visitTypeStream(Types);
 
 
  252  return V.Visitor.visitTypeStream(Types);
 
 
  258  FieldListVisitHelper V(Callbacks, 
Record.Data, Source);
 
  259  return V.Visitor.visitMemberRecord(
Record);
 
 
  274  return V.Visitor.visitFieldListMemberStream(V.Reader);
 
 
static Error finishVisitation(CVSymbol &Record, SymbolVisitorCallbacks &Callbacks)
 
static Error visitKnownRecord(CVType &Record, TypeVisitorCallbacks &Callbacks)
 
static Error visitKnownMember(CVMemberRecord &Record, TypeVisitorCallbacks &Callbacks)
 
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
 
Error readEnum(T &Dest)
Similar to readInteger.
 
Lightweight error class with error context and mandatory checking.
 
static ErrorSuccess success()
Create a success value.
 
void addCallbackToPipeline(TypeVisitorCallbacks &Callbacks)
 
virtual Error visitUnknownMember(CVMemberRecord &Record)
 
virtual Error visitUnknownType(CVType &Record)
Action to take on unknown types. By default, they are ignored.
 
virtual Error visitTypeEnd(CVType &Record)
 
virtual Error visitMemberEnd(CVMemberRecord &Record)
 
virtual Error visitMemberBegin(CVMemberRecord &Record)
 
virtual Error visitTypeBegin(CVType &Record)
Paired begin/end actions for all types.
 
LLVM_ABI Error visitMemberRecord(CVMemberRecord Record, TypeVisitorCallbacks &Callbacks, VisitorDataSource Source=VDS_BytesPresent)
 
iterator_range< CVTypeArray::Iterator > CVTypeRange
 
CVRecord< TypeLeafKind > CVType
 
VarStreamArray< CVType > CVTypeArray
 
LLVM_ABI Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
 
LLVM_ABI Error visitTypeStream(const CVTypeArray &Types, TypeVisitorCallbacks &Callbacks, VisitorDataSource Source=VDS_BytesPresent)
 
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
 
TypeRecordKind
Distinguishes individual records in .debug$T or .debug$P section or PDB type stream.
 
LLVM_ABI Error visitTypeRecord(CVType &Record, TypeIndex Index, TypeVisitorCallbacks &Callbacks, VisitorDataSource Source=VDS_BytesPresent)
 
This is an optimization pass for GlobalISel generic memory operations.
 
FunctionAddr VTableAddr uintptr_t uintptr_t Data