LCOV - code coverage report
Current view: top level - include/llvm/DebugInfo/CodeView - TypeVisitorCallbackPipeline.h (source / functions) Hit Total Coverage
Test: llvm-toolchain.info Lines: 31 48 64.6 %
Date: 2017-09-14 15:23:50 Functions: 37 42 88.1 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : //===- TypeVisitorCallbackPipeline.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_TYPEVISITORCALLBACKPIPELINE_H
      11             : #define LLVM_DEBUGINFO_CODEVIEW_TYPEVISITORCALLBACKPIPELINE_H
      12             : 
      13             : #include "llvm/DebugInfo/CodeView/CodeView.h"
      14             : #include "llvm/DebugInfo/CodeView/TypeRecord.h"
      15             : #include "llvm/DebugInfo/CodeView/TypeVisitorCallbacks.h"
      16             : #include "llvm/Support/Error.h"
      17             : #include <vector>
      18             : 
      19             : namespace llvm {
      20             : namespace codeview {
      21             : 
      22        5316 : class TypeVisitorCallbackPipeline : public TypeVisitorCallbacks {
      23             : public:
      24        5316 :   TypeVisitorCallbackPipeline() = default;
      25             : 
      26           0 :   Error visitUnknownType(CVRecord<TypeLeafKind> &Record) override {
      27           0 :     for (auto Visitor : Pipeline) {
      28           0 :       if (auto EC = Visitor->visitUnknownType(Record))
      29           0 :         return EC;
      30             :     }
      31           0 :     return Error::success();
      32             :   }
      33             : 
      34           0 :   Error visitUnknownMember(CVMemberRecord &Record) override {
      35           0 :     for (auto Visitor : Pipeline) {
      36           0 :       if (auto EC = Visitor->visitUnknownMember(Record))
      37           0 :         return EC;
      38             :     }
      39           0 :     return Error::success();
      40             :   }
      41             : 
      42          18 :   Error visitTypeBegin(CVType &Record) override {
      43         108 :     for (auto Visitor : Pipeline) {
      44         108 :       if (auto EC = Visitor->visitTypeBegin(Record))
      45           0 :         return EC;
      46             :     }
      47          54 :     return Error::success();
      48             :   }
      49             : 
      50        4378 :   Error visitTypeBegin(CVType &Record, TypeIndex Index) override {
      51       26268 :     for (auto Visitor : Pipeline) {
      52       26268 :       if (auto EC = Visitor->visitTypeBegin(Record, Index))
      53           0 :         return EC;
      54             :     }
      55       13134 :     return Error::success();
      56             :   }
      57             : 
      58        4396 :   Error visitTypeEnd(CVType &Record) override {
      59       26376 :     for (auto Visitor : Pipeline) {
      60       26376 :       if (auto EC = Visitor->visitTypeEnd(Record))
      61           0 :         return EC;
      62             :     }
      63       13188 :     return Error::success();
      64             :   }
      65             : 
      66        7444 :   Error visitMemberBegin(CVMemberRecord &Record) override {
      67       44664 :     for (auto Visitor : Pipeline) {
      68       44664 :       if (auto EC = Visitor->visitMemberBegin(Record))
      69           0 :         return EC;
      70             :     }
      71       22332 :     return Error::success();
      72             :   }
      73             : 
      74        7444 :   Error visitMemberEnd(CVMemberRecord &Record) override {
      75       44664 :     for (auto Visitor : Pipeline) {
      76       44664 :       if (auto EC = Visitor->visitMemberEnd(Record))
      77           0 :         return EC;
      78             :     }
      79       22332 :     return Error::success();
      80             :   }
      81             : 
      82             :   void addCallbackToPipeline(TypeVisitorCallbacks &Callbacks) {
      83       10632 :     Pipeline.push_back(&Callbacks);
      84             :   }
      85             : 
      86             : #define TYPE_RECORD(EnumName, EnumVal, Name)                                   \
      87             :   Error visitKnownRecord(CVType &CVR, Name##Record &Record) override {         \
      88             :     return visitKnownRecordImpl(CVR, Record);                                  \
      89             :   }
      90             : #define MEMBER_RECORD(EnumName, EnumVal, Name)                                 \
      91             :   Error visitKnownMember(CVMemberRecord &CVMR, Name##Record &Record)           \
      92             :       override {                                                               \
      93             :     return visitKnownMemberImpl(CVMR, Record);                                 \
      94             :   }
      95             : #define TYPE_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
      96             : #define MEMBER_RECORD_ALIAS(EnumName, EnumVal, Name, AliasName)
      97             : #include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
      98             : 
      99             : private:
     100        4396 :   template <typename T> Error visitKnownRecordImpl(CVType &CVR, T &Record) {
     101       26376 :     for (auto Visitor : Pipeline) {
     102       26376 :       if (auto EC = Visitor->visitKnownRecord(CVR, Record))
     103           0 :         return EC;
     104             :     }
     105       13188 :     return Error::success();
     106             :   }
     107             : 
     108             :   template <typename T>
     109        7444 :   Error visitKnownMemberImpl(CVMemberRecord &CVMR, T &Record) {
     110       44664 :     for (auto Visitor : Pipeline) {
     111       44664 :       if (auto EC = Visitor->visitKnownMember(CVMR, Record))
     112           0 :         return EC;
     113             :     }
     114       22332 :     return Error::success();
     115             :   }
     116             :   std::vector<TypeVisitorCallbacks *> Pipeline;
     117             : };
     118             : 
     119             : } // end namespace codeview
     120             : } // end namespace llvm
     121             : 
     122             : #endif // LLVM_DEBUGINFO_CODEVIEW_TYPEVISITORCALLBACKPIPELINE_H

Generated by: LCOV version 1.13