Home | History | Annotate | Download | only in CodeView
      1 //===- CVTypeVisitor.h ------------------------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 #ifndef LLVM_DEBUGINFO_CODEVIEW_CVTYPEVISITOR_H
     11 #define LLVM_DEBUGINFO_CODEVIEW_CVTYPEVISITOR_H
     12 
     13 #include "llvm/DebugInfo/CodeView/CVRecord.h"
     14 #include "llvm/DebugInfo/CodeView/TypeRecord.h"
     15 #include "llvm/Support/Error.h"
     16 
     17 namespace llvm {
     18 namespace codeview {
     19 class TypeCollection;
     20 class TypeServerHandler;
     21 class TypeVisitorCallbacks;
     22 
     23 enum VisitorDataSource {
     24   VDS_BytesPresent, // The record bytes are passed into the the visitation
     25                     // function.  The algorithm should first deserialize them
     26                     // before passing them on through the pipeline.
     27   VDS_BytesExternal // The record bytes are not present, and it is the
     28                     // responsibility of the visitor callback interface to
     29                     // supply the bytes.
     30 };
     31 
     32 Error visitTypeRecord(CVType &Record, TypeIndex Index,
     33                       TypeVisitorCallbacks &Callbacks,
     34                       VisitorDataSource Source = VDS_BytesPresent,
     35                       TypeServerHandler *TS = nullptr);
     36 Error visitTypeRecord(CVType &Record, TypeVisitorCallbacks &Callbacks,
     37                       VisitorDataSource Source = VDS_BytesPresent,
     38                       TypeServerHandler *TS = nullptr);
     39 
     40 Error visitMemberRecord(CVMemberRecord Record, TypeVisitorCallbacks &Callbacks,
     41                         VisitorDataSource Source = VDS_BytesPresent);
     42 Error visitMemberRecord(TypeLeafKind Kind, ArrayRef<uint8_t> Record,
     43                         TypeVisitorCallbacks &Callbacks);
     44 
     45 Error visitMemberRecordStream(ArrayRef<uint8_t> FieldList,
     46                               TypeVisitorCallbacks &Callbacks);
     47 
     48 Error visitTypeStream(const CVTypeArray &Types, TypeVisitorCallbacks &Callbacks,
     49                       VisitorDataSource Source = VDS_BytesPresent,
     50                       TypeServerHandler *TS = nullptr);
     51 Error visitTypeStream(CVTypeRange Types, TypeVisitorCallbacks &Callbacks,
     52                       TypeServerHandler *TS = nullptr);
     53 Error visitTypeStream(TypeCollection &Types, TypeVisitorCallbacks &Callbacks,
     54                       TypeServerHandler *TS = nullptr);
     55 
     56 } // end namespace codeview
     57 } // end namespace llvm
     58 
     59 #endif // LLVM_DEBUGINFO_CODEVIEW_CVTYPEVISITOR_H
     60