Coverage Report

Created: 2021-01-26 06:56

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/ASTMatchers/Dynamic/VariantValue.h
Line
Count
Source (jump to first uncovered line)
1
//===--- VariantValue.h - Polymorphic value type ----------------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
///
9
/// \file
10
/// Polymorphic value type.
11
///
12
/// Supports all the types required for dynamic Matcher construction.
13
///  Used by the registry to construct matchers in a generic way.
14
///
15
//===----------------------------------------------------------------------===//
16
17
#ifndef LLVM_CLANG_ASTMATCHERS_DYNAMIC_VARIANTVALUE_H
18
#define LLVM_CLANG_ASTMATCHERS_DYNAMIC_VARIANTVALUE_H
19
20
#include "clang/ASTMatchers/ASTMatchers.h"
21
#include "clang/ASTMatchers/ASTMatchersInternal.h"
22
#include "llvm/ADT/IntrusiveRefCntPtr.h"
23
#include "llvm/ADT/Optional.h"
24
#include <memory>
25
#include <vector>
26
27
namespace clang {
28
namespace ast_matchers {
29
namespace dynamic {
30
31
/// Kind identifier.
32
///
33
/// It supports all types that VariantValue can contain.
34
class ArgKind {
35
 public:
36
  enum Kind {
37
    AK_Matcher,
38
    AK_Boolean,
39
    AK_Double,
40
    AK_Unsigned,
41
    AK_String
42
  };
43
  /// Constructor for non-matcher types.
44
946
  ArgKind(Kind K) : K(K) { assert(K != AK_Matcher); }
45
46
  /// Constructor for matcher types.
47
36.6k
  ArgKind(ASTNodeKind MatcherKind) : K(AK_Matcher), MatcherKind(MatcherKind) {}
48
49
11.2k
  Kind getArgKind() const { return K; }
50
11.1k
  ASTNodeKind getMatcherKind() const {
51
11.1k
    assert(K == AK_Matcher);
52
11.1k
    return MatcherKind;
53
11.1k
  }
54
55
  /// Determines if this type can be converted to \p To.
56
  ///
57
  /// \param To the requested destination type.
58
  ///
59
  /// \param Specificity value corresponding to the "specificity" of the
60
  ///   conversion.
61
  bool isConvertibleTo(ArgKind To, unsigned *Specificity) const;
62
63
196
  bool operator<(const ArgKind &Other) const {
64
196
    if (K == AK_Matcher && Other.K == AK_Matcher)
65
196
      return MatcherKind < Other.MatcherKind;
66
0
    return K < Other.K;
67
0
  }
68
69
  /// String representation of the type.
70
  std::string asString() const;
71
72
private:
73
  Kind K;
74
  ASTNodeKind MatcherKind;
75
};
76
77
using ast_matchers::internal::DynTypedMatcher;
78
79
/// A variant matcher object.
80
///
81
/// The purpose of this object is to abstract simple and polymorphic matchers
82
/// into a single object type.
83
/// Polymorphic matchers might be implemented as a list of all the possible
84
/// overloads of the matcher. \c VariantMatcher knows how to select the
85
/// appropriate overload when needed.
86
/// To get a real matcher object out of a \c VariantMatcher you can do:
87
///  - getSingleMatcher() which returns a matcher, only if it is not ambiguous
88
///    to decide which matcher to return. Eg. it contains only a single
89
///    matcher, or a polymorphic one with only one overload.
90
///  - hasTypedMatcher<T>()/getTypedMatcher<T>(): These calls will determine if
91
///    the underlying matcher(s) can unambiguously return a Matcher<T>.
92
class VariantMatcher {
93
  /// Methods that depend on T from hasTypedMatcher/getTypedMatcher.
94
  class MatcherOps {
95
  public:
96
355
    MatcherOps(ASTNodeKind NodeKind) : NodeKind(NodeKind) {}
97
98
    bool canConstructFrom(const DynTypedMatcher &Matcher,
99
                          bool &IsExactMatch) const;
100
101
    /// Convert \p Matcher the destination type and return it as a new
102
    /// DynTypedMatcher.
103
    DynTypedMatcher convertMatcher(const DynTypedMatcher &Matcher) const;
104
105
    /// Constructs a variadic typed matcher from \p InnerMatchers.
106
    /// Will try to convert each inner matcher to the destination type and
107
    /// return llvm::None if it fails to do so.
108
    llvm::Optional<DynTypedMatcher>
109
    constructVariadicOperator(DynTypedMatcher::VariadicOperator Op,
110
                              ArrayRef<VariantMatcher> InnerMatchers) const;
111
112
  private:
113
    ASTNodeKind NodeKind;
114
  };
115
116
  /// Payload interface to be specialized by each matcher type.
117
  ///
118
  /// It follows a similar interface as VariantMatcher itself.
119
  class Payload {
120
  public:
121
    virtual ~Payload();
122
    virtual llvm::Optional<DynTypedMatcher> getSingleMatcher() const = 0;
123
    virtual std::string getTypeAsString() const = 0;
124
    virtual llvm::Optional<DynTypedMatcher>
125
    getTypedMatcher(const MatcherOps &Ops) const = 0;
126
    virtual bool isConvertibleTo(ASTNodeKind Kind,
127
                                 unsigned *Specificity) const = 0;
128
  };
129
130
public:
131
  /// A null matcher.
132
  VariantMatcher();
133
134
  /// Clones the provided matcher.
135
  static VariantMatcher SingleMatcher(const DynTypedMatcher &Matcher);
136
137
  /// Clones the provided matchers.
138
  ///
139
  /// They should be the result of a polymorphic matcher.
140
  static VariantMatcher
141
  PolymorphicMatcher(std::vector<DynTypedMatcher> Matchers);
142
143
  /// Creates a 'variadic' operator matcher.
144
  ///
145
  /// It will bind to the appropriate type on getTypedMatcher<T>().
146
  static VariantMatcher
147
  VariadicOperatorMatcher(DynTypedMatcher::VariadicOperator Op,
148
                          std::vector<VariantMatcher> Args);
149
150
  /// Makes the matcher the "null" matcher.
151
  void reset();
152
153
  /// Whether the matcher is null.
154
111
  bool isNull() const { return !Value; }
155
156
  /// Return a single matcher, if there is no ambiguity.
157
  ///
158
  /// \returns the matcher, if there is only one matcher. An empty Optional, if
159
  /// the underlying matcher is a polymorphic matcher with more than one
160
  /// representation.
161
  llvm::Optional<DynTypedMatcher> getSingleMatcher() const;
162
163
  /// Determines if the contained matcher can be converted to
164
  ///   \c Matcher<T>.
165
  ///
166
  /// For the Single case, it returns true if it can be converted to
167
  /// \c Matcher<T>.
168
  /// For the Polymorphic case, it returns true if one, and only one, of the
169
  /// overloads can be converted to \c Matcher<T>. If there are more than one
170
  /// that can, the result would be ambiguous and false is returned.
171
  template <class T>
172
235
  bool hasTypedMatcher() const {
173
235
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
235
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::Stmt>() const
Line
Count
Source
172
27
  bool hasTypedMatcher() const {
173
27
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
27
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::Decl>() const
Line
Count
Source
172
44
  bool hasTypedMatcher() const {
173
44
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
44
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::VarDecl>() const
Line
Count
Source
172
14
  bool hasTypedMatcher() const {
173
14
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
14
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXThisExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NestedNameSpecifier>() const
Line
Count
Source
172
5
  bool hasTypedMatcher() const {
173
5
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
5
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NestedNameSpecifierLoc>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::QualType>() const
Line
Count
Source
172
13
  bool hasTypedMatcher() const {
173
13
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
13
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::Expr>() const
Line
Count
Source
172
9
  bool hasTypedMatcher() const {
173
9
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
9
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NamedDecl>() const
Line
Count
Source
172
14
  bool hasTypedMatcher() const {
173
14
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
14
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::AccessSpecDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::AddrLabelExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnaryExprOrTypeTraitExpr>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ArraySubscriptExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ArrayType>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::AsmStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::AtomicExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::AtomicType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::AutoType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCAutoreleasePoolStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BinaryConditionalOperator>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BinaryOperator>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BlockDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BlockExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BlockPointerType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BreakStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::BuiltinType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CStyleCastExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CallExpr>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CaseStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CastExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CharacterLiteral>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ChooseExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ClassTemplateDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ClassTemplatePartialSpecializationDecl>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ClassTemplateSpecializationDecl>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ComplexType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CompoundLiteralExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CompoundStmt>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ConditionalOperator>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ConstantArrayType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ConstantExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ContinueStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CUDAKernelCallExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXBindTemporaryExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXBoolLiteralExpr>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXCatchStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXConstCastExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXConstructExpr>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXConstructorDecl>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXConversionDecl>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXCtorInitializer>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXDeductionGuideDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXDefaultArgExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXDeleteExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXDependentScopeMemberExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXDestructorDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXDynamicCastExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXForRangeStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXFunctionalCastExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXMemberCallExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXMethodDecl>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXNewExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXNoexceptExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXNullPtrLiteralExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXOperatorCallExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXRecordDecl>() const
Line
Count
Source
172
6
  bool hasTypedMatcher() const {
173
6
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
6
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXReinterpretCastExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXRewrittenBinaryOperator>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXStaticCastExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXStdInitializerListExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXTemporaryObjectExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXThrowExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXTryStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXUnresolvedConstructExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DecayedType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DecompositionDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DeclRefExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DeclStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DeclaratorDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DecltypeType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DeducedTemplateSpecializationType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DefaultStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DependentSizedArrayType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DesignatedInitExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::DoStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ElaboratedType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::EnumConstantDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::EnumDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::EnumType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ExplicitCastExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ExprWithCleanups>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FieldDecl>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FloatingLiteral>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::Type>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TypeLoc>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ParmVarDecl>() const
Line
Count
Source
172
6
  bool hasTypedMatcher() const {
173
6
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
6
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::SwitchCase>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FunctionDecl>() const
Line
Count
Source
172
14
  bool hasTypedMatcher() const {
173
14
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
14
  }
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ForStmt>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FriendDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FunctionProtoType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FunctionTemplateDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::FunctionType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::GenericSelectionExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::GNUNullExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::GotoStmt>() const
Line
Count
Source
172
1
  bool hasTypedMatcher() const {
173
1
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
1
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::CXXBaseSpecifier>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::OMPClause>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TemplateArgument>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UsingShadowDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::IfStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ImaginaryLiteral>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ImplicitCastExpr>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ImplicitValueInitExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::IncompleteArrayType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::IndirectFieldDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::InitListExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::InjectedClassNameType>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::IntegerLiteral>() const
Line
Count
Source
172
3
  bool hasTypedMatcher() const {
173
3
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
3
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::LValueReferenceType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::LabelDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::LabelStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::LambdaExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::LinkageSpecDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::MaterializeTemporaryExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ValueDecl>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::MemberExpr>() const
Line
Count
Source
172
4
  bool hasTypedMatcher() const {
173
4
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
4
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::MemberPointerType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NamespaceAliasDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NamespaceDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NonTypeTemplateParmDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::NullStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCAtCatchStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCCategoryDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCCategoryImplDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCAtFinallyStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCImplementationDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCInterfaceDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCIvarDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCIvarRefExpr>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCMessageExpr>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCMethodDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCObjectPointerType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCPropertyDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCProtocolDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCAtThrowStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ObjCAtTryStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::OMPDefaultClause>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::OMPExecutableDirective>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::OpaqueValueExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ParenExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ParenListExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ParenType>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::PointerType>() const
Line
Count
Source
172
2
  bool hasTypedMatcher() const {
173
2
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
2
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::PredefinedExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::RValueReferenceType>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::RecordDecl>() const
Line
Count
Source
172
12
  bool hasTypedMatcher() const {
173
12
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
12
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::RecordType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ReferenceType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TemplateName>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::ReturnStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::StaticAssertDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::StmtExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::StringLiteral>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::SubstNonTypeTemplateParmExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::SubstTemplateTypeParmType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::SwitchStmt>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TagDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TagType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TemplateSpecializationType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TemplateTemplateParmDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TemplateTypeParmDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TemplateTypeParmType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TranslationUnitDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TypeAliasDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TypeAliasTemplateDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TypedefDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TypedefNameDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::TypedefType>() const
bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnaryOperator>() const
Line
Count
Source
172
3
  bool hasTypedMatcher() const {
173
3
    return hasTypedMatcher(ASTNodeKind::getFromNodeKind<T>());
174
3
  }
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnaryTransformType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnresolvedLookupExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnresolvedMemberExpr>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnresolvedUsingTypenameDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UnresolvedUsingValueDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UserDefinedLiteral>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UsingDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::UsingDirectiveDecl>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::VariableArrayType>() const
Unexecuted instantiation: bool clang::ast_matchers::dynamic::VariantMatcher::hasTypedMatcher<clang::WhileStmt>() const
175
176
235
  bool hasTypedMatcher(ASTNodeKind NK) const {
177
235
    if (!Value) 
return false0
;
178
235
    return Value->getTypedMatcher(MatcherOps(NK)).hasValue();
179
235
  }
180
181
  /// Determines if the contained matcher can be converted to \p Kind.
182
  ///
183
  /// \param Kind the requested destination type.
184
  ///
185
  /// \param Specificity value corresponding to the "specificity" of the
186
  ///   conversion.
187
2
  bool isConvertibleTo(ASTNodeKind Kind, unsigned *Specificity) const {
188
2
    if (Value)
189
2
      return Value->isConvertibleTo(Kind, Specificity);
190
0
    return false;
191
0
  }
192
193
  /// Return this matcher as a \c Matcher<T>.
194
  ///
195
  /// Handles the different types (Single, Polymorphic) accordingly.
196
  /// Asserts that \c hasTypedMatcher<T>() is true.
197
  template <class T>
198
120
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
120
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
120
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
120
        ->template convertTo<T>();
202
120
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::Stmt>() const
Line
Count
Source
198
18
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
18
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
18
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
18
        ->template convertTo<T>();
202
18
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::Decl>() const
Line
Count
Source
198
29
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
29
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
29
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
29
        ->template convertTo<T>();
202
29
  }
clang::ast_matchers::internal::Matcher<clang::VarDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::VarDecl>() const
Line
Count
Source
198
7
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
7
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
7
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
7
        ->template convertTo<T>();
202
7
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXThisExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXThisExpr>() const
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifier> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NestedNameSpecifier>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifierLoc> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NestedNameSpecifierLoc>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
clang::ast_matchers::internal::Matcher<clang::QualType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::QualType>() const
Line
Count
Source
198
5
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
5
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
5
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
5
        ->template convertTo<T>();
202
5
  }
clang::ast_matchers::internal::Matcher<clang::Expr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::Expr>() const
Line
Count
Source
198
4
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
4
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
4
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
4
        ->template convertTo<T>();
202
4
  }
clang::ast_matchers::internal::Matcher<clang::NamedDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NamedDecl>() const
Line
Count
Source
198
7
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
7
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
7
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
7
        ->template convertTo<T>();
202
7
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AccessSpecDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::AccessSpecDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AddrLabelExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::AddrLabelExpr>() const
clang::ast_matchers::internal::Matcher<clang::UnaryExprOrTypeTraitExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnaryExprOrTypeTraitExpr>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ArraySubscriptExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ArraySubscriptExpr>() const
clang::ast_matchers::internal::Matcher<clang::ArrayType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ArrayType>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AsmStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::AsmStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AtomicExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::AtomicExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AtomicType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::AtomicType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AutoType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::AutoType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCAutoreleasePoolStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BinaryConditionalOperator> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BinaryConditionalOperator>() const
clang::ast_matchers::internal::Matcher<clang::BinaryOperator> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BinaryOperator>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BlockDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BlockDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BlockExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BlockExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BlockPointerType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BlockPointerType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BreakStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BreakStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BuiltinType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::BuiltinType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CStyleCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CStyleCastExpr>() const
clang::ast_matchers::internal::Matcher<clang::CallExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CallExpr>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CaseStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CaseStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CastExpr>() const
clang::ast_matchers::internal::Matcher<clang::CharacterLiteral> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CharacterLiteral>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ChooseExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ChooseExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ClassTemplateDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ClassTemplateDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ClassTemplatePartialSpecializationDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ClassTemplatePartialSpecializationDecl>() const
clang::ast_matchers::internal::Matcher<clang::ClassTemplateSpecializationDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ClassTemplateSpecializationDecl>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ComplexType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ComplexType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CompoundLiteralExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CompoundLiteralExpr>() const
clang::ast_matchers::internal::Matcher<clang::CompoundStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CompoundStmt>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ConditionalOperator> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ConditionalOperator>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ConstantArrayType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ConstantArrayType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ConstantExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ConstantExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ContinueStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ContinueStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CUDAKernelCallExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CUDAKernelCallExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXBindTemporaryExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXBindTemporaryExpr>() const
clang::ast_matchers::internal::Matcher<clang::CXXBoolLiteralExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXBoolLiteralExpr>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXCatchStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXCatchStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXConstCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXConstCastExpr>() const
clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXConstructExpr>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXConstructorDecl>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXConversionDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXConversionDecl>() const
clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXCtorInitializer>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDeductionGuideDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXDeductionGuideDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDefaultArgExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXDefaultArgExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDeleteExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXDeleteExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDependentScopeMemberExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXDependentScopeMemberExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDestructorDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXDestructorDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDynamicCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXDynamicCastExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXForRangeStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXForRangeStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXFunctionalCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXFunctionalCastExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXMemberCallExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXMemberCallExpr>() const
clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXMethodDecl>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXNewExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXNewExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXNoexceptExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXNoexceptExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXNullPtrLiteralExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXNullPtrLiteralExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXOperatorCallExpr>() const
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXRecordDecl>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXReinterpretCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXReinterpretCastExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXRewrittenBinaryOperator> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXRewrittenBinaryOperator>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXStaticCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXStaticCastExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXStdInitializerListExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXStdInitializerListExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXTemporaryObjectExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXTemporaryObjectExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXThrowExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXThrowExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXTryStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXTryStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXUnresolvedConstructExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXUnresolvedConstructExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DecayedType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DecayedType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DecompositionDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DecompositionDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DeclRefExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DeclStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DeclStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DeclaratorDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DeclaratorDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DecltypeType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DecltypeType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DeducedTemplateSpecializationType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DeducedTemplateSpecializationType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DefaultStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DefaultStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DependentSizedArrayType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DependentSizedArrayType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DesignatedInitExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DesignatedInitExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DoStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::DoStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ElaboratedType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ElaboratedType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::EnumConstantDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::EnumConstantDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::EnumDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::EnumDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::EnumType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::EnumType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ExplicitCastExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ExprWithCleanups> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ExprWithCleanups>() const
clang::ast_matchers::internal::Matcher<clang::FieldDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FieldDecl>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
clang::ast_matchers::internal::Matcher<clang::FloatingLiteral> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FloatingLiteral>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::Type>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
clang::ast_matchers::internal::Matcher<clang::TypeLoc> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TypeLoc>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ParmVarDecl>() const
Line
Count
Source
198
3
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
3
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
3
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
3
        ->template convertTo<T>();
202
3
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SwitchCase> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::SwitchCase>() const
clang::ast_matchers::internal::Matcher<clang::FunctionDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FunctionDecl>() const
Line
Count
Source
198
8
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
8
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
8
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
8
        ->template convertTo<T>();
202
8
  }
clang::ast_matchers::internal::Matcher<clang::ForStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ForStmt>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::FriendDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FriendDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::FunctionProtoType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FunctionProtoType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::FunctionTemplateDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FunctionTemplateDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::FunctionType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::FunctionType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::GenericSelectionExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::GenericSelectionExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::GNUNullExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::GNUNullExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::GotoStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::GotoStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXBaseSpecifier> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::CXXBaseSpecifier>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::OMPClause> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::OMPClause>() const
clang::ast_matchers::internal::Matcher<clang::TemplateArgument> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TemplateArgument>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UsingShadowDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UsingShadowDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::IfStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::IfStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ImaginaryLiteral> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ImaginaryLiteral>() const
clang::ast_matchers::internal::Matcher<clang::ImplicitCastExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ImplicitCastExpr>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ImplicitValueInitExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ImplicitValueInitExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::IncompleteArrayType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::IncompleteArrayType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::IndirectFieldDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::IndirectFieldDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::InitListExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::InitListExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::InjectedClassNameType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::InjectedClassNameType>() const
clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::IntegerLiteral>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LValueReferenceType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::LValueReferenceType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LabelDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::LabelDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LabelStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::LabelStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LambdaExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::LambdaExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LinkageSpecDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::LinkageSpecDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::MaterializeTemporaryExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::MaterializeTemporaryExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ValueDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ValueDecl>() const
clang::ast_matchers::internal::Matcher<clang::MemberExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::MemberExpr>() const
Line
Count
Source
198
2
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
2
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
2
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
2
        ->template convertTo<T>();
202
2
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::MemberPointerType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::MemberPointerType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NamespaceAliasDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NamespaceAliasDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NamespaceDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NamespaceDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NonTypeTemplateParmDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NonTypeTemplateParmDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NullStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::NullStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtCatchStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCAtCatchStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCCategoryDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCCategoryDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCCategoryImplDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCCategoryImplDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtFinallyStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCAtFinallyStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCImplementationDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCImplementationDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCInterfaceDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCIvarDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCIvarDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCIvarRefExpr>() const
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCMessageExpr>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCMethodDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCObjectPointerType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCPropertyDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCPropertyDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCProtocolDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCProtocolDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtThrowStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCAtThrowStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtTryStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ObjCAtTryStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::OMPDefaultClause> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::OMPDefaultClause>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::OMPExecutableDirective> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::OMPExecutableDirective>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::OpaqueValueExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::OpaqueValueExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ParenExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenListExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ParenListExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ParenType>() const
clang::ast_matchers::internal::Matcher<clang::PointerType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::PointerType>() const
Line
Count
Source
198
1
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
1
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
1
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
1
        ->template convertTo<T>();
202
1
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::PredefinedExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::PredefinedExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::RValueReferenceType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::RValueReferenceType>() const
clang::ast_matchers::internal::Matcher<clang::RecordDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::RecordDecl>() const
Line
Count
Source
198
6
  ast_matchers::internal::Matcher<T> getTypedMatcher() const {
199
6
    assert(hasTypedMatcher<T>() && "hasTypedMatcher<T>() == false");
200
6
    return Value->getTypedMatcher(MatcherOps(ASTNodeKind::getFromNodeKind<T>()))
201
6
        ->template convertTo<T>();
202
6
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::RecordType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::RecordType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ReferenceType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ReferenceType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateName> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TemplateName>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ReturnStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::ReturnStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::StaticAssertDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::StaticAssertDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::StmtExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::StmtExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::StringLiteral> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::StringLiteral>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SubstNonTypeTemplateParmExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::SubstNonTypeTemplateParmExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SubstTemplateTypeParmType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::SubstTemplateTypeParmType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SwitchStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::SwitchStmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TagDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TagDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TagType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TagType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateSpecializationType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TemplateSpecializationType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateTemplateParmDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TemplateTemplateParmDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateTypeParmDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TemplateTypeParmDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateTypeParmType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TemplateTypeParmType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TranslationUnitDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TranslationUnitDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypeAliasDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TypeAliasDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypeAliasTemplateDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TypeAliasTemplateDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypedefDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TypedefDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypedefNameDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TypedefNameDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypedefType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::TypedefType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnaryOperator> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnaryOperator>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnaryTransformType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnaryTransformType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedLookupExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnresolvedLookupExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedMemberExpr> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnresolvedMemberExpr>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedUsingTypenameDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnresolvedUsingTypenameDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedUsingValueDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UnresolvedUsingValueDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UserDefinedLiteral> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UserDefinedLiteral>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UsingDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UsingDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UsingDirectiveDecl> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::UsingDirectiveDecl>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::VariableArrayType> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::VariableArrayType>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::WhileStmt> clang::ast_matchers::dynamic::VariantMatcher::getTypedMatcher<clang::WhileStmt>() const
203
204
0
  DynTypedMatcher getTypedMatcher(ASTNodeKind NK) const {
205
0
    assert(hasTypedMatcher(NK) && "hasTypedMatcher(NK) == false");
206
0
    return *Value->getTypedMatcher(MatcherOps(NK));
207
0
  }
208
209
  /// String representation of the type of the value.
210
  ///
211
  /// If the underlying matcher is a polymorphic one, the string will show all
212
  /// the types.
213
  std::string getTypeAsString() const;
214
215
private:
216
  explicit VariantMatcher(std::shared_ptr<Payload> Value)
217
165
      : Value(std::move(Value)) {}
218
219
220
  class SinglePayload;
221
  class PolymorphicPayload;
222
  class VariadicOpPayload;
223
224
  std::shared_ptr<const Payload> Value;
225
};
226
227
/// Variant value class.
228
///
229
/// Basically, a tagged union with value type semantics.
230
/// It is used by the registry as the return value and argument type for the
231
/// matcher factory methods.
232
/// It can be constructed from any of the supported types. It supports
233
/// copy/assignment.
234
///
235
/// Supported types:
236
///  - \c bool
237
//   - \c double
238
///  - \c unsigned
239
///  - \c llvm::StringRef
240
///  - \c VariantMatcher (\c DynTypedMatcher / \c Matcher<T>)
241
class VariantValue {
242
public:
243
817
  VariantValue() : Type(VT_Nothing) {}
244
245
  VariantValue(const VariantValue &Other);
246
  ~VariantValue();
247
  VariantValue &operator=(const VariantValue &Other);
248
249
  /// Specific constructors for each supported type.
250
  VariantValue(bool Boolean);
251
  VariantValue(double Double);
252
  VariantValue(unsigned Unsigned);
253
  VariantValue(StringRef String);
254
  VariantValue(ASTNodeKind NodeKind);
255
  VariantValue(const VariantMatcher &Matchers);
256
257
  /// Constructs an \c unsigned value (disambiguation from bool).
258
0
  VariantValue(int Signed) : VariantValue(static_cast<unsigned>(Signed)) {}
259
260
  /// Returns true iff this is not an empty value.
261
14
  explicit operator bool() const { return hasValue(); }
262
23
  bool hasValue() const { return Type != VT_Nothing; }
263
264
  /// Boolean value functions.
265
  bool isBoolean() const;
266
  bool getBoolean() const;
267
  void setBoolean(bool Boolean);
268
269
  /// Double value functions.
270
  bool isDouble() const;
271
  double getDouble() const;
272
  void setDouble(double Double);
273
274
  /// Unsigned value functions.
275
  bool isUnsigned() const;
276
  unsigned getUnsigned() const;
277
  void setUnsigned(unsigned Unsigned);
278
279
  /// String value functions.
280
  bool isString() const;
281
  const std::string &getString() const;
282
  void setString(StringRef String);
283
284
  bool isNodeKind() const;
285
  const ASTNodeKind &getNodeKind() const;
286
  void setNodeKind(ASTNodeKind NodeKind);
287
288
  /// Matcher value functions.
289
  bool isMatcher() const;
290
  const VariantMatcher &getMatcher() const;
291
  void setMatcher(const VariantMatcher &Matcher);
292
293
  /// Determines if the contained value can be converted to \p Kind.
294
  ///
295
  /// \param Kind the requested destination type.
296
  ///
297
  /// \param Specificity value corresponding to the "specificity" of the
298
  ///   conversion.
299
  bool isConvertibleTo(ArgKind Kind, unsigned* Specificity) const;
300
301
  /// Determines if the contained value can be converted to any kind
302
  /// in \p Kinds.
303
  ///
304
  /// \param Kinds the requested destination types.
305
  ///
306
  /// \param Specificity value corresponding to the "specificity" of the
307
  ///   conversion. It is the maximum specificity of all the possible
308
  ///   conversions.
309
  bool isConvertibleTo(ArrayRef<ArgKind> Kinds, unsigned *Specificity) const;
310
311
  /// String representation of the type of the value.
312
  std::string getTypeAsString() const;
313
314
private:
315
  void reset();
316
317
  /// All supported value types.
318
  enum ValueType {
319
    VT_Nothing,
320
    VT_Boolean,
321
    VT_Double,
322
    VT_Unsigned,
323
    VT_String,
324
    VT_Matcher,
325
    VT_NodeKind
326
  };
327
328
  /// All supported value types.
329
  union AllValues {
330
    unsigned Unsigned;
331
    double Double;
332
    bool Boolean;
333
    std::string *String;
334
    VariantMatcher *Matcher;
335
    ASTNodeKind *NodeKind;
336
  };
337
338
  ValueType Type;
339
  AllValues Value;
340
};
341
342
} // end namespace dynamic
343
} // end namespace ast_matchers
344
} // end namespace clang
345
346
#endif  // LLVM_CLANG_AST_MATCHERS_DYNAMIC_VARIANT_VALUE_H