Coverage Report

Created: 2018-09-25 23:22

/Users/buildslave/jenkins/workspace/clang-stage2-coverage-R/llvm/tools/clang/include/clang/ASTMatchers/ASTMatchersInternal.h
Line
Count
Source (jump to first uncovered line)
1
//===- ASTMatchersInternal.h - Structural query framework -------*- 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
//  Implements the base layer of the matcher framework.
11
//
12
//  Matchers are methods that return a Matcher<T> which provides a method
13
//  Matches(...) which is a predicate on an AST node. The Matches method's
14
//  parameters define the context of the match, which allows matchers to recurse
15
//  or store the current node as bound to a specific string, so that it can be
16
//  retrieved later.
17
//
18
//  In general, matchers have two parts:
19
//  1. A function Matcher<T> MatcherName(<arguments>) which returns a Matcher<T>
20
//     based on the arguments and optionally on template type deduction based
21
//     on the arguments. Matcher<T>s form an implicit reverse hierarchy
22
//     to clang's AST class hierarchy, meaning that you can use a Matcher<Base>
23
//     everywhere a Matcher<Derived> is required.
24
//  2. An implementation of a class derived from MatcherInterface<T>.
25
//
26
//  The matcher functions are defined in ASTMatchers.h. To make it possible
27
//  to implement both the matcher function and the implementation of the matcher
28
//  interface in one place, ASTMatcherMacros.h defines macros that allow
29
//  implementing a matcher in a single place.
30
//
31
//  This file contains the base classes needed to construct the actual matchers.
32
//
33
//===----------------------------------------------------------------------===//
34
35
#ifndef LLVM_CLANG_ASTMATCHERS_ASTMATCHERSINTERNAL_H
36
#define LLVM_CLANG_ASTMATCHERS_ASTMATCHERSINTERNAL_H
37
38
#include "clang/AST/ASTTypeTraits.h"
39
#include "clang/AST/Decl.h"
40
#include "clang/AST/DeclCXX.h"
41
#include "clang/AST/DeclFriend.h"
42
#include "clang/AST/DeclTemplate.h"
43
#include "clang/AST/Expr.h"
44
#include "clang/AST/ExprObjC.h"
45
#include "clang/AST/ExprCXX.h"
46
#include "clang/AST/ExprObjC.h"
47
#include "clang/AST/NestedNameSpecifier.h"
48
#include "clang/AST/Stmt.h"
49
#include "clang/AST/TemplateName.h"
50
#include "clang/AST/Type.h"
51
#include "clang/AST/TypeLoc.h"
52
#include "clang/Basic/LLVM.h"
53
#include "clang/Basic/OperatorKinds.h"
54
#include "llvm/ADT/APFloat.h"
55
#include "llvm/ADT/ArrayRef.h"
56
#include "llvm/ADT/IntrusiveRefCntPtr.h"
57
#include "llvm/ADT/None.h"
58
#include "llvm/ADT/Optional.h"
59
#include "llvm/ADT/STLExtras.h"
60
#include "llvm/ADT/SmallVector.h"
61
#include "llvm/ADT/StringRef.h"
62
#include "llvm/ADT/iterator.h"
63
#include "llvm/Support/Casting.h"
64
#include "llvm/Support/ManagedStatic.h"
65
#include <algorithm>
66
#include <cassert>
67
#include <cstddef>
68
#include <cstdint>
69
#include <map>
70
#include <string>
71
#include <tuple>
72
#include <type_traits>
73
#include <utility>
74
#include <vector>
75
76
namespace clang {
77
78
class ASTContext;
79
80
namespace ast_matchers {
81
82
class BoundNodes;
83
84
namespace internal {
85
86
/// Variadic function object.
87
///
88
/// Most of the functions below that use VariadicFunction could be implemented
89
/// using plain C++11 variadic functions, but the function object allows us to
90
/// capture it on the dynamic matcher registry.
91
template <typename ResultT, typename ArgT,
92
          ResultT (*Func)(ArrayRef<const ArgT *>)>
93
struct VariadicFunction {
94
19.6k
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::VarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::VarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::VarDecl> const*>))>::operator()() const
Line
Count
Source
94
168
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::BlockPointerType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::BlockPointerType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BlockPointerType> const*>))>::operator()() const
Line
Count
Source
94
252
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::DeclStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::DeclStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::DeclStmt> const*>))>::operator()() const
Line
Count
Source
94
253
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::ObjCObjectPointerType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> const*>))>::operator()() const
Line
Count
Source
94
99
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCAutoreleasePoolStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> const*>))>::operator()() const
Line
Count
Source
94
142
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::IntegerLiteral>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> const*>))>::operator()() const
Line
Count
Source
94
518
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::GotoStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::GotoStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::GotoStmt> const*>))>::operator()() const
Line
Count
Source
94
165
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::SwitchStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::SwitchStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::SwitchStmt> const*>))>::operator()() const
Line
Count
Source
94
168
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ReturnStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ReturnStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ReturnStmt> const*>))>::operator()() const
Line
Count
Source
94
167
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::CXXMethodDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl> const*>))>::operator()() const
Line
Count
Source
94
1.52k
  ResultT operator()() const { return Func(None); }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::ReferenceType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::ReferenceType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ReferenceType> const*>))>::operator()() const
Line
Count
Source
94
16.1k
  ResultT operator()() const { return Func(None); }
95
96
  template <typename... ArgsT>
97
273k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
273k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
273k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CallExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CallExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CallExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::CallExpr> const&) const
Line
Count
Source
97
18.4k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
18.4k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
18.4k
  }
clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::QualType>, clang::ast_matchers::internal::Matcher<clang::QualType>, &(clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::makeAllOfComposite<clang::QualType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::QualType> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::QualType> const&) const
Line
Count
Source
97
16.9k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
16.9k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
16.9k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::FunctionDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const&) const
Line
Count
Source
97
1.49k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
1.49k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
1.49k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::IntegerLiteral>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> const&) const
Line
Count
Source
97
1.22k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
1.22k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
1.22k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::VarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::VarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::VarDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::VarDecl> const&) const
Line
Count
Source
97
69.6k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
69.6k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
69.6k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::operator()<clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasRHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasRHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)> const&) const
Line
Count
Source
97
315
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
315
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
315
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::DeclRefExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> const&) const
Line
Count
Source
97
68.3k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
68.3k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
68.3k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::Stmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeAllOfComposite<clang::Stmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::Stmt> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
97
17.7k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
17.7k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
17.7k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCMessageExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&) const
Line
Count
Source
97
359
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
359
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
359
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CompoundStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const*>))>::operator()<clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&) const
Line
Count
Source
97
75
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
75
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
75
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CompoundStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const*>))>::operator()<clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&) const
Line
Count
Source
97
75
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
75
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
75
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::Expr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::Expr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::Expr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::Expr> const&) const
Line
Count
Source
97
3.81k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
3.81k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
3.81k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::TypedefType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::TypedefType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::TypedefType> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::TypedefType> const&) const
Line
Count
Source
97
313
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
313
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
313
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::TypedefDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::TypedefDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::TypedefDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::TypedefDecl> const&) const
Line
Count
Source
97
433
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
433
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
433
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::PointerType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::PointerType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::PointerType> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::PointerType> const&) const
Line
Count
Source
97
454
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
454
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
454
  }
clang::ast_matchers::internal::TypeTraversePolymorphicMatcher<clang::QualType, clang::ast_matchers::internal::TypeMatcherpointeeGetter, clang::ast_matchers::internal::TypeTraverseMatcher, void (clang::ast_matchers::internal::TypeList<clang::BlockPointerType, clang::MemberPointerType, clang::PointerType, clang::ReferenceType>)> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::TypeTraversePolymorphicMatcher<clang::QualType, clang::ast_matchers::internal::TypeMatcherpointeeGetter, clang::ast_matchers::internal::TypeTraverseMatcher, void (clang::ast_matchers::internal::TypeList<clang::BlockPointerType, clang::MemberPointerType, clang::PointerType, clang::ReferenceType>)>, clang::ast_matchers::internal::Matcher<clang::QualType>, &(clang::ast_matchers::internal::TypeTraversePolymorphicMatcher<clang::QualType, clang::ast_matchers::internal::TypeMatcherpointeeGetter, clang::ast_matchers::internal::TypeTraverseMatcher, void (clang::ast_matchers::internal::TypeList<clang::BlockPointerType, clang::MemberPointerType, clang::PointerType, clang::ReferenceType>)>::create(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::QualType> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::QualType> const&) const
Line
Count
Source
97
1.65k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
1.65k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
1.65k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::RecordType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::RecordType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::RecordType> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::RecordType> const&) const
Line
Count
Source
97
107
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
107
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
107
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::CXXRecordDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> const&) const
Line
Count
Source
97
495
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
495
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
495
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::ObjCObjectPointerType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> const&) const
Line
Count
Source
97
104
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
104
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
104
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::ObjCInterfaceDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl> const&) const
Line
Count
Source
97
105
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
105
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
105
  }
clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::QualType>, clang::ast_matchers::internal::Matcher<clang::QualType>, &(clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::makeAllOfComposite<clang::QualType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::QualType> const*>))>::operator()<clang::ast_matchers::internal::VariadicOperatorMatcher<clang::ast_matchers::internal::BindableMatcher<clang::Type> > >(clang::ast_matchers::internal::Matcher<clang::QualType> const&, clang::ast_matchers::internal::VariadicOperatorMatcher<clang::ast_matchers::internal::BindableMatcher<clang::Type> > const&) const
Line
Count
Source
97
104
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
104
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
104
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&) const
Line
Count
Source
97
360
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
360
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
360
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::IfStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::IfStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::IfStmt> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::IfStmt> const&) const
Line
Count
Source
97
119
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
119
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
119
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ConditionalOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ConditionalOperator> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ConditionalOperator> const&) const
Line
Count
Source
97
244
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
244
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
244
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::UnaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::UnaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const&) const
Line
Count
Source
97
122
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
122
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
122
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ExplicitCastExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr> const&) const
Line
Count
Source
97
362
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
362
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
362
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::DeclStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::DeclStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::DeclStmt> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::DeclStmt> const&) const
Line
Count
Source
97
16.5k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
16.5k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
16.5k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::VarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::VarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::VarDecl> const*>))>::operator()<clang::ast_matchers::internal::Matcher<clang::VarDecl> >(clang::ast_matchers::internal::Matcher<clang::VarDecl> const&, clang::ast_matchers::internal::Matcher<clang::VarDecl> const&) const
Line
Count
Source
97
135
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
135
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
135
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::ParmVarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&) const
Line
Count
Source
97
16.7k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
16.7k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
16.7k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::operator()<clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasOperatorName0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::UnaryOperator>)> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasOperatorName0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::UnaryOperator>)> const&) const
Line
Count
Source
97
98
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
98
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
98
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::UnaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::UnaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const*>))>::operator()<clang::ast_matchers::internal::Matcher<clang::UnaryOperator> >(clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const&) const
Line
Count
Source
97
16.8k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
16.8k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
16.8k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::Decl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeAllOfComposite<clang::Decl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::Decl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::Decl> const&) const
Line
Count
Source
97
346
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
346
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
346
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::ObjCMethodDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl> const&) const
Line
Count
Source
97
103
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
103
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
103
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::BlockDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::BlockDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BlockDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::BlockDecl> const&) const
Line
Count
Source
97
100
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
100
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
100
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCMessageExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const*>))>::operator()<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, clang::ast_matchers::internal::Matcher<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&, clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
97
280
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
280
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
280
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCMessageExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const*>))>::operator()<clang::ast_matchers::internal::Matcher<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&, clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
97
140
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
140
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
140
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCAutoreleasePoolStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> const*>))>::operator()<clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&) const
Line
Count
Source
97
70
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
70
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
70
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::FunctionDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const*>))>::operator()<clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&, clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> const&) const
Line
Count
Source
97
70
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
70
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
70
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::operator()<clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasLHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasLHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)> const&) const
Line
Count
Source
97
412
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
412
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
412
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCIvarRefExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr> const&) const
Line
Count
Source
97
11
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
11
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
11
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ForStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ForStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ForStmt> const*>))>::operator()<clang::ast_matchers::internal::Matcher<clang::ForStmt>, clang::ast_matchers::internal::Matcher<clang::ForStmt>, clang::ast_matchers::internal::VariadicOperatorMatcher<clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasBody0Matcher, clang::ast_matchers::internal::Matcher<clang::Stmt>, void (clang::ast_matchers::internal::TypeList<clang::DoStmt, clang::ForStmt, clang::WhileStmt, clang::CXXForRangeStmt, clang::FunctionDecl>)> > >(clang::ast_matchers::internal::Matcher<clang::ForStmt> const&, clang::ast_matchers::internal::Matcher<clang::ForStmt> const&, clang::ast_matchers::internal::Matcher<clang::ForStmt> const&, clang::ast_matchers::internal::VariadicOperatorMatcher<clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasBody0Matcher, clang::ast_matchers::internal::Matcher<clang::Stmt>, void (clang::ast_matchers::internal::TypeList<clang::DoStmt, clang::ForStmt, clang::WhileStmt, clang::CXXForRangeStmt, clang::FunctionDecl>)> > const&) const
Line
Count
Source
97
164
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
164
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
164
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::operator()<clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&) const
Line
Count
Source
97
164
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
164
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
164
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CXXOperatorCallExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr> const&) const
Line
Count
Source
97
1.52k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
1.52k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
1.52k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CXXConstructExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr> const&) const
Line
Count
Source
97
215
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
215
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
215
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::CXXConstructorDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl> const&) const
Line
Count
Source
97
274
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
274
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
274
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::InitListExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::InitListExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::InitListExpr> const*>))>::operator()<>(clang::ast_matchers::internal::Matcher<clang::InitListExpr> const&) const
Line
Count
Source
97
16.1k
  ResultT operator()(const ArgT &Arg1, const ArgsT &... Args) const {
98
16.1k
    return Execute(Arg1, static_cast<const ArgT &>(Args)...);
99
16.1k
  }
100
101
  // We also allow calls with an already created array, in case the caller
102
  // already had it.
103
198
  ResultT operator()(ArrayRef<ArgT> Args) const {
104
198
    SmallVector<const ArgT*, 8> InnerArgs;
105
198
    for (const ArgT &Arg : Args)
106
3.04k
      InnerArgs.push_back(&Arg);
107
198
    return Func(InnerArgs);
108
198
  }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::Matcher<clang::NamedDecl>, llvm::StringRef, &(clang::ast_matchers::internal::hasAnyNameFunc(llvm::ArrayRef<llvm::StringRef const*>))>::operator()(llvm::ArrayRef<llvm::StringRef>) const
Line
Count
Source
103
99
  ResultT operator()(ArrayRef<ArgT> Args) const {
104
99
    SmallVector<const ArgT*, 8> InnerArgs;
105
99
    for (const ArgT &Arg : Args)
106
297
      InnerArgs.push_back(&Arg);
107
99
    return Func(InnerArgs);
108
99
  }
clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, llvm::StringRef, &(clang::ast_matchers::internal::hasAnySelectorFunc(llvm::ArrayRef<llvm::StringRef const*>))>::operator()(llvm::ArrayRef<llvm::StringRef>) const
Line
Count
Source
103
99
  ResultT operator()(ArrayRef<ArgT> Args) const {
104
99
    SmallVector<const ArgT*, 8> InnerArgs;
105
99
    for (const ArgT &Arg : Args)
106
2.74k
      InnerArgs.push_back(&Arg);
107
99
    return Func(InnerArgs);
108
99
  }
109
110
private:
111
  // Trampoline function to allow for implicit conversions to take place
112
  // before we make the array.
113
273k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
273k
    const ArgT *const ArgsArray[] = {&Args...};
115
273k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
273k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CallExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CallExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CallExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CallExpr> >(clang::ast_matchers::internal::Matcher<clang::CallExpr> const&) const
Line
Count
Source
113
18.4k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
18.4k
    const ArgT *const ArgsArray[] = {&Args...};
115
18.4k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
18.4k
  }
clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::QualType>, clang::ast_matchers::internal::Matcher<clang::QualType>, &(clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::makeAllOfComposite<clang::QualType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::QualType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::QualType> >(clang::ast_matchers::internal::Matcher<clang::QualType> const&) const
Line
Count
Source
113
16.9k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
16.9k
    const ArgT *const ArgsArray[] = {&Args...};
115
16.9k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
16.9k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::FunctionDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::FunctionDecl> >(clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const&) const
Line
Count
Source
113
1.49k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
1.49k
    const ArgT *const ArgsArray[] = {&Args...};
115
1.49k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
1.49k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::IntegerLiteral>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> >(clang::ast_matchers::internal::Matcher<clang::IntegerLiteral> const&) const
Line
Count
Source
113
1.22k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
1.22k
    const ArgT *const ArgsArray[] = {&Args...};
115
1.22k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
1.22k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::VarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::VarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::VarDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::VarDecl> >(clang::ast_matchers::internal::Matcher<clang::VarDecl> const&) const
Line
Count
Source
113
69.6k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
69.6k
    const ArgT *const ArgsArray[] = {&Args...};
115
69.6k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
69.6k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&) const
Line
Count
Source
113
825
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
825
    const ArgT *const ArgsArray[] = {&Args...};
115
825
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
825
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::DeclRefExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> >(clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> const&) const
Line
Count
Source
113
68.3k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
68.3k
    const ArgT *const ArgsArray[] = {&Args...};
115
68.3k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
68.3k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::Stmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeAllOfComposite<clang::Stmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::Stmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::Stmt> >(clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
113
17.7k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
17.7k
    const ArgT *const ArgsArray[] = {&Args...};
115
17.7k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
17.7k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCMessageExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> >(clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&) const
Line
Count
Source
113
359
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
359
    const ArgT *const ArgsArray[] = {&Args...};
115
359
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
359
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CompoundStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> >(clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&) const
Line
Count
Source
113
75
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
75
    const ArgT *const ArgsArray[] = {&Args...};
115
75
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
75
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CompoundStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt>, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> >(clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&, clang::ast_matchers::internal::Matcher<clang::CompoundStmt> const&) const
Line
Count
Source
113
75
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
75
    const ArgT *const ArgsArray[] = {&Args...};
115
75
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
75
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::Expr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::Expr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::Expr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::Expr> >(clang::ast_matchers::internal::Matcher<clang::Expr> const&) const
Line
Count
Source
113
3.81k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
3.81k
    const ArgT *const ArgsArray[] = {&Args...};
115
3.81k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
3.81k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::TypedefType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::TypedefType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::TypedefType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::TypedefType> >(clang::ast_matchers::internal::Matcher<clang::TypedefType> const&) const
Line
Count
Source
113
313
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
313
    const ArgT *const ArgsArray[] = {&Args...};
115
313
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
313
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::TypedefDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::TypedefDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::TypedefDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::TypedefDecl> >(clang::ast_matchers::internal::Matcher<clang::TypedefDecl> const&) const
Line
Count
Source
113
433
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
433
    const ArgT *const ArgsArray[] = {&Args...};
115
433
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
433
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::PointerType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::PointerType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::PointerType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::PointerType> >(clang::ast_matchers::internal::Matcher<clang::PointerType> const&) const
Line
Count
Source
113
454
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
454
    const ArgT *const ArgsArray[] = {&Args...};
115
454
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
454
  }
clang::ast_matchers::internal::TypeTraversePolymorphicMatcher<clang::QualType, clang::ast_matchers::internal::TypeMatcherpointeeGetter, clang::ast_matchers::internal::TypeTraverseMatcher, void (clang::ast_matchers::internal::TypeList<clang::BlockPointerType, clang::MemberPointerType, clang::PointerType, clang::ReferenceType>)> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::TypeTraversePolymorphicMatcher<clang::QualType, clang::ast_matchers::internal::TypeMatcherpointeeGetter, clang::ast_matchers::internal::TypeTraverseMatcher, void (clang::ast_matchers::internal::TypeList<clang::BlockPointerType, clang::MemberPointerType, clang::PointerType, clang::ReferenceType>)>, clang::ast_matchers::internal::Matcher<clang::QualType>, &(clang::ast_matchers::internal::TypeTraversePolymorphicMatcher<clang::QualType, clang::ast_matchers::internal::TypeMatcherpointeeGetter, clang::ast_matchers::internal::TypeTraverseMatcher, void (clang::ast_matchers::internal::TypeList<clang::BlockPointerType, clang::MemberPointerType, clang::PointerType, clang::ReferenceType>)>::create(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::QualType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::QualType> >(clang::ast_matchers::internal::Matcher<clang::QualType> const&) const
Line
Count
Source
113
1.65k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
1.65k
    const ArgT *const ArgsArray[] = {&Args...};
115
1.65k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
1.65k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::RecordType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::RecordType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::RecordType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::RecordType> >(clang::ast_matchers::internal::Matcher<clang::RecordType> const&) const
Line
Count
Source
113
107
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
107
    const ArgT *const ArgsArray[] = {&Args...};
115
107
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
107
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::CXXRecordDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> >(clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> const&) const
Line
Count
Source
113
495
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
495
    const ArgT *const ArgsArray[] = {&Args...};
115
495
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
495
  }
clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Type>, clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>, &(clang::ast_matchers::internal::BindableMatcher<clang::Type> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Type, clang::ObjCObjectPointerType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> >(clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType> const&) const
Line
Count
Source
113
104
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
104
    const ArgT *const ArgsArray[] = {&Args...};
115
104
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
104
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::ObjCInterfaceDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl> >(clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl> const&) const
Line
Count
Source
113
105
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
105
    const ArgT *const ArgsArray[] = {&Args...};
115
105
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
105
  }
clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::QualType>, clang::ast_matchers::internal::Matcher<clang::QualType>, &(clang::ast_matchers::internal::BindableMatcher<clang::QualType> clang::ast_matchers::internal::makeAllOfComposite<clang::QualType>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::QualType> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::QualType>, clang::ast_matchers::internal::Matcher<clang::QualType> >(clang::ast_matchers::internal::Matcher<clang::QualType> const&, clang::ast_matchers::internal::Matcher<clang::QualType> const&) const
Line
Count
Source
113
111
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
111
    const ArgT *const ArgsArray[] = {&Args...};
115
111
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
111
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&) const
Line
Count
Source
113
360
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
360
    const ArgT *const ArgsArray[] = {&Args...};
115
360
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
360
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::IfStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::IfStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::IfStmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::IfStmt> >(clang::ast_matchers::internal::Matcher<clang::IfStmt> const&) const
Line
Count
Source
113
119
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
119
    const ArgT *const ArgsArray[] = {&Args...};
115
119
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
119
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ConditionalOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ConditionalOperator> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ConditionalOperator> >(clang::ast_matchers::internal::Matcher<clang::ConditionalOperator> const&) const
Line
Count
Source
113
244
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
244
    const ArgT *const ArgsArray[] = {&Args...};
115
244
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
244
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::UnaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::UnaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::UnaryOperator> >(clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const&) const
Line
Count
Source
113
122
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
122
    const ArgT *const ArgsArray[] = {&Args...};
115
122
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
122
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ExplicitCastExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr> >(clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr> const&) const
Line
Count
Source
113
362
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
362
    const ArgT *const ArgsArray[] = {&Args...};
115
362
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
362
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::DeclStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::DeclStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::DeclStmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::DeclStmt> >(clang::ast_matchers::internal::Matcher<clang::DeclStmt> const&) const
Line
Count
Source
113
16.5k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
16.5k
    const ArgT *const ArgsArray[] = {&Args...};
115
16.5k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
16.5k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::VarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::VarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::VarDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::VarDecl>, clang::ast_matchers::internal::Matcher<clang::VarDecl> >(clang::ast_matchers::internal::Matcher<clang::VarDecl> const&, clang::ast_matchers::internal::Matcher<clang::VarDecl> const&) const
Line
Count
Source
113
189
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
189
    const ArgT *const ArgsArray[] = {&Args...};
115
189
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
189
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::ParmVarDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> >(clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&) const
Line
Count
Source
113
16.7k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
16.7k
    const ArgT *const ArgsArray[] = {&Args...};
115
16.7k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
16.7k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::UnaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::UnaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::UnaryOperator>, clang::ast_matchers::internal::Matcher<clang::UnaryOperator> >(clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::UnaryOperator> const&) const
Line
Count
Source
113
16.8k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
16.8k
    const ArgT *const ArgsArray[] = {&Args...};
115
16.8k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
16.8k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::Decl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeAllOfComposite<clang::Decl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::Decl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::Decl> >(clang::ast_matchers::internal::Matcher<clang::Decl> const&) const
Line
Count
Source
113
346
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
346
    const ArgT *const ArgsArray[] = {&Args...};
115
346
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
346
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::ObjCMethodDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl> >(clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl> const&) const
Line
Count
Source
113
103
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
103
    const ArgT *const ArgsArray[] = {&Args...};
115
103
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
103
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::BlockDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::BlockDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BlockDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::BlockDecl> >(clang::ast_matchers::internal::Matcher<clang::BlockDecl> const&) const
Line
Count
Source
113
100
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
100
    const ArgT *const ArgsArray[] = {&Args...};
115
100
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
100
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCMessageExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> >(clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&) const
Line
Count
Source
113
280
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
280
    const ArgT *const ArgsArray[] = {&Args...};
115
280
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
280
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCMessageExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> >(clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&, clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> const&) const
Line
Count
Source
113
144
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
144
    const ArgT *const ArgsArray[] = {&Args...};
115
144
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
144
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCAutoreleasePoolStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>, clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> >(clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> const&, clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt> const&) const
Line
Count
Source
113
70
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
70
    const ArgT *const ArgsArray[] = {&Args...};
115
70
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
70
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::FunctionDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, clang::ast_matchers::internal::Matcher<clang::FunctionDecl>, clang::ast_matchers::internal::Matcher<clang::FunctionDecl> >(clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const&, clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const&, clang::ast_matchers::internal::Matcher<clang::FunctionDecl> const&) const
Line
Count
Source
113
75
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
75
    const ArgT *const ArgsArray[] = {&Args...};
115
75
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
75
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ObjCIvarRefExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr> >(clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr> const&) const
Line
Count
Source
113
11
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
11
    const ArgT *const ArgsArray[] = {&Args...};
115
11
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
11
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::ForStmt>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::ForStmt>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::ForStmt> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::ForStmt>, clang::ast_matchers::internal::Matcher<clang::ForStmt>, clang::ast_matchers::internal::Matcher<clang::ForStmt>, clang::ast_matchers::internal::Matcher<clang::ForStmt> >(clang::ast_matchers::internal::Matcher<clang::ForStmt> const&, clang::ast_matchers::internal::Matcher<clang::ForStmt> const&, clang::ast_matchers::internal::Matcher<clang::ForStmt> const&, clang::ast_matchers::internal::Matcher<clang::ForStmt> const&) const
Line
Count
Source
113
164
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
164
    const ArgT *const ArgsArray[] = {&Args...};
115
164
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
164
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::BinaryOperator>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator>, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> >(clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&, clang::ast_matchers::internal::Matcher<clang::BinaryOperator> const&) const
Line
Count
Source
113
166
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
166
    const ArgT *const ArgsArray[] = {&Args...};
115
166
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
166
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CXXOperatorCallExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr> >(clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr> const&) const
Line
Count
Source
113
1.52k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
1.52k
    const ArgT *const ArgsArray[] = {&Args...};
115
1.52k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
1.52k
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::CXXConstructExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr> >(clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr> const&) const
Line
Count
Source
113
215
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
215
    const ArgT *const ArgsArray[] = {&Args...};
115
215
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
215
  }
clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Decl>, clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>, &(clang::ast_matchers::internal::BindableMatcher<clang::Decl> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Decl, clang::CXXConstructorDecl>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl> >(clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl> const&) const
Line
Count
Source
113
274
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
274
    const ArgT *const ArgsArray[] = {&Args...};
115
274
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
274
  }
clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::VariadicFunction<clang::ast_matchers::internal::BindableMatcher<clang::Stmt>, clang::ast_matchers::internal::Matcher<clang::InitListExpr>, &(clang::ast_matchers::internal::BindableMatcher<clang::Stmt> clang::ast_matchers::internal::makeDynCastAllOfComposite<clang::Stmt, clang::InitListExpr>(llvm::ArrayRef<clang::ast_matchers::internal::Matcher<clang::InitListExpr> const*>))>::Execute<clang::ast_matchers::internal::Matcher<clang::InitListExpr> >(clang::ast_matchers::internal::Matcher<clang::InitListExpr> const&) const
Line
Count
Source
113
16.1k
  template <typename... ArgsT> ResultT Execute(const ArgsT &... Args) const {
114
16.1k
    const ArgT *const ArgsArray[] = {&Args...};
115
16.1k
    return Func(ArrayRef<const ArgT *>(ArgsArray, sizeof...(ArgsT)));
116
16.1k
  }
117
};
118
119
/// Unifies obtaining the underlying type of a regular node through
120
/// `getType` and a TypedefNameDecl node through `getUnderlyingType`.
121
2.46k
inline QualType getUnderlyingType(const Expr &Node) { return Node.getType(); }
122
123
1.65k
inline QualType getUnderlyingType(const ValueDecl &Node) {
124
1.65k
  return Node.getType();
125
1.65k
}
126
inline QualType getUnderlyingType(const TypedefNameDecl &Node) {
127
  return Node.getUnderlyingType();
128
}
129
inline QualType getUnderlyingType(const FriendDecl &Node) {
130
  if (const TypeSourceInfo *TSI = Node.getFriendType())
131
    return TSI->getType();
132
  return QualType();
133
}
134
135
/// Unifies obtaining the FunctionProtoType pointer from both
136
/// FunctionProtoType and FunctionDecl nodes..
137
inline const FunctionProtoType *
138
getFunctionProtoType(const FunctionProtoType &Node) {
139
  return &Node;
140
}
141
142
inline const FunctionProtoType *getFunctionProtoType(const FunctionDecl &Node) {
143
  return Node.getType()->getAs<FunctionProtoType>();
144
}
145
146
/// Internal version of BoundNodes. Holds all the bound nodes.
147
0
class BoundNodesMap {
Unexecuted instantiation: clang::ast_matchers::internal::BoundNodesMap::operator=(clang::ast_matchers::internal::BoundNodesMap&&)
Unexecuted instantiation: clang::ast_matchers::internal::BoundNodesMap::operator=(clang::ast_matchers::internal::BoundNodesMap const&)
148
public:
149
  /// Adds \c Node to the map with key \c ID.
150
  ///
151
  /// The node's base type should be in NodeBaseType or it will be unaccessible.
152
5.60k
  void addNode(StringRef ID, const ast_type_traits::DynTypedNode& DynNode) {
153
5.60k
    NodeMap[ID] = DynNode;
154
5.60k
  }
155
156
  /// Returns the AST node bound to \c ID.
157
  ///
158
  /// Returns NULL if there was no node bound to \c ID or if there is a node but
159
  /// it cannot be converted to the specified type.
160
  template <typename T>
161
4.05k
  const T *getNodeAs(StringRef ID) const {
162
4.05k
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
4.05k
    if (It == NodeMap.end()) {
164
1.02k
      return nullptr;
165
1.02k
    }
166
3.03k
    return It->second.get<T>();
167
3.03k
  }
clang::CallExpr const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::CallExpr>(llvm::StringRef) const
Line
Count
Source
161
26
  const T *getNodeAs(StringRef ID) const {
162
26
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
26
    if (It == NodeMap.end()) {
164
0
      return nullptr;
165
0
    }
166
26
    return It->second.get<T>();
167
26
  }
clang::Stmt const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::Stmt>(llvm::StringRef) const
Line
Count
Source
161
780
  const T *getNodeAs(StringRef ID) const {
162
780
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
780
    if (It == NodeMap.end()) {
164
219
      return nullptr;
165
219
    }
166
561
    return It->second.get<T>();
167
561
  }
clang::Expr const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::Expr>(llvm::StringRef) const
Line
Count
Source
161
862
  const T *getNodeAs(StringRef ID) const {
162
862
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
862
    if (It == NodeMap.end()) {
164
368
      return nullptr;
165
368
    }
166
494
    return It->second.get<T>();
167
494
  }
clang::Decl const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::Decl>(llvm::StringRef) const
Line
Count
Source
161
1.25k
  const T *getNodeAs(StringRef ID) const {
162
1.25k
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
1.25k
    if (It == NodeMap.end()) {
164
135
      return nullptr;
165
135
    }
166
1.11k
    return It->second.get<T>();
167
1.11k
  }
clang::QualType const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::QualType>(llvm::StringRef) const
Line
Count
Source
161
413
  const T *getNodeAs(StringRef ID) const {
162
413
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
413
    if (It == NodeMap.end()) {
164
285
      return nullptr;
165
285
    }
166
128
    return It->second.get<T>();
167
128
  }
clang::ParmVarDecl const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::ParmVarDecl>(llvm::StringRef) const
Line
Count
Source
161
69
  const T *getNodeAs(StringRef ID) const {
162
69
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
69
    if (It == NodeMap.end()) {
164
0
      return nullptr;
165
0
    }
166
69
    return It->second.get<T>();
167
69
  }
clang::ObjCMethodDecl const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::ObjCMethodDecl>(llvm::StringRef) const
Line
Count
Source
161
18
  const T *getNodeAs(StringRef ID) const {
162
18
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
18
    if (It == NodeMap.end()) {
164
13
      return nullptr;
165
13
    }
166
5
    return It->second.get<T>();
167
5
  }
clang::ObjCMessageExpr const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::ObjCMessageExpr>(llvm::StringRef) const
Line
Count
Source
161
18
  const T *getNodeAs(StringRef ID) const {
162
18
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
18
    if (It == NodeMap.end()) {
164
2
      return nullptr;
165
2
    }
166
16
    return It->second.get<T>();
167
16
  }
clang::ObjCAutoreleasePoolStmt const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::ObjCAutoreleasePoolStmt>(llvm::StringRef) const
Line
Count
Source
161
18
  const T *getNodeAs(StringRef ID) const {
162
18
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
18
    if (It == NodeMap.end()) {
164
6
      return nullptr;
165
6
    }
166
12
    return It->second.get<T>();
167
12
  }
clang::ObjCIvarRefExpr const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::ObjCIvarRefExpr>(llvm::StringRef) const
Line
Count
Source
161
2
  const T *getNodeAs(StringRef ID) const {
162
2
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
2
    if (It == NodeMap.end()) {
164
0
      return nullptr;
165
0
    }
166
2
    return It->second.get<T>();
167
2
  }
clang::VarDecl const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::VarDecl>(llvm::StringRef) const
Line
Count
Source
161
248
  const T *getNodeAs(StringRef ID) const {
162
248
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
248
    if (It == NodeMap.end()) {
164
0
      return nullptr;
165
0
    }
166
248
    return It->second.get<T>();
167
248
  }
clang::IntegerLiteral const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::IntegerLiteral>(llvm::StringRef) const
Line
Count
Source
161
240
  const T *getNodeAs(StringRef ID) const {
162
240
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
240
    if (It == NodeMap.end()) {
164
0
      return nullptr;
165
0
    }
166
240
    return It->second.get<T>();
167
240
  }
clang::BinaryOperator const* clang::ast_matchers::internal::BoundNodesMap::getNodeAs<clang::BinaryOperator>(llvm::StringRef) const
Line
Count
Source
161
112
  const T *getNodeAs(StringRef ID) const {
162
112
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
163
112
    if (It == NodeMap.end()) {
164
0
      return nullptr;
165
0
    }
166
112
    return It->second.get<T>();
167
112
  }
168
169
536
  ast_type_traits::DynTypedNode getNode(StringRef ID) const {
170
536
    IDToNodeMap::const_iterator It = NodeMap.find(ID);
171
536
    if (It == NodeMap.end()) {
172
4
      return ast_type_traits::DynTypedNode();
173
4
    }
174
532
    return It->second;
175
532
  }
176
177
  /// Imposes an order on BoundNodesMaps.
178
100
  bool operator<(const BoundNodesMap &Other) const {
179
100
    return NodeMap < Other.NodeMap;
180
100
  }
181
182
  /// A map from IDs to the bound nodes.
183
  ///
184
  /// Note that we're using std::map here, as for memoization:
185
  /// - we need a comparison operator
186
  /// - we need an assignment operator
187
  using IDToNodeMap = std::map<std::string, ast_type_traits::DynTypedNode>;
188
189
  const IDToNodeMap &getMap() const {
190
    return NodeMap;
191
  }
192
193
  /// Returns \c true if this \c BoundNodesMap can be compared, i.e. all
194
  /// stored nodes have memoization data.
195
627
  bool isComparable() const {
196
1.15k
    for (const auto &IDAndNode : NodeMap) {
197
1.15k
      if (!IDAndNode.second.getMemoizationData())
198
132
        return false;
199
1.15k
    }
200
627
    
return true495
;
201
627
  }
202
203
private:
204
  IDToNodeMap NodeMap;
205
};
206
207
/// Creates BoundNodesTree objects.
208
///
209
/// The tree builder is used during the matching process to insert the bound
210
/// nodes from the Id matcher.
211
0
class BoundNodesTreeBuilder {
212
public:
213
  /// A visitor interface to visit all BoundNodes results for a
214
  /// BoundNodesTree.
215
  class Visitor {
216
  public:
217
5.88k
    virtual ~Visitor() = default;
218
219
    /// Called multiple times during a single call to VisitMatches(...).
220
    ///
221
    /// 'BoundNodesView' contains the bound nodes for a single match.
222
    virtual void visitMatch(const BoundNodes& BoundNodesView) = 0;
223
  };
224
225
  /// Add a binding from an id to a node.
226
5.59k
  void setBinding(StringRef Id, const ast_type_traits::DynTypedNode &DynNode) {
227
5.59k
    if (Bindings.empty())
228
4.18k
      Bindings.emplace_back();
229
5.59k
    for (BoundNodesMap &Binding : Bindings)
230
5.60k
      Binding.addNode(Id, DynNode);
231
5.59k
  }
232
233
  /// Adds a branch in the tree.
234
  void addMatch(const BoundNodesTreeBuilder &Bindings);
235
236
  /// Visits all matches that this BoundNodesTree represents.
237
  ///
238
  /// The ownership of 'ResultVisitor' remains at the caller.
239
  void visitMatches(Visitor* ResultVisitor);
240
241
  template <typename ExcludePredicate>
242
262k
  bool removeBindings(const ExcludePredicate &Predicate) {
243
262k
    Bindings.erase(std::remove_if(Bindings.begin(), Bindings.end(), Predicate),
244
262k
                   Bindings.end());
245
262k
    return !Bindings.empty();
246
262k
  }
bool clang::ast_matchers::internal::BoundNodesTreeBuilder::removeBindings<clang::ast_matchers::internal::NotEqualsBoundNodePredicate>(clang::ast_matchers::internal::NotEqualsBoundNodePredicate const&)
Line
Count
Source
242
484
  bool removeBindings(const ExcludePredicate &Predicate) {
243
484
    Bindings.erase(std::remove_if(Bindings.begin(), Bindings.end(), Predicate),
244
484
                   Bindings.end());
245
484
    return !Bindings.empty();
246
484
  }
ASTMatchersInternal.cpp:bool clang::ast_matchers::internal::BoundNodesTreeBuilder::removeBindings<clang::ast_matchers::internal::DynTypedMatcher::matches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const::$_0>(clang::ast_matchers::internal::DynTypedMatcher::matches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const::$_0 const&)
Line
Count
Source
242
227k
  bool removeBindings(const ExcludePredicate &Predicate) {
243
227k
    Bindings.erase(std::remove_if(Bindings.begin(), Bindings.end(), Predicate),
244
227k
                   Bindings.end());
245
227k
    return !Bindings.empty();
246
227k
  }
ASTMatchersInternal.cpp:bool clang::ast_matchers::internal::BoundNodesTreeBuilder::removeBindings<clang::ast_matchers::internal::DynTypedMatcher::matchesNoKindCheck(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const::$_1>(clang::ast_matchers::internal::DynTypedMatcher::matchesNoKindCheck(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const::$_1 const&)
Line
Count
Source
242
35.1k
  bool removeBindings(const ExcludePredicate &Predicate) {
243
35.1k
    Bindings.erase(std::remove_if(Bindings.begin(), Bindings.end(), Predicate),
244
35.1k
                   Bindings.end());
245
35.1k
    return !Bindings.empty();
246
35.1k
  }
247
248
  /// Imposes an order on BoundNodesTreeBuilders.
249
2.07k
  bool operator<(const BoundNodesTreeBuilder &Other) const {
250
2.07k
    return Bindings < Other.Bindings;
251
2.07k
  }
252
253
  /// Returns \c true if this \c BoundNodesTreeBuilder can be compared,
254
  /// i.e. all stored node maps have memoization data.
255
10.5k
  bool isComparable() const {
256
10.5k
    for (const BoundNodesMap &NodesMap : Bindings) {
257
627
      if (!NodesMap.isComparable())
258
132
        return false;
259
627
    }
260
10.5k
    
return true10.3k
;
261
10.5k
  }
262
263
private:
264
  SmallVector<BoundNodesMap, 16> Bindings;
265
};
266
267
class ASTMatchFinder;
268
269
/// Generic interface for all matchers.
270
///
271
/// Used by the implementation of Matcher<T> and DynTypedMatcher.
272
/// In general, implement MatcherInterface<T> or SingleNodeMatcherInterface<T>
273
/// instead.
274
class DynMatcherInterface
275
    : public llvm::ThreadSafeRefCountedBase<DynMatcherInterface> {
276
public:
277
490k
  virtual ~DynMatcherInterface() = default;
278
279
  /// Returns true if \p DynNode can be matched.
280
  ///
281
  /// May bind \p DynNode to an ID via \p Builder, or recurse into
282
  /// the AST via \p Finder.
283
  virtual bool dynMatches(const ast_type_traits::DynTypedNode &DynNode,
284
                          ASTMatchFinder *Finder,
285
                          BoundNodesTreeBuilder *Builder) const = 0;
286
};
287
288
/// Generic interface for matchers on an AST node of type T.
289
///
290
/// Implement this if your matcher may need to inspect the children or
291
/// descendants of the node or bind matched nodes to names. If you are
292
/// writing a simple matcher that only inspects properties of the
293
/// current node and doesn't care about its children or descendants,
294
/// implement SingleNodeMatcherInterface instead.
295
template <typename T>
296
class MatcherInterface : public DynMatcherInterface {
297
public:
298
  /// Returns true if 'Node' can be matched.
299
  ///
300
  /// May bind 'Node' to an ID via 'Builder', or recurse into
301
  /// the AST via 'Finder'.
302
  virtual bool matches(const T &Node,
303
                       ASTMatchFinder *Finder,
304
                       BoundNodesTreeBuilder *Builder) const = 0;
305
306
  bool dynMatches(const ast_type_traits::DynTypedNode &DynNode,
307
                  ASTMatchFinder *Finder,
308
52.8k
                  BoundNodesTreeBuilder *Builder) const override {
309
52.8k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
52.8k
  }
clang::ast_matchers::internal::MatcherInterface<clang::CallExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
3.45k
                  BoundNodesTreeBuilder *Builder) const override {
309
3.45k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
3.45k
  }
clang::ast_matchers::internal::MatcherInterface<clang::QualType>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
9.37k
                  BoundNodesTreeBuilder *Builder) const override {
309
9.37k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
9.37k
  }
clang::ast_matchers::internal::MatcherInterface<clang::Expr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
5.40k
                  BoundNodesTreeBuilder *Builder) const override {
309
5.40k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
5.40k
  }
clang::ast_matchers::internal::MatcherInterface<clang::CXXRecordDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
1.02k
                  BoundNodesTreeBuilder *Builder) const override {
309
1.02k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
1.02k
  }
clang::ast_matchers::internal::MatcherInterface<clang::CXXMemberCallExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
80
                  BoundNodesTreeBuilder *Builder) const override {
309
80
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
80
  }
clang::ast_matchers::internal::MatcherInterface<clang::IntegerLiteral>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
326
                  BoundNodesTreeBuilder *Builder) const override {
309
326
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
326
  }
clang::ast_matchers::internal::MatcherInterface<clang::VarDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
2.34k
                  BoundNodesTreeBuilder *Builder) const override {
309
2.34k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
2.34k
  }
clang::ast_matchers::internal::MatcherInterface<clang::BinaryOperator>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
2.60k
                  BoundNodesTreeBuilder *Builder) const override {
309
2.60k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
2.60k
  }
clang::ast_matchers::internal::MatcherInterface<clang::DeclRefExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
1.30k
                  BoundNodesTreeBuilder *Builder) const override {
309
1.30k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
1.30k
  }
clang::ast_matchers::internal::MatcherInterface<clang::Stmt>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
5.95k
                  BoundNodesTreeBuilder *Builder) const override {
309
5.95k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
5.95k
  }
clang::ast_matchers::internal::MatcherInterface<clang::ObjCMessageExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
233
                  BoundNodesTreeBuilder *Builder) const override {
309
233
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
233
  }
clang::ast_matchers::internal::MatcherInterface<clang::CompoundStmt>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
467
                  BoundNodesTreeBuilder *Builder) const override {
309
467
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
467
  }
clang::ast_matchers::internal::MatcherInterface<clang::Decl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
1.16k
                  BoundNodesTreeBuilder *Builder) const override {
309
1.16k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
1.16k
  }
clang::ast_matchers::internal::MatcherInterface<clang::FunctionDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
1.42k
                  BoundNodesTreeBuilder *Builder) const override {
309
1.42k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
1.42k
  }
clang::ast_matchers::internal::MatcherInterface<clang::InitListExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
180
                  BoundNodesTreeBuilder *Builder) const override {
309
180
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
180
  }
clang::ast_matchers::internal::MatcherInterface<clang::ForStmt>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
624
                  BoundNodesTreeBuilder *Builder) const override {
309
624
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
624
  }
clang::ast_matchers::internal::MatcherInterface<clang::NamedDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
10.3k
                  BoundNodesTreeBuilder *Builder) const override {
309
10.3k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
10.3k
  }
clang::ast_matchers::internal::MatcherInterface<clang::Type>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
1.05k
                  BoundNodesTreeBuilder *Builder) const override {
309
1.05k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
1.05k
  }
clang::ast_matchers::internal::MatcherInterface<clang::DeclStmt>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
336
                  BoundNodesTreeBuilder *Builder) const override {
309
336
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
336
  }
clang::ast_matchers::internal::MatcherInterface<clang::CXXConstructorDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
490
                  BoundNodesTreeBuilder *Builder) const override {
309
490
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
490
  }
clang::ast_matchers::internal::MatcherInterface<clang::CXXConstructExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
341
                  BoundNodesTreeBuilder *Builder) const override {
309
341
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
341
  }
clang::ast_matchers::internal::MatcherInterface<clang::IfStmt>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
162
                  BoundNodesTreeBuilder *Builder) const override {
309
162
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
162
  }
clang::ast_matchers::internal::MatcherInterface<clang::UnaryOperator>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
2.68k
                  BoundNodesTreeBuilder *Builder) const override {
309
2.68k
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
2.68k
  }
clang::ast_matchers::internal::MatcherInterface<clang::ExplicitCastExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
323
                  BoundNodesTreeBuilder *Builder) const override {
309
323
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
323
  }
clang::ast_matchers::internal::MatcherInterface<clang::AbstractConditionalOperator>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
65
                  BoundNodesTreeBuilder *Builder) const override {
309
65
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
65
  }
clang::ast_matchers::internal::MatcherInterface<clang::ParmVarDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
319
                  BoundNodesTreeBuilder *Builder) const override {
309
319
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
319
  }
clang::ast_matchers::internal::MatcherInterface<clang::TypedefType>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
286
                  BoundNodesTreeBuilder *Builder) const override {
309
286
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
286
  }
clang::ast_matchers::internal::MatcherInterface<clang::RecordType>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
54
                  BoundNodesTreeBuilder *Builder) const override {
309
54
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
54
  }
clang::ast_matchers::internal::MatcherInterface<clang::PointerType>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
164
                  BoundNodesTreeBuilder *Builder) const override {
309
164
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
164
  }
clang::ast_matchers::internal::MatcherInterface<clang::ObjCObjectPointerType>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
120
                  BoundNodesTreeBuilder *Builder) const override {
309
120
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
120
  }
clang::ast_matchers::internal::MatcherInterface<clang::ConditionalOperator>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
25
                  BoundNodesTreeBuilder *Builder) const override {
309
25
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
25
  }
clang::ast_matchers::internal::MatcherInterface<clang::ObjCMethodDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
42
                  BoundNodesTreeBuilder *Builder) const override {
309
42
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
42
  }
clang::ast_matchers::internal::MatcherInterface<clang::BlockDecl>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
27
                  BoundNodesTreeBuilder *Builder) const override {
309
27
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
27
  }
clang::ast_matchers::internal::MatcherInterface<clang::ObjCAutoreleasePoolStmt>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
18
                  BoundNodesTreeBuilder *Builder) const override {
309
18
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
18
  }
clang::ast_matchers::internal::MatcherInterface<clang::ObjCIvarRefExpr>::dynMatches(clang::ast_type_traits::DynTypedNode const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
308
6
                  BoundNodesTreeBuilder *Builder) const override {
309
6
    return matches(DynNode.getUnchecked<T>(), Finder, Builder);
310
6
  }
311
};
312
313
/// Interface for matchers that only evaluate properties on a single
314
/// node.
315
template <typename T>
316
class SingleNodeMatcherInterface : public MatcherInterface<T> {
317
public:
318
  /// Returns true if the matcher matches the provided node.
319
  ///
320
  /// A subclass must implement this instead of Matches().
321
  virtual bool matchesNode(const T &Node) const = 0;
322
323
private:
324
  /// Implements MatcherInterface::Matches.
325
  bool matches(const T &Node,
326
               ASTMatchFinder * /* Finder */,
327
10.3k
               BoundNodesTreeBuilder * /*  Builder */) const override {
328
10.3k
    return matchesNode(Node);
329
10.3k
  }
clang::ast_matchers::internal::SingleNodeMatcherInterface<clang::IntegerLiteral>::matches(clang::IntegerLiteral const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
327
258
               BoundNodesTreeBuilder * /*  Builder */) const override {
328
258
    return matchesNode(Node);
329
258
  }
clang::ast_matchers::internal::SingleNodeMatcherInterface<clang::NamedDecl>::matches(clang::NamedDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
327
10.0k
               BoundNodesTreeBuilder * /*  Builder */) const override {
328
10.0k
    return matchesNode(Node);
329
10.0k
  }
330
};
331
332
template <typename> class Matcher;
333
334
/// Matcher that works on a \c DynTypedNode.
335
///
336
/// It is constructed from a \c Matcher<T> object and redirects most calls to
337
/// underlying matcher.
338
/// It checks whether the \c DynTypedNode is convertible into the type of the
339
/// underlying matcher and then do the actual match on the actual node, or
340
/// return false if it is not convertible.
341
class DynTypedMatcher {
342
public:
343
  /// Takes ownership of the provided implementation pointer.
344
  template <typename T>
345
  DynTypedMatcher(MatcherInterface<T> *Implementation)
346
      : SupportedKind(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()),
347
360k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::CallExpr>(clang::ast_matchers::internal::MatcherInterface<clang::CallExpr>*)
Line
Count
Source
347
23.2k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::QualType>(clang::ast_matchers::internal::MatcherInterface<clang::QualType>*)
Line
Count
Source
347
57.4k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::Expr>(clang::ast_matchers::internal::MatcherInterface<clang::Expr>*)
Line
Count
Source
347
7.29k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::NamedDecl>(clang::ast_matchers::internal::MatcherInterface<clang::NamedDecl>*)
Line
Count
Source
347
3.77k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::CXXRecordDecl>(clang::ast_matchers::internal::MatcherInterface<clang::CXXRecordDecl>*)
Line
Count
Source
347
2.06k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::CXXMemberCallExpr>(clang::ast_matchers::internal::MatcherInterface<clang::CXXMemberCallExpr>*)
Line
Count
Source
347
265
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::IntegerLiteral>(clang::ast_matchers::internal::MatcherInterface<clang::IntegerLiteral>*)
Line
Count
Source
347
1.28k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::VarDecl>(clang::ast_matchers::internal::MatcherInterface<clang::VarDecl>*)
Line
Count
Source
347
38.1k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::BinaryOperator>(clang::ast_matchers::internal::MatcherInterface<clang::BinaryOperator>*)
Line
Count
Source
347
4.95k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::DeclRefExpr>(clang::ast_matchers::internal::MatcherInterface<clang::DeclRefExpr>*)
Line
Count
Source
347
68.3k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::Stmt>(clang::ast_matchers::internal::MatcherInterface<clang::Stmt>*)
Line
Count
Source
347
7.68k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ObjCMessageExpr>(clang::ast_matchers::internal::MatcherInterface<clang::ObjCMessageExpr>*)
Line
Count
Source
347
1.45k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::CompoundStmt>(clang::ast_matchers::internal::MatcherInterface<clang::CompoundStmt>*)
Line
Count
Source
347
729
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::TypedefType>(clang::ast_matchers::internal::MatcherInterface<clang::TypedefType>*)
Line
Count
Source
347
314
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::RecordType>(clang::ast_matchers::internal::MatcherInterface<clang::RecordType>*)
Line
Count
Source
347
108
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::PointerType>(clang::ast_matchers::internal::MatcherInterface<clang::PointerType>*)
Line
Count
Source
347
455
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ObjCObjectPointerType>(clang::ast_matchers::internal::MatcherInterface<clang::ObjCObjectPointerType>*)
Line
Count
Source
347
104
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::Type>(clang::ast_matchers::internal::MatcherInterface<clang::Type>*)
Line
Count
Source
347
1.46k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::IfStmt>(clang::ast_matchers::internal::MatcherInterface<clang::IfStmt>*)
Line
Count
Source
347
224
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::AbstractConditionalOperator>(clang::ast_matchers::internal::MatcherInterface<clang::AbstractConditionalOperator>*)
Line
Count
Source
347
508
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ConditionalOperator>(clang::ast_matchers::internal::MatcherInterface<clang::ConditionalOperator>*)
Line
Count
Source
347
110
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::UnaryOperator>(clang::ast_matchers::internal::MatcherInterface<clang::UnaryOperator>*)
Line
Count
Source
347
35.1k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ExplicitCastExpr>(clang::ast_matchers::internal::MatcherInterface<clang::ExplicitCastExpr>*)
Line
Count
Source
347
571
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::DeclStmt>(clang::ast_matchers::internal::MatcherInterface<clang::DeclStmt>*)
Line
Count
Source
347
16.6k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ParmVarDecl>(clang::ast_matchers::internal::MatcherInterface<clang::ParmVarDecl>*)
Line
Count
Source
347
16.6k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ObjCMethodDecl>(clang::ast_matchers::internal::MatcherInterface<clang::ObjCMethodDecl>*)
Line
Count
Source
347
203
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::FunctionDecl>(clang::ast_matchers::internal::MatcherInterface<clang::FunctionDecl>*)
Line
Count
Source
347
2.93k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::BlockDecl>(clang::ast_matchers::internal::MatcherInterface<clang::BlockDecl>*)
Line
Count
Source
347
201
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ObjCAutoreleasePoolStmt>(clang::ast_matchers::internal::MatcherInterface<clang::ObjCAutoreleasePoolStmt>*)
Line
Count
Source
347
140
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::Decl>(clang::ast_matchers::internal::MatcherInterface<clang::Decl>*)
Line
Count
Source
347
48.8k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ObjCIvarRefExpr>(clang::ast_matchers::internal::MatcherInterface<clang::ObjCIvarRefExpr>*)
Line
Count
Source
347
12
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::ForStmt>(clang::ast_matchers::internal::MatcherInterface<clang::ForStmt>*)
Line
Count
Source
347
664
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::CXXConstructorDecl>(clang::ast_matchers::internal::MatcherInterface<clang::CXXConstructorDecl>*)
Line
Count
Source
347
1.02k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::CXXConstructExpr>(clang::ast_matchers::internal::MatcherInterface<clang::CXXConstructExpr>*)
Line
Count
Source
347
1.09k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
clang::ast_matchers::internal::DynTypedMatcher::DynTypedMatcher<clang::InitListExpr>(clang::ast_matchers::internal::MatcherInterface<clang::InitListExpr>*)
Line
Count
Source
347
16.2k
        RestrictKind(SupportedKind), Implementation(Implementation) {}
348
349
  /// Construct from a variadic function.
350
  enum VariadicOperator {
351
    /// Matches nodes for which all provided matchers match.
352
    VO_AllOf,
353
354
    /// Matches nodes for which at least one of the provided matchers
355
    /// matches.
356
    VO_AnyOf,
357
358
    /// Matches nodes for which at least one of the provided matchers
359
    /// matches, but doesn't stop at the first match.
360
    VO_EachOf,
361
362
    /// Matches nodes that do not match the provided matcher.
363
    ///
364
    /// Uses the variadic matcher interface, but fails if
365
    /// InnerMatchers.size() != 1.
366
    VO_UnaryNot
367
  };
368
369
  static DynTypedMatcher
370
  constructVariadic(VariadicOperator Op,
371
                    ast_type_traits::ASTNodeKind SupportedKind,
372
                    std::vector<DynTypedMatcher> InnerMatchers);
373
374
  /// Get a "true" matcher for \p NodeKind.
375
  ///
376
  /// It only checks that the node is of the right kind.
377
  static DynTypedMatcher trueMatcher(ast_type_traits::ASTNodeKind NodeKind);
378
379
13.3k
  void setAllowBind(bool AB) { AllowBind = AB; }
380
381
  /// Check whether this matcher could ever match a node of kind \p Kind.
382
  /// \return \c false if this matcher will never match such a node. Otherwise,
383
  /// return \c true.
384
  bool canMatchNodesOfKind(ast_type_traits::ASTNodeKind Kind) const;
385
386
  /// Return a matcher that points to the same implementation, but
387
  ///   restricts the node types for \p Kind.
388
  DynTypedMatcher dynCastTo(const ast_type_traits::ASTNodeKind Kind) const;
389
390
  /// Returns true if the matcher matches the given \c DynNode.
391
  bool matches(const ast_type_traits::DynTypedNode &DynNode,
392
               ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder) const;
393
394
  /// Same as matches(), but skips the kind check.
395
  ///
396
  /// It is faster, but the caller must ensure the node is valid for the
397
  /// kind of this matcher.
398
  bool matchesNoKindCheck(const ast_type_traits::DynTypedNode &DynNode,
399
                          ASTMatchFinder *Finder,
400
                          BoundNodesTreeBuilder *Builder) const;
401
402
  /// Bind the specified \p ID to the matcher.
403
  /// \return A new matcher with the \p ID bound to it if this matcher supports
404
  ///   binding. Otherwise, returns an empty \c Optional<>.
405
  llvm::Optional<DynTypedMatcher> tryBind(StringRef ID) const;
406
407
  /// Returns a unique \p ID for the matcher.
408
  ///
409
  /// Casting a Matcher<T> to Matcher<U> creates a matcher that has the
410
  /// same \c Implementation pointer, but different \c RestrictKind. We need to
411
  /// include both in the ID to make it unique.
412
  ///
413
  /// \c MatcherIDType supports operator< and provides strict weak ordering.
414
  using MatcherIDType = std::pair<ast_type_traits::ASTNodeKind, uint64_t>;
415
10.3k
  MatcherIDType getID() const {
416
10.3k
    /// FIXME: Document the requirements this imposes on matcher
417
10.3k
    /// implementations (no new() implementation_ during a Matches()).
418
10.3k
    return std::make_pair(RestrictKind,
419
10.3k
                          reinterpret_cast<uint64_t>(Implementation.get()));
420
10.3k
  }
421
422
  /// Returns the type this matcher works on.
423
  ///
424
  /// \c matches() will always return false unless the node passed is of this
425
  /// or a derived type.
426
3.85k
  ast_type_traits::ASTNodeKind getSupportedKind() const {
427
3.85k
    return SupportedKind;
428
3.85k
  }
429
430
  /// Returns \c true if the passed \c DynTypedMatcher can be converted
431
  ///   to a \c Matcher<T>.
432
  ///
433
  /// This method verifies that the underlying matcher in \c Other can process
434
  /// nodes of types T.
435
2.98k
  template <typename T> bool canConvertTo() const {
436
2.98k
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
2.98k
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::Decl>() const
Line
Count
Source
435
1.55k
  template <typename T> bool canConvertTo() const {
436
1.55k
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
1.55k
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::QualType>() const
Line
Count
Source
435
724
  template <typename T> bool canConvertTo() const {
436
724
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
724
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::Stmt>() const
Line
Count
Source
435
626
  template <typename T> bool canConvertTo() const {
436
626
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
626
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::NestedNameSpecifier>() const
Line
Count
Source
435
36
  template <typename T> bool canConvertTo() const {
436
36
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
36
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::NestedNameSpecifierLoc>() const
Line
Count
Source
435
20
  template <typename T> bool canConvertTo() const {
436
20
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
20
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::TypeLoc>() const
Line
Count
Source
435
13
  template <typename T> bool canConvertTo() const {
436
13
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
13
  }
bool clang::ast_matchers::internal::DynTypedMatcher::canConvertTo<clang::CXXCtorInitializer>() const
Line
Count
Source
435
3
  template <typename T> bool canConvertTo() const {
436
3
    return canConvertTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
437
3
  }
438
  bool canConvertTo(ast_type_traits::ASTNodeKind To) const;
439
440
  /// Construct a \c Matcher<T> interface around the dynamic matcher.
441
  ///
442
  /// This method asserts that \c canConvertTo() is \c true. Callers
443
  /// should call \c canConvertTo() first to make sure that \c this is
444
  /// compatible with T.
445
1.50k
  template <typename T> Matcher<T> convertTo() const {
446
1.50k
    assert(canConvertTo<T>());
447
1.50k
    return unconditionalConvertTo<T>();
448
1.50k
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::DynTypedMatcher::convertTo<clang::Decl>() const
Line
Count
Source
445
859
  template <typename T> Matcher<T> convertTo() const {
446
859
    assert(canConvertTo<T>());
447
859
    return unconditionalConvertTo<T>();
448
859
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::DynTypedMatcher::convertTo<clang::Stmt>() const
Line
Count
Source
445
608
  template <typename T> Matcher<T> convertTo() const {
446
608
    assert(canConvertTo<T>());
447
608
    return unconditionalConvertTo<T>();
448
608
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifier> clang::ast_matchers::internal::DynTypedMatcher::convertTo<clang::NestedNameSpecifier>() const
Line
Count
Source
445
17
  template <typename T> Matcher<T> convertTo() const {
446
17
    assert(canConvertTo<T>());
447
17
    return unconditionalConvertTo<T>();
448
17
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifierLoc> clang::ast_matchers::internal::DynTypedMatcher::convertTo<clang::NestedNameSpecifierLoc>() const
Line
Count
Source
445
8
  template <typename T> Matcher<T> convertTo() const {
446
8
    assert(canConvertTo<T>());
447
8
    return unconditionalConvertTo<T>();
448
8
  }
clang::ast_matchers::internal::Matcher<clang::TypeLoc> clang::ast_matchers::internal::DynTypedMatcher::convertTo<clang::TypeLoc>() const
Line
Count
Source
445
11
  template <typename T> Matcher<T> convertTo() const {
446
11
    assert(canConvertTo<T>());
447
11
    return unconditionalConvertTo<T>();
448
11
  }
clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer> clang::ast_matchers::internal::DynTypedMatcher::convertTo<clang::CXXCtorInitializer>() const
Line
Count
Source
445
2
  template <typename T> Matcher<T> convertTo() const {
446
2
    assert(canConvertTo<T>());
447
2
    return unconditionalConvertTo<T>();
448
2
  }
449
450
  /// Same as \c convertTo(), but does not check that the underlying
451
  ///   matcher can handle a value of T.
452
  ///
453
  /// If it is not compatible, then this matcher will never match anything.
454
  template <typename T> Matcher<T> unconditionalConvertTo() const;
455
456
private:
457
 DynTypedMatcher(ast_type_traits::ASTNodeKind SupportedKind,
458
                 ast_type_traits::ASTNodeKind RestrictKind,
459
                 IntrusiveRefCntPtr<DynMatcherInterface> Implementation)
460
     : SupportedKind(SupportedKind), RestrictKind(RestrictKind),
461
132k
       Implementation(std::move(Implementation)) {}
462
463
  bool AllowBind = false;
464
  ast_type_traits::ASTNodeKind SupportedKind;
465
466
  /// A potentially stricter node kind.
467
  ///
468
  /// It allows to perform implicit and dynamic cast of matchers without
469
  /// needing to change \c Implementation.
470
  ast_type_traits::ASTNodeKind RestrictKind;
471
  IntrusiveRefCntPtr<DynMatcherInterface> Implementation;
472
};
473
474
/// Wrapper base class for a wrapping matcher.
475
///
476
/// This is just a container for a DynTypedMatcher that can be used as a base
477
/// class for another matcher.
478
template <typename T>
479
class WrapperMatcherInterface : public MatcherInterface<T> {
480
protected:
481
  explicit WrapperMatcherInterface(DynTypedMatcher &&InnerMatcher)
482
77.6k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::CallExpr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
1.20k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::QualType>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
19.8k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::VarDecl>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
434
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::Stmt>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
2.46k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::CompoundStmt>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
714
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::TypedefType>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
314
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::RecordType>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
108
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::PointerType>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
455
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::ObjCObjectPointerType>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
104
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::Expr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
1.22k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::UnaryOperator>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
343
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::ExplicitCastExpr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
208
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::ObjCMethodDecl>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
98
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::FunctionDecl>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
412
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::BlockDecl>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
98
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::ObjCAutoreleasePoolStmt>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
140
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::Decl>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
176
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::ObjCIvarRefExpr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
12
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::CXXConstructExpr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
710
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::DeclRefExpr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
16.1k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::InitListExpr>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
16.1k
      : InnerMatcher(std::move(InnerMatcher)) {}
clang::ast_matchers::internal::WrapperMatcherInterface<clang::DeclStmt>::WrapperMatcherInterface(clang::ast_matchers::internal::DynTypedMatcher&&)
Line
Count
Source
482
16.2k
      : InnerMatcher(std::move(InnerMatcher)) {}
483
484
  const DynTypedMatcher InnerMatcher;
485
};
486
487
/// Wrapper of a MatcherInterface<T> *that allows copying.
488
///
489
/// A Matcher<Base> can be used anywhere a Matcher<Derived> is
490
/// required. This establishes an is-a relationship which is reverse
491
/// to the AST hierarchy. In other words, Matcher<T> is contravariant
492
/// with respect to T. The relationship is built via a type conversion
493
/// operator rather than a type hierarchy to be able to templatize the
494
/// type hierarchy instead of spelling it out.
495
template <typename T>
496
class Matcher {
497
public:
498
  /// Takes ownership of the provided implementation pointer.
499
  explicit Matcher(MatcherInterface<T> *Implementation)
500
340k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::CallExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::CallExpr>*)
Line
Count
Source
500
23.2k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::QualType>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::QualType>*)
Line
Count
Source
500
38.0k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::Expr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::Expr>*)
Line
Count
Source
500
7.29k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::NamedDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::NamedDecl>*)
Line
Count
Source
500
3.77k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::CXXRecordDecl>*)
Line
Count
Source
500
2.06k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::CXXMemberCallExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::CXXMemberCallExpr>*)
Line
Count
Source
500
265
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::IntegerLiteral>*)
Line
Count
Source
500
1.28k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::VarDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::VarDecl>*)
Line
Count
Source
500
38.1k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::BinaryOperator>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::BinaryOperator>*)
Line
Count
Source
500
4.95k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::DeclRefExpr>*)
Line
Count
Source
500
68.3k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::Stmt>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::Stmt>*)
Line
Count
Source
500
7.68k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ObjCMessageExpr>*)
Line
Count
Source
500
1.45k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::CompoundStmt>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::CompoundStmt>*)
Line
Count
Source
500
729
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::TypedefType>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::TypedefType>*)
Line
Count
Source
500
314
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::RecordType>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::RecordType>*)
Line
Count
Source
500
108
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::PointerType>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::PointerType>*)
Line
Count
Source
500
455
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ObjCObjectPointerType>*)
Line
Count
Source
500
104
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::Type>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::Type>*)
Line
Count
Source
500
1.46k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::IfStmt>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::IfStmt>*)
Line
Count
Source
500
224
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::AbstractConditionalOperator>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::AbstractConditionalOperator>*)
Line
Count
Source
500
508
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ConditionalOperator>*)
Line
Count
Source
500
110
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::UnaryOperator>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::UnaryOperator>*)
Line
Count
Source
500
35.1k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ExplicitCastExpr>*)
Line
Count
Source
500
571
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::DeclStmt>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::DeclStmt>*)
Line
Count
Source
500
16.6k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ParmVarDecl>*)
Line
Count
Source
500
16.6k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ObjCMethodDecl>*)
Line
Count
Source
500
203
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::FunctionDecl>*)
Line
Count
Source
500
2.93k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::BlockDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::BlockDecl>*)
Line
Count
Source
500
201
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ObjCAutoreleasePoolStmt>*)
Line
Count
Source
500
140
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::Decl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::Decl>*)
Line
Count
Source
500
48.8k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ObjCIvarRefExpr>*)
Line
Count
Source
500
12
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::ForStmt>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::ForStmt>*)
Line
Count
Source
500
664
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::CXXConstructorDecl>*)
Line
Count
Source
500
1.02k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::CXXConstructExpr>*)
Line
Count
Source
500
1.09k
      : Implementation(Implementation) {}
clang::ast_matchers::internal::Matcher<clang::InitListExpr>::Matcher(clang::ast_matchers::internal::MatcherInterface<clang::InitListExpr>*)
Line
Count
Source
500
16.2k
      : Implementation(Implementation) {}
501
502
  /// Implicitly converts \c Other to a Matcher<T>.
503
  ///
504
  /// Requires \c T to be derived from \c From.
505
  template <typename From>
506
  Matcher(const Matcher<From> &Other,
507
          typename std::enable_if<std::is_base_of<From, T>::value &&
508
                               !std::is_same<From, T>::value>::type * = nullptr)
509
153k
      : Implementation(restrictMatcher(Other.Implementation)) {
510
153k
    assert(Implementation.getSupportedKind().isSame(
511
153k
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
153k
  }
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::Matcher<clang::NamedDecl>(clang::ast_matchers::internal::Matcher<clang::NamedDecl> const&, std::__1::enable_if<(std::is_base_of<clang::NamedDecl, clang::CXXRecordDecl>::value) && (!(std::is_same<clang::NamedDecl, clang::CXXRecordDecl>::value)), void>::type*)
Line
Count
Source
509
396
      : Implementation(restrictMatcher(Other.Implementation)) {
510
396
    assert(Implementation.getSupportedKind().isSame(
511
396
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
396
  }
clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::Matcher<clang::NamedDecl>(clang::ast_matchers::internal::Matcher<clang::NamedDecl> const&, std::__1::enable_if<(std::is_base_of<clang::NamedDecl, clang::FunctionDecl>::value) && (!(std::is_same<clang::NamedDecl, clang::FunctionDecl>::value)), void>::type*)
Line
Count
Source
509
994
      : Implementation(restrictMatcher(Other.Implementation)) {
510
994
    assert(Implementation.getSupportedKind().isSame(
511
994
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
994
  }
clang::ast_matchers::internal::Matcher<clang::Expr>::Matcher<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&, std::__1::enable_if<(std::is_base_of<clang::Stmt, clang::Expr>::value) && (!(std::is_same<clang::Stmt, clang::Expr>::value)), void>::type*)
Line
Count
Source
509
82.4k
      : Implementation(restrictMatcher(Other.Implementation)) {
510
82.4k
    assert(Implementation.getSupportedKind().isSame(
511
82.4k
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
82.4k
  }
clang::ast_matchers::internal::Matcher<clang::TypedefDecl>::Matcher<clang::NamedDecl>(clang::ast_matchers::internal::Matcher<clang::NamedDecl> const&, std::__1::enable_if<(std::is_base_of<clang::NamedDecl, clang::TypedefDecl>::value) && (!(std::is_same<clang::NamedDecl, clang::TypedefDecl>::value)), void>::type*)
Line
Count
Source
509
419
      : Implementation(restrictMatcher(Other.Implementation)) {
510
419
    assert(Implementation.getSupportedKind().isSame(
511
419
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
419
  }
clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>::Matcher<clang::NamedDecl>(clang::ast_matchers::internal::Matcher<clang::NamedDecl> const&, std::__1::enable_if<(std::is_base_of<clang::NamedDecl, clang::ObjCInterfaceDecl>::value) && (!(std::is_same<clang::NamedDecl, clang::ObjCInterfaceDecl>::value)), void>::type*)
Line
Count
Source
509
105
      : Implementation(restrictMatcher(Other.Implementation)) {
510
105
    assert(Implementation.getSupportedKind().isSame(
511
105
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
105
  }
clang::ast_matchers::internal::Matcher<clang::DeclStmt>::Matcher<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&, std::__1::enable_if<(std::is_base_of<clang::Stmt, clang::DeclStmt>::value) && (!(std::is_same<clang::Stmt, clang::DeclStmt>::value)), void>::type*)
Line
Count
Source
509
111
      : Implementation(restrictMatcher(Other.Implementation)) {
510
111
    assert(Implementation.getSupportedKind().isSame(
511
111
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
111
  }
clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>::Matcher<clang::AbstractConditionalOperator>(clang::ast_matchers::internal::Matcher<clang::AbstractConditionalOperator> const&, std::__1::enable_if<(std::is_base_of<clang::AbstractConditionalOperator, clang::ConditionalOperator>::value) && (!(std::is_same<clang::AbstractConditionalOperator, clang::ConditionalOperator>::value)), void>::type*)
Line
Count
Source
509
497
      : Implementation(restrictMatcher(Other.Implementation)) {
510
497
    assert(Implementation.getSupportedKind().isSame(
511
497
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
497
  }
clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::Matcher<clang::Decl>(clang::ast_matchers::internal::Matcher<clang::Decl> const&, std::__1::enable_if<(std::is_base_of<clang::Decl, clang::ParmVarDecl>::value) && (!(std::is_same<clang::Decl, clang::ParmVarDecl>::value)), void>::type*)
Line
Count
Source
509
16.7k
      : Implementation(restrictMatcher(Other.Implementation)) {
510
16.7k
    assert(Implementation.getSupportedKind().isSame(
511
16.7k
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
16.7k
  }
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>::Matcher<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&, std::__1::enable_if<(std::is_base_of<clang::Stmt, clang::ObjCMessageExpr>::value) && (!(std::is_same<clang::Stmt, clang::ObjCMessageExpr>::value)), void>::type*)
Line
Count
Source
509
420
      : Implementation(restrictMatcher(Other.Implementation)) {
510
420
    assert(Implementation.getSupportedKind().isSame(
511
420
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
420
  }
clang::ast_matchers::internal::Matcher<clang::VarDecl>::Matcher<clang::Decl>(clang::ast_matchers::internal::Matcher<clang::Decl> const&, std::__1::enable_if<(std::is_base_of<clang::Decl, clang::VarDecl>::value) && (!(std::is_same<clang::Decl, clang::VarDecl>::value)), void>::type*)
Line
Count
Source
509
48.8k
      : Implementation(restrictMatcher(Other.Implementation)) {
510
48.8k
    assert(Implementation.getSupportedKind().isSame(
511
48.8k
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
48.8k
  }
clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>::Matcher<clang::CallExpr>(clang::ast_matchers::internal::Matcher<clang::CallExpr> const&, std::__1::enable_if<(std::is_base_of<clang::CallExpr, clang::CXXOperatorCallExpr>::value) && (!(std::is_same<clang::CallExpr, clang::CXXOperatorCallExpr>::value)), void>::type*)
Line
Count
Source
509
2.13k
      : Implementation(restrictMatcher(Other.Implementation)) {
510
2.13k
    assert(Implementation.getSupportedKind().isSame(
511
2.13k
        ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
512
2.13k
  }
513
514
  /// Implicitly converts \c Matcher<Type> to \c Matcher<QualType>.
515
  ///
516
  /// The resulting matcher is not strict, i.e. ignores qualifiers.
517
  template <typename TypeT>
518
  Matcher(const Matcher<TypeT> &Other,
519
          typename std::enable_if<
520
            std::is_same<T, QualType>::value &&
521
            std::is_same<TypeT, Type>::value>::type* = nullptr)
522
19.4k
      : Implementation(new TypeToQualType<TypeT>(Other)) {}
523
524
  /// Convert \c this into a \c Matcher<T> by applying dyn_cast<> to the
525
  /// argument.
526
  /// \c To must be a base class of \c T.
527
  template <typename To>
528
264k
  Matcher<To> dynCastTo() const {
529
264k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
264k
    return Matcher<To>(Implementation);
531
264k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::CallExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
19.1k
  Matcher<To> dynCastTo() const {
529
19.1k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
19.1k
    return Matcher<To>(Implementation);
531
19.1k
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
1.84k
  Matcher<To> dynCastTo() const {
529
1.84k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
1.84k
    return Matcher<To>(Implementation);
531
1.84k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
1.77k
  Matcher<To> dynCastTo() const {
529
1.77k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
1.77k
    return Matcher<To>(Implementation);
531
1.77k
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::VarDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
70.1k
  Matcher<To> dynCastTo() const {
529
70.1k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
70.1k
    return Matcher<To>(Implementation);
531
70.1k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::BinaryOperator>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
1.35k
  Matcher<To> dynCastTo() const {
529
1.35k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
1.35k
    return Matcher<To>(Implementation);
531
1.35k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
68.4k
  Matcher<To> dynCastTo() const {
529
68.4k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
68.4k
    return Matcher<To>(Implementation);
531
68.4k
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::BlockPointerType>::dynCastTo<clang::Type>() const
Line
Count
Source
528
252
  Matcher<To> dynCastTo() const {
529
252
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
252
    return Matcher<To>(Implementation);
531
252
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
784
  Matcher<To> dynCastTo() const {
529
784
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
784
    return Matcher<To>(Implementation);
531
784
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::CompoundStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
382
  Matcher<To> dynCastTo() const {
529
382
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
382
    return Matcher<To>(Implementation);
531
382
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::Expr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
4.23k
  Matcher<To> dynCastTo() const {
529
4.23k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
4.23k
    return Matcher<To>(Implementation);
531
4.23k
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::TypedefType>::dynCastTo<clang::Type>() const
Line
Count
Source
528
315
  Matcher<To> dynCastTo() const {
529
315
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
315
    return Matcher<To>(Implementation);
531
315
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::TypedefDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
434
  Matcher<To> dynCastTo() const {
529
434
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
434
    return Matcher<To>(Implementation);
531
434
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::PointerType>::dynCastTo<clang::Type>() const
Line
Count
Source
528
468
  Matcher<To> dynCastTo() const {
529
468
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
468
    return Matcher<To>(Implementation);
531
468
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::RecordType>::dynCastTo<clang::Type>() const
Line
Count
Source
528
110
  Matcher<To> dynCastTo() const {
529
110
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
110
    return Matcher<To>(Implementation);
531
110
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
915
  Matcher<To> dynCastTo() const {
529
915
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
915
    return Matcher<To>(Implementation);
531
915
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>::dynCastTo<clang::Type>() const
Line
Count
Source
528
203
  Matcher<To> dynCastTo() const {
529
203
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
203
    return Matcher<To>(Implementation);
531
203
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
105
  Matcher<To> dynCastTo() const {
529
105
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
105
    return Matcher<To>(Implementation);
531
105
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::IfStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
133
  Matcher<To> dynCastTo() const {
529
133
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
133
    return Matcher<To>(Implementation);
531
133
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::DeclStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
16.8k
  Matcher<To> dynCastTo() const {
529
16.8k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
16.8k
    return Matcher<To>(Implementation);
531
16.8k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
250
  Matcher<To> dynCastTo() const {
529
250
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
250
    return Matcher<To>(Implementation);
531
250
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::UnaryOperator>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
17.1k
  Matcher<To> dynCastTo() const {
529
17.1k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
17.1k
    return Matcher<To>(Implementation);
531
17.1k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
362
  Matcher<To> dynCastTo() const {
529
362
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
362
    return Matcher<To>(Implementation);
531
362
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
16.7k
  Matcher<To> dynCastTo() const {
529
16.7k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
16.7k
    return Matcher<To>(Implementation);
531
16.7k
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
104
  Matcher<To> dynCastTo() const {
529
104
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
104
    return Matcher<To>(Implementation);
531
104
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::BlockDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
100
  Matcher<To> dynCastTo() const {
529
100
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
100
    return Matcher<To>(Implementation);
531
100
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
212
  Matcher<To> dynCastTo() const {
529
212
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
212
    return Matcher<To>(Implementation);
531
212
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
12
  Matcher<To> dynCastTo() const {
529
12
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
12
    return Matcher<To>(Implementation);
531
12
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ForStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
183
  Matcher<To> dynCastTo() const {
529
183
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
183
    return Matcher<To>(Implementation);
531
183
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::GotoStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
165
  Matcher<To> dynCastTo() const {
529
165
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
165
    return Matcher<To>(Implementation);
531
165
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::SwitchStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
181
  Matcher<To> dynCastTo() const {
529
181
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
181
    return Matcher<To>(Implementation);
531
181
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::ReturnStmt>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
416
  Matcher<To> dynCastTo() const {
529
416
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
416
    return Matcher<To>(Implementation);
531
416
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
2.14k
  Matcher<To> dynCastTo() const {
529
2.14k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
2.14k
    return Matcher<To>(Implementation);
531
2.14k
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
3.05k
  Matcher<To> dynCastTo() const {
529
3.05k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
3.05k
    return Matcher<To>(Implementation);
531
3.05k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
594
  Matcher<To> dynCastTo() const {
529
594
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
594
    return Matcher<To>(Implementation);
531
594
  }
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>::dynCastTo<clang::Decl>() const
Line
Count
Source
528
1.04k
  Matcher<To> dynCastTo() const {
529
1.04k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
1.04k
    return Matcher<To>(Implementation);
531
1.04k
  }
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::ReferenceType>::dynCastTo<clang::Type>() const
Line
Count
Source
528
17.2k
  Matcher<To> dynCastTo() const {
529
17.2k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
17.2k
    return Matcher<To>(Implementation);
531
17.2k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::InitListExpr>::dynCastTo<clang::Stmt>() const
Line
Count
Source
528
16.1k
  Matcher<To> dynCastTo() const {
529
16.1k
    static_assert(std::is_base_of<To, T>::value, "Invalid dynCast call.");
530
16.1k
    return Matcher<To>(Implementation);
531
16.1k
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::Stmt> clang::ast_matchers::internal::Matcher<clang::CXXConstCastExpr>::dynCastTo<clang::Stmt>() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::Matcher<clang::TagType>::dynCastTo<clang::Type>() const
532
533
  /// Forwards the call to the underlying MatcherInterface<T> pointer.
534
  bool matches(const T &Node,
535
               ASTMatchFinder *Finder,
536
21.3k
               BoundNodesTreeBuilder *Builder) const {
537
21.3k
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
21.3k
                                  Finder, Builder);
539
21.3k
  }
clang::ast_matchers::internal::Matcher<clang::Expr>::matches(clang::Expr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
6.11k
               BoundNodesTreeBuilder *Builder) const {
537
6.11k
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
6.11k
                                  Finder, Builder);
539
6.11k
  }
clang::ast_matchers::internal::Matcher<clang::ClassTemplateDecl>::matches(clang::ClassTemplateDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
10
               BoundNodesTreeBuilder *Builder) const {
537
10
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
10
                                  Finder, Builder);
539
10
  }
clang::ast_matchers::internal::Matcher<clang::QualType>::matches(clang::QualType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
7.63k
               BoundNodesTreeBuilder *Builder) const {
537
7.63k
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
7.63k
                                  Finder, Builder);
539
7.63k
  }
clang::ast_matchers::internal::Matcher<clang::TemplateName>::matches(clang::TemplateName const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
2
               BoundNodesTreeBuilder *Builder) const {
537
2
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
2
                                  Finder, Builder);
539
2
  }
clang::ast_matchers::internal::Matcher<clang::Decl>::matches(clang::Decl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
1.57k
               BoundNodesTreeBuilder *Builder) const {
537
1.57k
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
1.57k
                                  Finder, Builder);
539
1.57k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt>::matches(clang::Stmt const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
3.19k
               BoundNodesTreeBuilder *Builder) const {
537
3.19k
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
3.19k
                                  Finder, Builder);
539
3.19k
  }
clang::ast_matchers::internal::Matcher<clang::VarDecl>::matches(clang::VarDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
16
               BoundNodesTreeBuilder *Builder) const {
537
16
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
16
                                  Finder, Builder);
539
16
  }
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::matches(clang::CXXRecordDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
616
               BoundNodesTreeBuilder *Builder) const {
537
616
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
616
                                  Finder, Builder);
539
616
  }
clang::ast_matchers::internal::Matcher<clang::NamedDecl>::matches(clang::NamedDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
314
               BoundNodesTreeBuilder *Builder) const {
537
314
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
314
                                  Finder, Builder);
539
314
  }
clang::ast_matchers::internal::Matcher<clang::TypeLoc>::matches(clang::TypeLoc const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
347
               BoundNodesTreeBuilder *Builder) const {
537
347
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
347
                                  Finder, Builder);
539
347
  }
clang::ast_matchers::internal::Matcher<clang::Type>::matches(clang::Type const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
597
               BoundNodesTreeBuilder *Builder) const {
537
597
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
597
                                  Finder, Builder);
539
597
  }
clang::ast_matchers::internal::Matcher<clang::CXXMemberCallExpr>::matches(clang::CXXMemberCallExpr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
14
               BoundNodesTreeBuilder *Builder) const {
537
14
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
14
                                  Finder, Builder);
539
14
  }
clang::ast_matchers::internal::Matcher<clang::UsingShadowDecl>::matches(clang::UsingShadowDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
12
               BoundNodesTreeBuilder *Builder) const {
537
12
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
12
                                  Finder, Builder);
539
12
  }
clang::ast_matchers::internal::Matcher<clang::FieldDecl>::matches(clang::FieldDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
36
               BoundNodesTreeBuilder *Builder) const {
537
36
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
36
                                  Finder, Builder);
539
36
  }
clang::ast_matchers::internal::Matcher<clang::DeclStmt>::matches(clang::DeclStmt const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
12
               BoundNodesTreeBuilder *Builder) const {
537
12
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
12
                                  Finder, Builder);
539
12
  }
clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>::matches(clang::CXXMethodDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
220
               BoundNodesTreeBuilder *Builder) const {
537
220
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
220
                                  Finder, Builder);
539
220
  }
clang::ast_matchers::internal::Matcher<clang::ValueDecl>::matches(clang::ValueDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
12
               BoundNodesTreeBuilder *Builder) const {
537
12
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
12
                                  Finder, Builder);
539
12
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifier>::matches(clang::NestedNameSpecifier const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
64
               BoundNodesTreeBuilder *Builder) const {
537
64
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
64
                                  Finder, Builder);
539
64
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifierLoc>::matches(clang::NestedNameSpecifierLoc const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
46
               BoundNodesTreeBuilder *Builder) const {
537
46
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
46
                                  Finder, Builder);
539
46
  }
clang::ast_matchers::internal::Matcher<clang::NamespaceDecl>::matches(clang::NamespaceDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
12
               BoundNodesTreeBuilder *Builder) const {
537
12
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
12
                                  Finder, Builder);
539
12
  }
clang::ast_matchers::internal::Matcher<clang::SwitchCase>::matches(clang::SwitchCase const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
23
               BoundNodesTreeBuilder *Builder) const {
537
23
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
23
                                  Finder, Builder);
539
23
  }
clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer>::matches(clang::CXXCtorInitializer const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
72
               BoundNodesTreeBuilder *Builder) const {
537
72
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
72
                                  Finder, Builder);
539
72
  }
clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::matches(clang::FunctionDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
16
               BoundNodesTreeBuilder *Builder) const {
537
16
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
16
                                  Finder, Builder);
539
16
  }
clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::matches(clang::ParmVarDecl const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
536
401
               BoundNodesTreeBuilder *Builder) const {
537
401
    return Implementation.matches(ast_type_traits::DynTypedNode::create(Node),
538
401
                                  Finder, Builder);
539
401
  }
540
541
  /// Returns an ID that uniquely identifies the matcher.
542
  DynTypedMatcher::MatcherIDType getID() const {
543
    return Implementation.getID();
544
  }
545
546
  /// Extract the dynamic matcher.
547
  ///
548
  /// The returned matcher keeps the same restrictions as \c this and remembers
549
  /// that it is meant to support nodes of type \c T.
550
334k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
2.43k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CallExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
3.56k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::Decl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
49.0k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::QualType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
20.2k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::Expr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
41.8k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
648
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
53
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::VarDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
34.0k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::Stmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
106k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::BinaryOperator>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
6.02k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
9
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::BlockPointerType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::Type>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
19.5k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
2.04k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CompoundStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
831
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::TypedefType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::TypedefDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
2
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::PointerType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::RecordType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1
  operator DynTypedMatcher() const { return Implementation; }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
clang::ast_matchers::internal::Matcher<clang::IfStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
314
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::DeclStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
2
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
814
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::UnaryOperator>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
35.8k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
416
  operator DynTypedMatcher() const { return Implementation; }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
202
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::BlockDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
199
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
140
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ForStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
821
  operator DynTypedMatcher() const { return Implementation; }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::GotoStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SwitchStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
clang::ast_matchers::internal::Matcher<clang::ReturnStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
6
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1.99k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
3.35k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1.11k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
2.32k
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::ReferenceType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
1
  operator DynTypedMatcher() const { return Implementation; }
clang::ast_matchers::internal::Matcher<clang::InitListExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Line
Count
Source
550
76
  operator DynTypedMatcher() const { return Implementation; }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypeAliasDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TypeAliasTemplateDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LinkageSpecDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LabelDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NamespaceAliasDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ClassTemplatePartialSpecializationDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DeclaratorDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AccessSpecDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateName>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NonTypeTemplateParmDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TemplateTypeParmDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ValueDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDestructorDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::EnumConstantDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXConversionDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::FriendDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LambdaExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCImplementationDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCProtocolDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCCategoryDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCCategoryImplDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCIvarDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCPropertyDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtThrowStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtTryStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtCatchStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCAtFinallyStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ExprWithCleanups>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXStdInitializerListExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ImplicitValueInitExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenListExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SubstNonTypeTemplateParmExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UsingDirectiveDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedLookupExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedUsingValueDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnresolvedUsingTypenameDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXUnresolvedConstructExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXThisExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXBindTemporaryExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::MaterializeTemporaryExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDeleteExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDefaultArgExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BreakStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ContinueStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SwitchCase>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CaseStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DefaultStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXTryStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXThrowExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::NullStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AsmStmt>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::StringLiteral>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ImaginaryLiteral>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UserDefinedLiteral>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::OpaqueValueExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::StaticAssertDecl>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXReinterpretCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXStaticCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXDynamicCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXConstCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CStyleCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXFunctionalCastExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXTemporaryObjectExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CUDAKernelCallExpr>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::BuiltinType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ConstantArrayType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DependentSizedArrayType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::IncompleteArrayType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::VariableArrayType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AtomicType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::AutoType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DecltypeType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::FunctionType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::LValueReferenceType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::RValueReferenceType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::UnaryTransformType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::SubstTemplateTypeParmType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::DecayedType>::operator clang::ast_matchers::internal::DynTypedMatcher() const
551
552
  /// Allows the conversion of a \c Matcher<Type> to a \c
553
  /// Matcher<QualType>.
554
  ///
555
  /// Depending on the constructor argument, the matcher is either strict, i.e.
556
  /// does only matches in the absence of qualifiers, or not, i.e. simply
557
  /// ignores any qualifiers.
558
  template <typename TypeT>
559
  class TypeToQualType : public WrapperMatcherInterface<QualType> {
560
  public:
561
    TypeToQualType(const Matcher<TypeT> &InnerMatcher)
562
19.4k
        : TypeToQualType::WrapperMatcherInterface(InnerMatcher) {}
563
564
    bool matches(const QualType &Node, ASTMatchFinder *Finder,
565
5.34k
                 BoundNodesTreeBuilder *Builder) const override {
566
5.34k
      if (Node.isNull())
567
8
        return false;
568
5.34k
      return this->InnerMatcher.matches(
569
5.34k
          ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
570
5.34k
    }
571
  };
572
573
private:
574
  // For Matcher<T> <=> Matcher<U> conversions.
575
  template <typename U> friend class Matcher;
576
577
  // For DynTypedMatcher::unconditionalConvertTo<T>.
578
  friend class DynTypedMatcher;
579
580
571k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
571k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
571k
  }
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
2.10k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
2.10k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
2.10k
  }
clang::ast_matchers::internal::Matcher<clang::CallExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
1.83k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
1.83k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
1.83k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
181k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
181k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
181k
  }
clang::ast_matchers::internal::Matcher<clang::QualType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
19.3k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
19.3k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
19.3k
  }
clang::ast_matchers::internal::Matcher<clang::Expr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
102k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
102k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
102k
  }
clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
1.46k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
1.46k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
1.46k
  }
clang::ast_matchers::internal::Matcher<clang::Decl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
104k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
104k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
104k
  }
clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
544
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
544
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
544
  }
clang::ast_matchers::internal::Matcher<clang::VarDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
66.1k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
66.1k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
66.1k
  }
clang::ast_matchers::internal::Matcher<clang::BinaryOperator>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
2.42k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
2.42k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
2.42k
  }
clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
25
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
25
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
25
  }
clang::ast_matchers::internal::Matcher<clang::BlockPointerType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
252
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
252
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
252
  }
clang::ast_matchers::internal::Matcher<clang::Type>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
19.3k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
19.3k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
19.3k
  }
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
1.37k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
1.37k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
1.37k
  }
clang::ast_matchers::internal::Matcher<clang::CompoundStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
484
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
484
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
484
  }
clang::ast_matchers::internal::Matcher<clang::TypedefType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
2
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
2
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
2
  }
clang::ast_matchers::internal::Matcher<clang::TypedefDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
420
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
420
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
420
  }
clang::ast_matchers::internal::Matcher<clang::PointerType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
14
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
14
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
14
  }
clang::ast_matchers::internal::Matcher<clang::RecordType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
3
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
3
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
3
  }
clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
99
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
99
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
99
  }
clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
105
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
105
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
105
  }
clang::ast_matchers::internal::Matcher<clang::IfStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
223
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
223
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
223
  }
clang::ast_matchers::internal::Matcher<clang::DeclStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
365
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
365
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
365
  }
clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
954
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
954
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
954
  }
clang::ast_matchers::internal::Matcher<clang::UnaryOperator>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
17.9k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
17.9k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
17.9k
  }
clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
208
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
208
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
208
  }
clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
16.7k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
16.7k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
16.7k
  }
clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
103
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
103
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
103
  }
clang::ast_matchers::internal::Matcher<clang::BlockDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
98
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
98
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
98
  }
clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
212
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
212
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
212
  }
clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
1
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
1
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
1
  }
clang::ast_matchers::internal::Matcher<clang::ForStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
340
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
340
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
340
  }
clang::ast_matchers::internal::Matcher<clang::GotoStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
165
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
165
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
165
  }
clang::ast_matchers::internal::Matcher<clang::SwitchStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
168
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
168
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
168
  }
clang::ast_matchers::internal::Matcher<clang::ReturnStmt>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
175
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
175
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
175
  }
clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
2.76k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
2.76k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
2.76k
  }
clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
6.40k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
6.40k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
6.40k
  }
clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
618
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
618
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
618
  }
clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
2.35k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
2.35k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
2.35k
  }
clang::ast_matchers::internal::Matcher<clang::ReferenceType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
16.1k
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
16.1k
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
16.1k
  }
clang::ast_matchers::internal::Matcher<clang::InitListExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
26
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
26
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
26
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifier>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
35
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
35
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
35
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifierLoc>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
21
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
21
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
21
  }
clang::ast_matchers::internal::Matcher<clang::TypeLoc>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
302
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
302
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
302
  }
clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
580
14
  static DynTypedMatcher restrictMatcher(const DynTypedMatcher &Other) {
581
14
    return Other.dynCastTo(ast_type_traits::ASTNodeKind::getFromNodeKind<T>());
582
14
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ImplicitValueInitExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ParenListExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::OpaqueValueExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::CXXConstCastExpr>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::TagType>::restrictMatcher(clang::ast_matchers::internal::DynTypedMatcher const&)
583
584
  explicit Matcher(const DynTypedMatcher &Implementation)
585
413k
      : Implementation(restrictMatcher(Implementation)) {
586
413k
    assert(this->Implementation.getSupportedKind()
587
413k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
413k
  }
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
1.26k
      : Implementation(restrictMatcher(Implementation)) {
586
1.26k
    assert(this->Implementation.getSupportedKind()
587
1.26k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
1.26k
  }
clang::ast_matchers::internal::Matcher<clang::CallExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
1.83k
      : Implementation(restrictMatcher(Implementation)) {
586
1.83k
    assert(this->Implementation.getSupportedKind()
587
1.83k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
1.83k
  }
clang::ast_matchers::internal::Matcher<clang::Stmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
181k
      : Implementation(restrictMatcher(Implementation)) {
586
181k
    assert(this->Implementation.getSupportedKind()
587
181k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
181k
  }
clang::ast_matchers::internal::Matcher<clang::QualType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
19.3k
      : Implementation(restrictMatcher(Implementation)) {
586
19.3k
    assert(this->Implementation.getSupportedKind()
587
19.3k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
19.3k
  }
clang::ast_matchers::internal::Matcher<clang::Expr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
19.7k
      : Implementation(restrictMatcher(Implementation)) {
586
19.7k
    assert(this->Implementation.getSupportedKind()
587
19.7k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
19.7k
  }
clang::ast_matchers::internal::Matcher<clang::FunctionDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
464
      : Implementation(restrictMatcher(Implementation)) {
586
464
    assert(this->Implementation.getSupportedKind()
587
464
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
464
  }
clang::ast_matchers::internal::Matcher<clang::Decl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
104k
      : Implementation(restrictMatcher(Implementation)) {
586
104k
    assert(this->Implementation.getSupportedKind()
587
104k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
104k
  }
clang::ast_matchers::internal::Matcher<clang::IntegerLiteral>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
544
      : Implementation(restrictMatcher(Implementation)) {
586
544
    assert(this->Implementation.getSupportedKind()
587
544
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
544
  }
clang::ast_matchers::internal::Matcher<clang::VarDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
17.1k
      : Implementation(restrictMatcher(Implementation)) {
586
17.1k
    assert(this->Implementation.getSupportedKind()
587
17.1k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
17.1k
  }
clang::ast_matchers::internal::Matcher<clang::BinaryOperator>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
2.42k
      : Implementation(restrictMatcher(Implementation)) {
586
2.42k
    assert(this->Implementation.getSupportedKind()
587
2.42k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
2.42k
  }
clang::ast_matchers::internal::Matcher<clang::DeclRefExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
25
      : Implementation(restrictMatcher(Implementation)) {
586
25
    assert(this->Implementation.getSupportedKind()
587
25
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
25
  }
clang::ast_matchers::internal::Matcher<clang::BlockPointerType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
252
      : Implementation(restrictMatcher(Implementation)) {
586
252
    assert(this->Implementation.getSupportedKind()
587
252
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
252
  }
clang::ast_matchers::internal::Matcher<clang::Type>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
19.3k
      : Implementation(restrictMatcher(Implementation)) {
586
19.3k
    assert(this->Implementation.getSupportedKind()
587
19.3k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
19.3k
  }
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
955
      : Implementation(restrictMatcher(Implementation)) {
586
955
    assert(this->Implementation.getSupportedKind()
587
955
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
955
  }
clang::ast_matchers::internal::Matcher<clang::CompoundStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
484
      : Implementation(restrictMatcher(Implementation)) {
586
484
    assert(this->Implementation.getSupportedKind()
587
484
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
484
  }
clang::ast_matchers::internal::Matcher<clang::TypedefType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
2
      : Implementation(restrictMatcher(Implementation)) {
586
2
    assert(this->Implementation.getSupportedKind()
587
2
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
2
  }
clang::ast_matchers::internal::Matcher<clang::TypedefDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
1
      : Implementation(restrictMatcher(Implementation)) {
586
1
    assert(this->Implementation.getSupportedKind()
587
1
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
1
  }
clang::ast_matchers::internal::Matcher<clang::PointerType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
14
      : Implementation(restrictMatcher(Implementation)) {
586
14
    assert(this->Implementation.getSupportedKind()
587
14
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
14
  }
clang::ast_matchers::internal::Matcher<clang::RecordType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
3
      : Implementation(restrictMatcher(Implementation)) {
586
3
    assert(this->Implementation.getSupportedKind()
587
3
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
3
  }
clang::ast_matchers::internal::Matcher<clang::ObjCObjectPointerType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
99
      : Implementation(restrictMatcher(Implementation)) {
586
99
    assert(this->Implementation.getSupportedKind()
587
99
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
99
  }
Unexecuted instantiation: clang::ast_matchers::internal::Matcher<clang::ObjCInterfaceDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
clang::ast_matchers::internal::Matcher<clang::IfStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
222
      : Implementation(restrictMatcher(Implementation)) {
586
222
    assert(this->Implementation.getSupportedKind()
587
222
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
222
  }
clang::ast_matchers::internal::Matcher<clang::DeclStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
254
      : Implementation(restrictMatcher(Implementation)) {
586
254
    assert(this->Implementation.getSupportedKind()
587
254
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
254
  }
clang::ast_matchers::internal::Matcher<clang::ConditionalOperator>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
457
      : Implementation(restrictMatcher(Implementation)) {
586
457
    assert(this->Implementation.getSupportedKind()
587
457
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
457
  }
clang::ast_matchers::internal::Matcher<clang::UnaryOperator>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
17.9k
      : Implementation(restrictMatcher(Implementation)) {
586
17.9k
    assert(this->Implementation.getSupportedKind()
587
17.9k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
17.9k
  }
clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
208
      : Implementation(restrictMatcher(Implementation)) {
586
208
    assert(this->Implementation.getSupportedKind()
587
208
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
208
  }
clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
6
      : Implementation(restrictMatcher(Implementation)) {
586
6
    assert(this->Implementation.getSupportedKind()
587
6
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
6
  }
clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
99
      : Implementation(restrictMatcher(Implementation)) {
586
99
    assert(this->Implementation.getSupportedKind()
587
99
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
99
  }
clang::ast_matchers::internal::Matcher<clang::BlockDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
98
      : Implementation(restrictMatcher(Implementation)) {
586
98
    assert(this->Implementation.getSupportedKind()
587
98
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
98
  }
clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
212
      : Implementation(restrictMatcher(Implementation)) {
586
212
    assert(this->Implementation.getSupportedKind()
587
212
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
212
  }
clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
1
      : Implementation(restrictMatcher(Implementation)) {
586
1
    assert(this->Implementation.getSupportedKind()
587
1
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
1
  }
clang::ast_matchers::internal::Matcher<clang::ForStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
340
      : Implementation(restrictMatcher(Implementation)) {
586
340
    assert(this->Implementation.getSupportedKind()
587
340
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
340
  }
clang::ast_matchers::internal::Matcher<clang::GotoStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
165
      : Implementation(restrictMatcher(Implementation)) {
586
165
    assert(this->Implementation.getSupportedKind()
587
165
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
165
  }
clang::ast_matchers::internal::Matcher<clang::SwitchStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
168
      : Implementation(restrictMatcher(Implementation)) {
586
168
    assert(this->Implementation.getSupportedKind()
587
168
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
168
  }
clang::ast_matchers::internal::Matcher<clang::ReturnStmt>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
170
      : Implementation(restrictMatcher(Implementation)) {
586
170
    assert(this->Implementation.getSupportedKind()
587
170
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
170
  }
clang::ast_matchers::internal::Matcher<clang::CXXOperatorCallExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
625
      : Implementation(restrictMatcher(Implementation)) {
586
625
    assert(this->Implementation.getSupportedKind()
587
625
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
625
  }
clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
3.69k
      : Implementation(restrictMatcher(Implementation)) {
586
3.69k
    assert(this->Implementation.getSupportedKind()
587
3.69k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
3.69k
  }
clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
618
      : Implementation(restrictMatcher(Implementation)) {
586
618
    assert(this->Implementation.getSupportedKind()
587
618
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
618
  }
clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
1.54k
      : Implementation(restrictMatcher(Implementation)) {
586
1.54k
    assert(this->Implementation.getSupportedKind()
587
1.54k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
1.54k
  }
clang::ast_matchers::internal::Matcher<clang::ReferenceType>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
16.1k
      : Implementation(restrictMatcher(Implementation)) {
586
16.1k
    assert(this->Implementation.getSupportedKind()
587
16.1k
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
16.1k
  }
clang::ast_matchers::internal::Matcher<clang::InitListExpr>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
26
      : Implementation(restrictMatcher(Implementation)) {
586
26
    assert(this->Implementation.getSupportedKind()
587
26
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
26
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifier>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
35
      : Implementation(restrictMatcher(Implementation)) {
586
35
    assert(this->Implementation.getSupportedKind()
587
35
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
35
  }
clang::ast_matchers::internal::Matcher<clang::NestedNameSpecifierLoc>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
21
      : Implementation(restrictMatcher(Implementation)) {
586
21
    assert(this->Implementation.getSupportedKind()
587
21
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
21
  }
clang::ast_matchers::internal::Matcher<clang::TypeLoc>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
302
      : Implementation(restrictMatcher(Implementation)) {
586
302
    assert(this->Implementation.getSupportedKind()
587
302
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
302
  }
clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer>::Matcher(clang::ast_matchers::internal::DynTypedMatcher const&)
Line
Count
Source
585
14
      : Implementation(restrictMatcher(Implementation)) {
586
14
    assert(this->Implementation.getSupportedKind()
587
14
               .isSame(ast_type_traits::ASTNodeKind::getFromNodeKind<T>()));
588
14
  }
589
590
  DynTypedMatcher Implementation;
591
};  // class Matcher
592
593
/// A convenient helper for creating a Matcher<T> without specifying
594
/// the template type argument.
595
template <typename T>
596
189k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
189k
  return Matcher<T>(Implementation);
598
189k
}
clang::ast_matchers::internal::Matcher<clang::CXXRecordDecl> clang::ast_matchers::internal::makeMatcher<clang::CXXRecordDecl>(clang::ast_matchers::internal::MatcherInterface<clang::CXXRecordDecl>*)
Line
Count
Source
596
1.91k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
1.91k
  return Matcher<T>(Implementation);
598
1.91k
}
clang::ast_matchers::internal::Matcher<clang::QualType> clang::ast_matchers::internal::makeMatcher<clang::QualType>(clang::ast_matchers::internal::MatcherInterface<clang::QualType>*)
Line
Count
Source
596
37.6k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
37.6k
  return Matcher<T>(Implementation);
598
37.6k
}
clang::ast_matchers::internal::Matcher<clang::CXXMemberCallExpr> clang::ast_matchers::internal::makeMatcher<clang::CXXMemberCallExpr>(clang::ast_matchers::internal::MatcherInterface<clang::CXXMemberCallExpr>*)
Line
Count
Source
596
263
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
263
  return Matcher<T>(Implementation);
598
263
}
clang::ast_matchers::internal::Matcher<clang::CallExpr> clang::ast_matchers::internal::makeMatcher<clang::CallExpr>(clang::ast_matchers::internal::MatcherInterface<clang::CallExpr>*)
Line
Count
Source
596
4.11k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
4.11k
  return Matcher<T>(Implementation);
598
4.11k
}
clang::ast_matchers::internal::Matcher<clang::Expr> clang::ast_matchers::internal::makeMatcher<clang::Expr>(clang::ast_matchers::internal::MatcherInterface<clang::Expr>*)
Line
Count
Source
596
4.68k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
4.68k
  return Matcher<T>(Implementation);
598
4.68k
}
clang::ast_matchers::internal::Matcher<clang::DeclRefExpr> clang::ast_matchers::internal::makeMatcher<clang::DeclRefExpr>(clang::ast_matchers::internal::MatcherInterface<clang::DeclRefExpr>*)
Line
Count
Source
596
52.2k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
52.2k
  return Matcher<T>(Implementation);
598
52.2k
}
clang::ast_matchers::internal::Matcher<clang::Decl> clang::ast_matchers::internal::makeMatcher<clang::Decl>(clang::ast_matchers::internal::MatcherInterface<clang::Decl>*)
Line
Count
Source
596
48.0k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
48.0k
  return Matcher<T>(Implementation);
598
48.0k
}
clang::ast_matchers::internal::Matcher<clang::FunctionDecl> clang::ast_matchers::internal::makeMatcher<clang::FunctionDecl>(clang::ast_matchers::internal::MatcherInterface<clang::FunctionDecl>*)
Line
Count
Source
596
2.02k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
2.02k
  return Matcher<T>(Implementation);
598
2.02k
}
clang::ast_matchers::internal::Matcher<clang::ForStmt> clang::ast_matchers::internal::makeMatcher<clang::ForStmt>(clang::ast_matchers::internal::MatcherInterface<clang::ForStmt>*)
Line
Count
Source
596
330
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
330
  return Matcher<T>(Implementation);
598
330
}
clang::ast_matchers::internal::Matcher<clang::NamedDecl> clang::ast_matchers::internal::makeMatcher<clang::NamedDecl>(clang::ast_matchers::internal::MatcherInterface<clang::NamedDecl>*)
Line
Count
Source
596
115
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
115
  return Matcher<T>(Implementation);
598
115
}
clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr> clang::ast_matchers::internal::makeMatcher<clang::ObjCMessageExpr>(clang::ast_matchers::internal::MatcherInterface<clang::ObjCMessageExpr>*)
Line
Count
Source
596
676
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
676
  return Matcher<T>(Implementation);
598
676
}
clang::ast_matchers::internal::Matcher<clang::Type> clang::ast_matchers::internal::makeMatcher<clang::Type>(clang::ast_matchers::internal::MatcherInterface<clang::Type>*)
Line
Count
Source
596
1.46k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
1.46k
  return Matcher<T>(Implementation);
598
1.46k
}
clang::ast_matchers::internal::Matcher<clang::DeclStmt> clang::ast_matchers::internal::makeMatcher<clang::DeclStmt>(clang::ast_matchers::internal::MatcherInterface<clang::DeclStmt>*)
Line
Count
Source
596
288
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
288
  return Matcher<T>(Implementation);
598
288
}
clang::ast_matchers::internal::Matcher<clang::VarDecl> clang::ast_matchers::internal::makeMatcher<clang::VarDecl>(clang::ast_matchers::internal::MatcherInterface<clang::VarDecl>*)
Line
Count
Source
596
17.7k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
17.7k
  return Matcher<T>(Implementation);
598
17.7k
}
clang::ast_matchers::internal::Matcher<clang::IfStmt> clang::ast_matchers::internal::makeMatcher<clang::IfStmt>(clang::ast_matchers::internal::MatcherInterface<clang::IfStmt>*)
Line
Count
Source
596
111
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
111
  return Matcher<T>(Implementation);
598
111
}
clang::ast_matchers::internal::Matcher<clang::UnaryOperator> clang::ast_matchers::internal::makeMatcher<clang::UnaryOperator>(clang::ast_matchers::internal::MatcherInterface<clang::UnaryOperator>*)
Line
Count
Source
596
17.0k
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
17.0k
  return Matcher<T>(Implementation);
598
17.0k
}
clang::ast_matchers::internal::Matcher<clang::AbstractConditionalOperator> clang::ast_matchers::internal::makeMatcher<clang::AbstractConditionalOperator>(clang::ast_matchers::internal::MatcherInterface<clang::AbstractConditionalOperator>*)
Line
Count
Source
596
508
inline Matcher<T> makeMatcher(MatcherInterface<T> *Implementation) {
597
508
  return Matcher<T>(Implementation);
598
508
}
599
600
/// Specialization of the conversion functions for QualType.
601
///
602
/// This specialization provides the Matcher<Type>->Matcher<QualType>
603
/// conversion that the static API does.
604
template <>
605
104
inline Matcher<QualType> DynTypedMatcher::convertTo<QualType>() const {
606
104
  assert(canConvertTo<QualType>());
607
104
  const ast_type_traits::ASTNodeKind SourceKind = getSupportedKind();
608
104
  if (SourceKind.isSame(
609
104
          ast_type_traits::ASTNodeKind::getFromNodeKind<Type>())) {
610
83
    // We support implicit conversion from Matcher<Type> to Matcher<QualType>
611
83
    return unconditionalConvertTo<Type>();
612
83
  }
613
21
  return unconditionalConvertTo<QualType>();
614
21
}
615
616
/// Finds the first node in a range that matches the given matcher.
617
template <typename MatcherT, typename IteratorT>
618
bool matchesFirstInRange(const MatcherT &Matcher, IteratorT Start,
619
                         IteratorT End, ASTMatchFinder *Finder,
620
                         BoundNodesTreeBuilder *Builder) {
621
  for (IteratorT I = Start; I != End; ++I) {
622
    BoundNodesTreeBuilder Result(*Builder);
623
    if (Matcher.matches(*I, Finder, &Result)) {
624
      *Builder = std::move(Result);
625
      return true;
626
    }
627
  }
628
  return false;
629
}
630
631
/// Finds the first node in a pointer range that matches the given
632
/// matcher.
633
template <typename MatcherT, typename IteratorT>
634
bool matchesFirstInPointerRange(const MatcherT &Matcher, IteratorT Start,
635
                                IteratorT End, ASTMatchFinder *Finder,
636
326
                                BoundNodesTreeBuilder *Builder) {
637
583
  for (IteratorT I = Start; I != End; 
++I257
) {
638
372
    BoundNodesTreeBuilder Result(*Builder);
639
372
    if (Matcher.matches(**I, Finder, &Result)) {
640
115
      *Builder = std::move(Result);
641
115
      return true;
642
115
    }
643
372
  }
644
326
  
return false211
;
645
326
}
bool clang::ast_matchers::internal::matchesFirstInPointerRange<clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl>, clang::DeclContext::specific_decl_iterator<clang::CXXMethodDecl> >(clang::ast_matchers::internal::Matcher<clang::CXXMethodDecl> const&, clang::DeclContext::specific_decl_iterator<clang::CXXMethodDecl>, clang::DeclContext::specific_decl_iterator<clang::CXXMethodDecl>, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*)
Line
Count
Source
636
68
                                BoundNodesTreeBuilder *Builder) {
637
234
  for (IteratorT I = Start; I != End; 
++I166
) {
638
204
    BoundNodesTreeBuilder Result(*Builder);
639
204
    if (Matcher.matches(**I, Finder, &Result)) {
640
38
      *Builder = std::move(Result);
641
38
      return true;
642
38
    }
643
204
  }
644
68
  
return false30
;
645
68
}
bool clang::ast_matchers::internal::matchesFirstInPointerRange<clang::ast_matchers::internal::Matcher<clang::Decl>, clang::UnresolvedSetIterator>(clang::ast_matchers::internal::Matcher<clang::Decl> const&, clang::UnresolvedSetIterator, clang::UnresolvedSetIterator, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*)
Line
Count
Source
636
14
                                BoundNodesTreeBuilder *Builder) {
637
26
  for (IteratorT I = Start; I != End; 
++I12
) {
638
20
    BoundNodesTreeBuilder Result(*Builder);
639
20
    if (Matcher.matches(**I, Finder, &Result)) {
640
8
      *Builder = std::move(Result);
641
8
      return true;
642
8
    }
643
20
  }
644
14
  
return false6
;
645
14
}
bool clang::ast_matchers::internal::matchesFirstInPointerRange<clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer>, clang::CXXCtorInitializer* const*>(clang::ast_matchers::internal::Matcher<clang::CXXCtorInitializer> const&, clang::CXXCtorInitializer* const*, clang::CXXCtorInitializer* const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*)
Line
Count
Source
636
120
                                BoundNodesTreeBuilder *Builder) {
637
154
  for (IteratorT I = Start; I != End; 
++I34
) {
638
62
    BoundNodesTreeBuilder Result(*Builder);
639
62
    if (Matcher.matches(**I, Finder, &Result)) {
640
28
      *Builder = std::move(Result);
641
28
      return true;
642
28
    }
643
62
  }
644
120
  
return false92
;
645
120
}
bool clang::ast_matchers::internal::matchesFirstInPointerRange<clang::ast_matchers::internal::Matcher<clang::UsingShadowDecl>, clang::UsingDecl::shadow_iterator>(clang::ast_matchers::internal::Matcher<clang::UsingShadowDecl> const&, clang::UsingDecl::shadow_iterator, clang::UsingDecl::shadow_iterator, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*)
Line
Count
Source
636
8
                                BoundNodesTreeBuilder *Builder) {
637
12
  for (IteratorT I = Start; I != End; 
++I4
) {
638
10
    BoundNodesTreeBuilder Result(*Builder);
639
10
    if (Matcher.matches(**I, Finder, &Result)) {
640
6
      *Builder = std::move(Result);
641
6
      return true;
642
6
    }
643
10
  }
644
8
  
return false2
;
645
8
}
bool clang::ast_matchers::internal::matchesFirstInPointerRange<clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, clang::ParmVarDecl const* const*>(clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&, clang::ParmVarDecl const* const*, clang::ParmVarDecl const* const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*)
Line
Count
Source
636
30
                                BoundNodesTreeBuilder *Builder) {
637
37
  for (IteratorT I = Start; I != End; 
++I7
) {
638
15
    BoundNodesTreeBuilder Result(*Builder);
639
15
    if (Matcher.matches(**I, Finder, &Result)) {
640
8
      *Builder = std::move(Result);
641
8
      return true;
642
8
    }
643
15
  }
644
30
  
return false22
;
645
30
}
bool clang::ast_matchers::internal::matchesFirstInPointerRange<clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, clang::ParmVarDecl* const*>(clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&, clang::ParmVarDecl* const*, clang::ParmVarDecl* const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*)
Line
Count
Source
636
86
                                BoundNodesTreeBuilder *Builder) {
637
120
  for (IteratorT I = Start; I != End; 
++I34
) {
638
61
    BoundNodesTreeBuilder Result(*Builder);
639
61
    if (Matcher.matches(**I, Finder, &Result)) {
640
27
      *Builder = std::move(Result);
641
27
      return true;
642
27
    }
643
61
  }
644
86
  
return false59
;
645
86
}
646
647
// Metafunction to determine if type T has a member called getDecl.
648
template <typename Ty>
649
class has_getDecl {
650
  using yes = char[1];
651
  using no = char[2];
652
653
  template <typename Inner>
654
  static yes& test(Inner *I, decltype(I->getDecl()) * = nullptr);
655
656
  template <typename>
657
  static no& test(...);
658
659
public:
660
  static const bool value = sizeof(test<Ty>(nullptr)) == sizeof(yes);
661
};
662
663
/// Matches overloaded operators with a specific name.
664
///
665
/// The type argument ArgT is not used by this matcher but is used by
666
/// PolymorphicMatcherWithParam1 and should be StringRef.
667
template <typename T, typename ArgT>
668
class HasOverloadedOperatorNameMatcher : public SingleNodeMatcherInterface<T> {
669
  static_assert(std::is_same<T, CXXOperatorCallExpr>::value ||
670
                std::is_base_of<FunctionDecl, T>::value,
671
                "unsupported class for matcher");
672
  static_assert(std::is_same<ArgT, StringRef>::value,
673
                "argument type must be StringRef");
674
675
public:
676
  explicit HasOverloadedOperatorNameMatcher(const StringRef Name)
677
      : SingleNodeMatcherInterface<T>(), Name(Name) {}
678
679
  bool matchesNode(const T &Node) const override {
680
    return matchesSpecialized(Node);
681
  }
682
683
private:
684
685
  /// CXXOperatorCallExpr exist only for calls to overloaded operators
686
  /// so this function returns true if the call is to an operator of the given
687
  /// name.
688
  bool matchesSpecialized(const CXXOperatorCallExpr &Node) const {
689
    return getOperatorSpelling(Node.getOperator()) == Name;
690
  }
691
692
  /// Returns true only if CXXMethodDecl represents an overloaded
693
  /// operator and has the given operator name.
694
  bool matchesSpecialized(const FunctionDecl &Node) const {
695
    return Node.isOverloadedOperator() &&
696
           getOperatorSpelling(Node.getOverloadedOperator()) == Name;
697
  }
698
699
  std::string Name;
700
};
701
702
/// Matches named declarations with a specific name.
703
///
704
/// See \c hasName() and \c hasAnyName() in ASTMatchers.h for details.
705
class HasNameMatcher : public SingleNodeMatcherInterface<NamedDecl> {
706
 public:
707
  explicit HasNameMatcher(std::vector<std::string> Names);
708
709
  bool matchesNode(const NamedDecl &Node) const override;
710
711
 private:
712
  /// Unqualified match routine.
713
  ///
714
  /// It is much faster than the full match, but it only works for unqualified
715
  /// matches.
716
  bool matchesNodeUnqualified(const NamedDecl &Node) const;
717
718
  /// Full match routine
719
  ///
720
  /// Fast implementation for the simple case of a named declaration at
721
  /// namespace or RecordDecl scope.
722
  /// It is slower than matchesNodeUnqualified, but faster than
723
  /// matchesNodeFullSlow.
724
  bool matchesNodeFullFast(const NamedDecl &Node) const;
725
726
  /// Full match routine
727
  ///
728
  /// It generates the fully qualified name of the declaration (which is
729
  /// expensive) before trying to match.
730
  /// It is slower but simple and works on all cases.
731
  bool matchesNodeFullSlow(const NamedDecl &Node) const;
732
733
  const bool UseUnqualifiedMatch;
734
  const std::vector<std::string> Names;
735
};
736
737
/// Trampoline function to use VariadicFunction<> to construct a
738
///        HasNameMatcher.
739
Matcher<NamedDecl> hasAnyNameFunc(ArrayRef<const StringRef *> NameRefs);
740
741
/// Trampoline function to use VariadicFunction<> to construct a
742
///        hasAnySelector matcher.
743
Matcher<ObjCMessageExpr> hasAnySelectorFunc(
744
    ArrayRef<const StringRef *> NameRefs);
745
746
/// Matches declarations for QualType and CallExpr.
747
///
748
/// Type argument DeclMatcherT is required by PolymorphicMatcherWithParam1 but
749
/// not actually used.
750
template <typename T, typename DeclMatcherT>
751
class HasDeclarationMatcher : public WrapperMatcherInterface<T> {
752
  static_assert(std::is_same<DeclMatcherT, Matcher<Decl>>::value,
753
                "instantiated with wrong types");
754
755
public:
756
  explicit HasDeclarationMatcher(const Matcher<Decl> &InnerMatcher)
757
18.8k
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::CallExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
1.19k
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::QualType, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
343
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::TypedefType, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
314
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::RecordType, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
108
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::ObjCIvarRefExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
12
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::CXXConstructExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
702
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
clang::ast_matchers::internal::HasDeclarationMatcher<clang::DeclRefExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::HasDeclarationMatcher(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
757
16.1k
      : HasDeclarationMatcher::WrapperMatcherInterface(InnerMatcher) {}
758
759
  bool matches(const T &Node, ASTMatchFinder *Finder,
760
1.63k
               BoundNodesTreeBuilder *Builder) const override {
761
1.63k
    return matchesSpecialized(Node, Finder, Builder);
762
1.63k
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::CallExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::CallExpr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
788
               BoundNodesTreeBuilder *Builder) const override {
761
788
    return matchesSpecialized(Node, Finder, Builder);
762
788
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::QualType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::QualType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
408
               BoundNodesTreeBuilder *Builder) const override {
761
408
    return matchesSpecialized(Node, Finder, Builder);
762
408
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::TypedefType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::TypedefType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
286
               BoundNodesTreeBuilder *Builder) const override {
761
286
    return matchesSpecialized(Node, Finder, Builder);
762
286
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::RecordType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::RecordType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
54
               BoundNodesTreeBuilder *Builder) const override {
761
54
    return matchesSpecialized(Node, Finder, Builder);
762
54
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::ObjCIvarRefExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::ObjCIvarRefExpr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
6
               BoundNodesTreeBuilder *Builder) const override {
761
6
    return matchesSpecialized(Node, Finder, Builder);
762
6
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::CXXConstructExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::CXXConstructExpr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
78
               BoundNodesTreeBuilder *Builder) const override {
761
78
    return matchesSpecialized(Node, Finder, Builder);
762
78
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::DeclRefExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matches(clang::DeclRefExpr const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
760
18
               BoundNodesTreeBuilder *Builder) const override {
761
18
    return matchesSpecialized(Node, Finder, Builder);
762
18
  }
763
764
private:
765
  /// Forwards to matching on the underlying type of the QualType.
766
  bool matchesSpecialized(const QualType &Node, ASTMatchFinder *Finder,
767
422
                          BoundNodesTreeBuilder *Builder) const {
768
422
    if (Node.isNull())
769
0
      return false;
770
422
771
422
    return matchesSpecialized(*Node, Finder, Builder);
772
422
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::QualType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesSpecialized(clang::QualType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
767
422
                          BoundNodesTreeBuilder *Builder) const {
768
422
    if (Node.isNull())
769
0
      return false;
770
422
771
422
    return matchesSpecialized(*Node, Finder, Builder);
772
422
  }
Unexecuted instantiation: clang::ast_matchers::internal::HasDeclarationMatcher<clang::TypedefType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesSpecialized(clang::QualType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Unexecuted instantiation: clang::ast_matchers::internal::HasDeclarationMatcher<clang::RecordType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesSpecialized(clang::QualType const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
773
774
  /// Finds the best declaration for a type and returns whether the inner
775
  /// matcher matches on it.
776
  bool matchesSpecialized(const Type &Node, ASTMatchFinder *Finder,
777
784
                          BoundNodesTreeBuilder *Builder) const {
778
784
    // DeducedType does not have declarations of its own, so
779
784
    // match the deduced type instead.
780
784
    const Type *EffectiveType = &Node;
781
784
    if (const auto *S = dyn_cast<DeducedType>(&Node)) {
782
2
      EffectiveType = S->getDeducedType().getTypePtrOrNull();
783
2
      if (!EffectiveType)
784
0
        return false;
785
784
    }
786
784
787
784
    // First, for any types that have a declaration, extract the declaration and
788
784
    // match on it.
789
784
    if (const auto *S = dyn_cast<TagType>(EffectiveType)) {
790
220
      return matchesDecl(S->getDecl(), Finder, Builder);
791
220
    }
792
564
    if (const auto *S = dyn_cast<InjectedClassNameType>(EffectiveType)) {
793
2
      return matchesDecl(S->getDecl(), Finder, Builder);
794
2
    }
795
562
    if (const auto *S = dyn_cast<TemplateTypeParmType>(EffectiveType)) {
796
6
      return matchesDecl(S->getDecl(), Finder, Builder);
797
6
    }
798
556
    if (const auto *S = dyn_cast<TypedefType>(EffectiveType)) {
799
288
      return matchesDecl(S->getDecl(), Finder, Builder);
800
288
    }
801
268
    if (const auto *S = dyn_cast<UnresolvedUsingType>(EffectiveType)) {
802
2
      return matchesDecl(S->getDecl(), Finder, Builder);
803
2
    }
804
266
    if (const auto *S = dyn_cast<ObjCObjectType>(EffectiveType)) {
805
122
      return matchesDecl(S->getInterface(), Finder, Builder);
806
122
    }
807
144
808
144
    // A SubstTemplateTypeParmType exists solely to mark a type substitution
809
144
    // on the instantiated template. As users usually want to match the
810
144
    // template parameter on the uninitialized template, we can always desugar
811
144
    // one level without loss of expressivness.
812
144
    // For example, given:
813
144
    //   template<typename T> struct X { T t; } class A {}; X<A> a;
814
144
    // The following matcher will match, which otherwise would not:
815
144
    //   fieldDecl(hasType(pointerType())).
816
144
    if (const auto *S = dyn_cast<SubstTemplateTypeParmType>(EffectiveType)) {
817
8
      return matchesSpecialized(S->getReplacementType(), Finder, Builder);
818
8
    }
819
136
820
136
    // For template specialization types, we want to match the template
821
136
    // declaration, as long as the type is still dependent, and otherwise the
822
136
    // declaration of the instantiated tag type.
823
136
    if (const auto *S = dyn_cast<TemplateSpecializationType>(EffectiveType)) {
824
22
      if (!S->isTypeAlias() && S->isSugared()) {
825
22
        // If the template is non-dependent, we want to match the instantiated
826
22
        // tag type.
827
22
        // For example, given:
828
22
        //   template<typename T> struct X {}; X<int> a;
829
22
        // The following matcher will match, which otherwise would not:
830
22
        //   templateSpecializationType(hasDeclaration(cxxRecordDecl())).
831
22
        return matchesSpecialized(*S->desugar(), Finder, Builder);
832
22
      }
833
0
      // If the template is dependent or an alias, match the template
834
0
      // declaration.
835
0
      return matchesDecl(S->getTemplateName().getAsTemplateDecl(), Finder,
836
0
                         Builder);
837
0
    }
838
114
839
114
    // FIXME: We desugar elaborated types. This makes the assumption that users
840
114
    // do never want to match on whether a type is elaborated - there are
841
114
    // arguments for both sides; for now, continue desugaring.
842
114
    if (const auto *S = dyn_cast<ElaboratedType>(EffectiveType)) {
843
6
      return matchesSpecialized(S->desugar(), Finder, Builder);
844
6
    }
845
108
    return false;
846
108
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::QualType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesSpecialized(clang::Type const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
777
444
                          BoundNodesTreeBuilder *Builder) const {
778
444
    // DeducedType does not have declarations of its own, so
779
444
    // match the deduced type instead.
780
444
    const Type *EffectiveType = &Node;
781
444
    if (const auto *S = dyn_cast<DeducedType>(&Node)) {
782
2
      EffectiveType = S->getDeducedType().getTypePtrOrNull();
783
2
      if (!EffectiveType)
784
0
        return false;
785
444
    }
786
444
787
444
    // First, for any types that have a declaration, extract the declaration and
788
444
    // match on it.
789
444
    if (const auto *S = dyn_cast<TagType>(EffectiveType)) {
790
166
      return matchesDecl(S->getDecl(), Finder, Builder);
791
166
    }
792
278
    if (const auto *S = dyn_cast<InjectedClassNameType>(EffectiveType)) {
793
2
      return matchesDecl(S->getDecl(), Finder, Builder);
794
2
    }
795
276
    if (const auto *S = dyn_cast<TemplateTypeParmType>(EffectiveType)) {
796
6
      return matchesDecl(S->getDecl(), Finder, Builder);
797
6
    }
798
270
    if (const auto *S = dyn_cast<TypedefType>(EffectiveType)) {
799
2
      return matchesDecl(S->getDecl(), Finder, Builder);
800
2
    }
801
268
    if (const auto *S = dyn_cast<UnresolvedUsingType>(EffectiveType)) {
802
2
      return matchesDecl(S->getDecl(), Finder, Builder);
803
2
    }
804
266
    if (const auto *S = dyn_cast<ObjCObjectType>(EffectiveType)) {
805
122
      return matchesDecl(S->getInterface(), Finder, Builder);
806
122
    }
807
144
808
144
    // A SubstTemplateTypeParmType exists solely to mark a type substitution
809
144
    // on the instantiated template. As users usually want to match the
810
144
    // template parameter on the uninitialized template, we can always desugar
811
144
    // one level without loss of expressivness.
812
144
    // For example, given:
813
144
    //   template<typename T> struct X { T t; } class A {}; X<A> a;
814
144
    // The following matcher will match, which otherwise would not:
815
144
    //   fieldDecl(hasType(pointerType())).
816
144
    if (const auto *S = dyn_cast<SubstTemplateTypeParmType>(EffectiveType)) {
817
8
      return matchesSpecialized(S->getReplacementType(), Finder, Builder);
818
8
    }
819
136
820
136
    // For template specialization types, we want to match the template
821
136
    // declaration, as long as the type is still dependent, and otherwise the
822
136
    // declaration of the instantiated tag type.
823
136
    if (const auto *S = dyn_cast<TemplateSpecializationType>(EffectiveType)) {
824
22
      if (!S->isTypeAlias() && S->isSugared()) {
825
22
        // If the template is non-dependent, we want to match the instantiated
826
22
        // tag type.
827
22
        // For example, given:
828
22
        //   template<typename T> struct X {}; X<int> a;
829
22
        // The following matcher will match, which otherwise would not:
830
22
        //   templateSpecializationType(hasDeclaration(cxxRecordDecl())).
831
22
        return matchesSpecialized(*S->desugar(), Finder, Builder);
832
22
      }
833
0
      // If the template is dependent or an alias, match the template
834
0
      // declaration.
835
0
      return matchesDecl(S->getTemplateName().getAsTemplateDecl(), Finder,
836
0
                         Builder);
837
0
    }
838
114
839
114
    // FIXME: We desugar elaborated types. This makes the assumption that users
840
114
    // do never want to match on whether a type is elaborated - there are
841
114
    // arguments for both sides; for now, continue desugaring.
842
114
    if (const auto *S = dyn_cast<ElaboratedType>(EffectiveType)) {
843
6
      return matchesSpecialized(S->desugar(), Finder, Builder);
844
6
    }
845
108
    return false;
846
108
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::TypedefType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesSpecialized(clang::Type const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
777
286
                          BoundNodesTreeBuilder *Builder) const {
778
286
    // DeducedType does not have declarations of its own, so
779
286
    // match the deduced type instead.
780
286
    const Type *EffectiveType = &Node;
781
286
    if (const auto *S = dyn_cast<DeducedType>(&Node)) {
782
0
      EffectiveType = S->getDeducedType().getTypePtrOrNull();
783
0
      if (!EffectiveType)
784
0
        return false;
785
286
    }
786
286
787
286
    // First, for any types that have a declaration, extract the declaration and
788
286
    // match on it.
789
286
    if (const auto *S = dyn_cast<TagType>(EffectiveType)) {
790
0
      return matchesDecl(S->getDecl(), Finder, Builder);
791
0
    }
792
286
    if (const auto *S = dyn_cast<InjectedClassNameType>(EffectiveType)) {
793
0
      return matchesDecl(S->getDecl(), Finder, Builder);
794
0
    }
795
286
    if (const auto *S = dyn_cast<TemplateTypeParmType>(EffectiveType)) {
796
0
      return matchesDecl(S->getDecl(), Finder, Builder);
797
0
    }
798
286
    if (const auto *S = dyn_cast<TypedefType>(EffectiveType)) {
799
286
      return matchesDecl(S->getDecl(), Finder, Builder);
800
286
    }
801
0
    if (const auto *S = dyn_cast<UnresolvedUsingType>(EffectiveType)) {
802
0
      return matchesDecl(S->getDecl(), Finder, Builder);
803
0
    }
804
0
    if (const auto *S = dyn_cast<ObjCObjectType>(EffectiveType)) {
805
0
      return matchesDecl(S->getInterface(), Finder, Builder);
806
0
    }
807
0
808
0
    // A SubstTemplateTypeParmType exists solely to mark a type substitution
809
0
    // on the instantiated template. As users usually want to match the
810
0
    // template parameter on the uninitialized template, we can always desugar
811
0
    // one level without loss of expressivness.
812
0
    // For example, given:
813
0
    //   template<typename T> struct X { T t; } class A {}; X<A> a;
814
0
    // The following matcher will match, which otherwise would not:
815
0
    //   fieldDecl(hasType(pointerType())).
816
0
    if (const auto *S = dyn_cast<SubstTemplateTypeParmType>(EffectiveType)) {
817
0
      return matchesSpecialized(S->getReplacementType(), Finder, Builder);
818
0
    }
819
0
820
0
    // For template specialization types, we want to match the template
821
0
    // declaration, as long as the type is still dependent, and otherwise the
822
0
    // declaration of the instantiated tag type.
823
0
    if (const auto *S = dyn_cast<TemplateSpecializationType>(EffectiveType)) {
824
0
      if (!S->isTypeAlias() && S->isSugared()) {
825
0
        // If the template is non-dependent, we want to match the instantiated
826
0
        // tag type.
827
0
        // For example, given:
828
0
        //   template<typename T> struct X {}; X<int> a;
829
0
        // The following matcher will match, which otherwise would not:
830
0
        //   templateSpecializationType(hasDeclaration(cxxRecordDecl())).
831
0
        return matchesSpecialized(*S->desugar(), Finder, Builder);
832
0
      }
833
0
      // If the template is dependent or an alias, match the template
834
0
      // declaration.
835
0
      return matchesDecl(S->getTemplateName().getAsTemplateDecl(), Finder,
836
0
                         Builder);
837
0
    }
838
0
839
0
    // FIXME: We desugar elaborated types. This makes the assumption that users
840
0
    // do never want to match on whether a type is elaborated - there are
841
0
    // arguments for both sides; for now, continue desugaring.
842
0
    if (const auto *S = dyn_cast<ElaboratedType>(EffectiveType)) {
843
0
      return matchesSpecialized(S->desugar(), Finder, Builder);
844
0
    }
845
0
    return false;
846
0
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::RecordType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesSpecialized(clang::Type const&, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
777
54
                          BoundNodesTreeBuilder *Builder) const {
778
54
    // DeducedType does not have declarations of its own, so
779
54
    // match the deduced type instead.
780
54
    const Type *EffectiveType = &Node;
781
54
    if (const auto *S = dyn_cast<DeducedType>(&Node)) {
782
0
      EffectiveType = S->getDeducedType().getTypePtrOrNull();
783
0
      if (!EffectiveType)
784
0
        return false;
785
54
    }
786
54
787
54
    // First, for any types that have a declaration, extract the declaration and
788
54
    // match on it.
789
54
    if (const auto *S = dyn_cast<TagType>(EffectiveType)) {
790
54
      return matchesDecl(S->getDecl(), Finder, Builder);
791
54
    }
792
0
    if (const auto *S = dyn_cast<InjectedClassNameType>(EffectiveType)) {
793
0
      return matchesDecl(S->getDecl(), Finder, Builder);
794
0
    }
795
0
    if (const auto *S = dyn_cast<TemplateTypeParmType>(EffectiveType)) {
796
0
      return matchesDecl(S->getDecl(), Finder, Builder);
797
0
    }
798
0
    if (const auto *S = dyn_cast<TypedefType>(EffectiveType)) {
799
0
      return matchesDecl(S->getDecl(), Finder, Builder);
800
0
    }
801
0
    if (const auto *S = dyn_cast<UnresolvedUsingType>(EffectiveType)) {
802
0
      return matchesDecl(S->getDecl(), Finder, Builder);
803
0
    }
804
0
    if (const auto *S = dyn_cast<ObjCObjectType>(EffectiveType)) {
805
0
      return matchesDecl(S->getInterface(), Finder, Builder);
806
0
    }
807
0
808
0
    // A SubstTemplateTypeParmType exists solely to mark a type substitution
809
0
    // on the instantiated template. As users usually want to match the
810
0
    // template parameter on the uninitialized template, we can always desugar
811
0
    // one level without loss of expressivness.
812
0
    // For example, given:
813
0
    //   template<typename T> struct X { T t; } class A {}; X<A> a;
814
0
    // The following matcher will match, which otherwise would not:
815
0
    //   fieldDecl(hasType(pointerType())).
816
0
    if (const auto *S = dyn_cast<SubstTemplateTypeParmType>(EffectiveType)) {
817
0
      return matchesSpecialized(S->getReplacementType(), Finder, Builder);
818
0
    }
819
0
820
0
    // For template specialization types, we want to match the template
821
0
    // declaration, as long as the type is still dependent, and otherwise the
822
0
    // declaration of the instantiated tag type.
823
0
    if (const auto *S = dyn_cast<TemplateSpecializationType>(EffectiveType)) {
824
0
      if (!S->isTypeAlias() && S->isSugared()) {
825
0
        // If the template is non-dependent, we want to match the instantiated
826
0
        // tag type.
827
0
        // For example, given:
828
0
        //   template<typename T> struct X {}; X<int> a;
829
0
        // The following matcher will match, which otherwise would not:
830
0
        //   templateSpecializationType(hasDeclaration(cxxRecordDecl())).
831
0
        return matchesSpecialized(*S->desugar(), Finder, Builder);
832
0
      }
833
0
      // If the template is dependent or an alias, match the template
834
0
      // declaration.
835
0
      return matchesDecl(S->getTemplateName().getAsTemplateDecl(), Finder,
836
0
                         Builder);
837
0
    }
838
0
839
0
    // FIXME: We desugar elaborated types. This makes the assumption that users
840
0
    // do never want to match on whether a type is elaborated - there are
841
0
    // arguments for both sides; for now, continue desugaring.
842
0
    if (const auto *S = dyn_cast<ElaboratedType>(EffectiveType)) {
843
0
      return matchesSpecialized(S->desugar(), Finder, Builder);
844
0
    }
845
0
    return false;
846
0
  }
847
848
  /// Extracts the Decl the DeclRefExpr references and returns whether
849
  /// the inner matcher matches on it.
850
  bool matchesSpecialized(const DeclRefExpr &Node, ASTMatchFinder *Finder,
851
18
                          BoundNodesTreeBuilder *Builder) const {
852
18
    return matchesDecl(Node.getDecl(), Finder, Builder);
853
18
  }
854
855
  /// Extracts the Decl of the callee of a CallExpr and returns whether
856
  /// the inner matcher matches on it.
857
  bool matchesSpecialized(const CallExpr &Node, ASTMatchFinder *Finder,
858
788
                          BoundNodesTreeBuilder *Builder) const {
859
788
    return matchesDecl(Node.getCalleeDecl(), Finder, Builder);
860
788
  }
861
862
  /// Extracts the Decl of the constructor call and returns whether the
863
  /// inner matcher matches on it.
864
  bool matchesSpecialized(const CXXConstructExpr &Node,
865
                          ASTMatchFinder *Finder,
866
78
                          BoundNodesTreeBuilder *Builder) const {
867
78
    return matchesDecl(Node.getConstructor(), Finder, Builder);
868
78
  }
869
870
  bool matchesSpecialized(const ObjCIvarRefExpr &Node,
871
                          ASTMatchFinder *Finder,
872
6
                          BoundNodesTreeBuilder *Builder) const {
873
6
    return matchesDecl(Node.getDecl(), Finder, Builder);
874
6
  }
875
876
  /// Extracts the operator new of the new call and returns whether the
877
  /// inner matcher matches on it.
878
  bool matchesSpecialized(const CXXNewExpr &Node,
879
                          ASTMatchFinder *Finder,
880
                          BoundNodesTreeBuilder *Builder) const {
881
    return matchesDecl(Node.getOperatorNew(), Finder, Builder);
882
  }
883
884
  /// Extracts the \c ValueDecl a \c MemberExpr refers to and returns
885
  /// whether the inner matcher matches on it.
886
  bool matchesSpecialized(const MemberExpr &Node,
887
                          ASTMatchFinder *Finder,
888
                          BoundNodesTreeBuilder *Builder) const {
889
    return matchesDecl(Node.getMemberDecl(), Finder, Builder);
890
  }
891
892
  /// Extracts the \c LabelDecl a \c AddrLabelExpr refers to and returns
893
  /// whether the inner matcher matches on it.
894
  bool matchesSpecialized(const AddrLabelExpr &Node,
895
                          ASTMatchFinder *Finder,
896
                          BoundNodesTreeBuilder *Builder) const {
897
    return matchesDecl(Node.getLabel(), Finder, Builder);
898
  }
899
900
  /// Extracts the declaration of a LabelStmt and returns whether the
901
  /// inner matcher matches on it.
902
  bool matchesSpecialized(const LabelStmt &Node, ASTMatchFinder *Finder,
903
                          BoundNodesTreeBuilder *Builder) const {
904
    return matchesDecl(Node.getDecl(), Finder, Builder);
905
  }
906
907
  /// Returns whether the inner matcher \c Node. Returns false if \c Node
908
  /// is \c NULL.
909
  bool matchesDecl(const Decl *Node, ASTMatchFinder *Finder,
910
1.53k
                   BoundNodesTreeBuilder *Builder) const {
911
1.53k
    return Node != nullptr &&
912
1.53k
           this->InnerMatcher.matches(
913
1.51k
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
1.53k
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::CallExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
788
                   BoundNodesTreeBuilder *Builder) const {
911
788
    return Node != nullptr &&
912
788
           this->InnerMatcher.matches(
913
774
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
788
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::QualType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
300
                   BoundNodesTreeBuilder *Builder) const {
911
300
    return Node != nullptr &&
912
300
           this->InnerMatcher.matches(
913
299
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
300
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::TypedefType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
286
                   BoundNodesTreeBuilder *Builder) const {
911
286
    return Node != nullptr &&
912
286
           this->InnerMatcher.matches(
913
286
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
286
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::RecordType, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
54
                   BoundNodesTreeBuilder *Builder) const {
911
54
    return Node != nullptr &&
912
54
           this->InnerMatcher.matches(
913
54
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
54
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::ObjCIvarRefExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
6
                   BoundNodesTreeBuilder *Builder) const {
911
6
    return Node != nullptr &&
912
6
           this->InnerMatcher.matches(
913
6
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
6
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::CXXConstructExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
78
                   BoundNodesTreeBuilder *Builder) const {
911
78
    return Node != nullptr &&
912
78
           this->InnerMatcher.matches(
913
78
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
78
  }
clang::ast_matchers::internal::HasDeclarationMatcher<clang::DeclRefExpr, clang::ast_matchers::internal::Matcher<clang::Decl> >::matchesDecl(clang::Decl const*, clang::ast_matchers::internal::ASTMatchFinder*, clang::ast_matchers::internal::BoundNodesTreeBuilder*) const
Line
Count
Source
910
18
                   BoundNodesTreeBuilder *Builder) const {
911
18
    return Node != nullptr &&
912
18
           this->InnerMatcher.matches(
913
18
               ast_type_traits::DynTypedNode::create(*Node), Finder, Builder);
914
18
  }
915
};
916
917
/// IsBaseType<T>::value is true if T is a "base" type in the AST
918
/// node class hierarchies.
919
template <typename T>
920
struct IsBaseType {
921
  static const bool value =
922
      std::is_same<T, Decl>::value ||
923
      std::is_same<T, Stmt>::value ||
924
      std::is_same<T, QualType>::value ||
925
      std::is_same<T, Type>::value ||
926
      std::is_same<T, TypeLoc>::value ||
927
      std::is_same<T, NestedNameSpecifier>::value ||
928
      std::is_same<T, NestedNameSpecifierLoc>::value ||
929
      std::is_same<T, CXXCtorInitializer>::value;
930
};
931
template <typename T>
932
const bool IsBaseType<T>::value;
933
934
/// Interface that allows matchers to traverse the AST.
935
/// FIXME: Find a better name.
936
///
937
/// This provides three entry methods for each base node type in the AST:
938
/// - \c matchesChildOf:
939
///   Matches a matcher on every child node of the given node. Returns true
940
///   if at least one child node could be matched.
941
/// - \c matchesDescendantOf:
942
///   Matches a matcher on all descendant nodes of the given node. Returns true
943
///   if at least one descendant matched.
944
/// - \c matchesAncestorOf:
945
///   Matches a matcher on all ancestors of the given node. Returns true if
946
///   at least one ancestor matched.
947
///
948
/// FIXME: Currently we only allow Stmt and Decl nodes to start a traversal.
949
/// In the future, we want to implement this for all nodes for which it makes
950
/// sense. In the case of matchesAncestorOf, we'll want to implement it for
951
/// all nodes, as all nodes have ancestors.
952
class ASTMatchFinder {
953
public:
954
  /// Defines how we descend a level in the AST when we pass
955
  /// through expressions.
956
  enum TraversalKind {
957
    /// Will traverse any child nodes.
958
    TK_AsIs,
959
960
    /// Will not traverse implicit casts and parentheses.
961
    TK_IgnoreImplicitCastsAndParentheses
962
  };
963
964
  /// Defines how bindings are processed on recursive matches.
965
  enum BindKind {
966
    /// Stop at the first match and only bind the first match.
967
    BK_First,
968
969
    /// Create results for all combinations of bindings that match.
970
    BK_All
971
  };
972
973
  /// Defines which ancestors are considered for a match.
974
  enum AncestorMatchMode {
975
    /// All ancestors.
976
    AMM_All,
977
978
    /// Direct parent only.
979
    AMM_ParentOnly
980
  };
981
982
22.6k
  virtual ~ASTMatchFinder() = default;
983
984
  /// Returns true if the given class is directly or indirectly derived
985
  /// from a base type matching \c base.
986
  ///
987
  /// A class is considered to be also derived from itself.
988
  virtual bool classIsDerivedFrom(const CXXRecordDecl *Declaration,
989
                                  const Matcher<NamedDecl> &Base,
990
                                  BoundNodesTreeBuilder *Builder) = 0;
991
992
  template <typename T>
993
  bool matchesChildOf(const T &Node,
994
                      const DynTypedMatcher &Matcher,
995
                      BoundNodesTreeBuilder *Builder,
996
                      TraversalKind Traverse,
997
259
                      BindKind Bind) {
998
259
    static_assert(std::is_base_of<Decl, T>::value ||
999
259
                  std::is_base_of<Stmt, T>::value ||
1000
259
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1001
259
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1002
259
                  std::is_base_of<TypeLoc, T>::value ||
1003
259
                  std::is_base_of<QualType, T>::value,
1004
259
                  "unsupported type for recursive matching");
1005
259
    return matchesChildOf(ast_type_traits::DynTypedNode::create(Node),
1006
259
                          Matcher, Builder, Traverse, Bind);
1007
259
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesChildOf<clang::UnaryOperator>(clang::UnaryOperator const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::TraversalKind, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
997
14
                      BindKind Bind) {
998
14
    static_assert(std::is_base_of<Decl, T>::value ||
999
14
                  std::is_base_of<Stmt, T>::value ||
1000
14
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1001
14
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1002
14
                  std::is_base_of<TypeLoc, T>::value ||
1003
14
                  std::is_base_of<QualType, T>::value,
1004
14
                  "unsupported type for recursive matching");
1005
14
    return matchesChildOf(ast_type_traits::DynTypedNode::create(Node),
1006
14
                          Matcher, Builder, Traverse, Bind);
1007
14
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesChildOf<clang::ExplicitCastExpr>(clang::ExplicitCastExpr const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::TraversalKind, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
997
110
                      BindKind Bind) {
998
110
    static_assert(std::is_base_of<Decl, T>::value ||
999
110
                  std::is_base_of<Stmt, T>::value ||
1000
110
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1001
110
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1002
110
                  std::is_base_of<TypeLoc, T>::value ||
1003
110
                  std::is_base_of<QualType, T>::value,
1004
110
                  "unsupported type for recursive matching");
1005
110
    return matchesChildOf(ast_type_traits::DynTypedNode::create(Node),
1006
110
                          Matcher, Builder, Traverse, Bind);
1007
110
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesChildOf<clang::InitListExpr>(clang::InitListExpr const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::TraversalKind, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
997
135
                      BindKind Bind) {
998
135
    static_assert(std::is_base_of<Decl, T>::value ||
999
135
                  std::is_base_of<Stmt, T>::value ||
1000
135
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1001
135
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1002
135
                  std::is_base_of<TypeLoc, T>::value ||
1003
135
                  std::is_base_of<QualType, T>::value,
1004
135
                  "unsupported type for recursive matching");
1005
135
    return matchesChildOf(ast_type_traits::DynTypedNode::create(Node),
1006
135
                          Matcher, Builder, Traverse, Bind);
1007
135
  }
1008
1009
  template <typename T>
1010
  bool matchesDescendantOf(const T &Node,
1011
                           const DynTypedMatcher &Matcher,
1012
                           BoundNodesTreeBuilder *Builder,
1013
4.55k
                           BindKind Bind) {
1014
4.55k
    static_assert(std::is_base_of<Decl, T>::value ||
1015
4.55k
                  std::is_base_of<Stmt, T>::value ||
1016
4.55k
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
4.55k
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
4.55k
                  std::is_base_of<TypeLoc, T>::value ||
1019
4.55k
                  std::is_base_of<QualType, T>::value,
1020
4.55k
                  "unsupported type for recursive matching");
1021
4.55k
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
4.55k
                               Matcher, Builder, Bind);
1023
4.55k
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::VarDecl>(clang::VarDecl const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
110
                           BindKind Bind) {
1014
110
    static_assert(std::is_base_of<Decl, T>::value ||
1015
110
                  std::is_base_of<Stmt, T>::value ||
1016
110
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
110
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
110
                  std::is_base_of<TypeLoc, T>::value ||
1019
110
                  std::is_base_of<QualType, T>::value,
1020
110
                  "unsupported type for recursive matching");
1021
110
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
110
                               Matcher, Builder, Bind);
1023
110
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::Stmt>(clang::Stmt const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
3.43k
                           BindKind Bind) {
1014
3.43k
    static_assert(std::is_base_of<Decl, T>::value ||
1015
3.43k
                  std::is_base_of<Stmt, T>::value ||
1016
3.43k
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
3.43k
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
3.43k
                  std::is_base_of<TypeLoc, T>::value ||
1019
3.43k
                  std::is_base_of<QualType, T>::value,
1020
3.43k
                  "unsupported type for recursive matching");
1021
3.43k
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
3.43k
                               Matcher, Builder, Bind);
1023
3.43k
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::CompoundStmt>(clang::CompoundStmt const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
339
                           BindKind Bind) {
1014
339
    static_assert(std::is_base_of<Decl, T>::value ||
1015
339
                  std::is_base_of<Stmt, T>::value ||
1016
339
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
339
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
339
                  std::is_base_of<TypeLoc, T>::value ||
1019
339
                  std::is_base_of<QualType, T>::value,
1020
339
                  "unsupported type for recursive matching");
1021
339
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
339
                               Matcher, Builder, Bind);
1023
339
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::Expr>(clang::Expr const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
58
                           BindKind Bind) {
1014
58
    static_assert(std::is_base_of<Decl, T>::value ||
1015
58
                  std::is_base_of<Stmt, T>::value ||
1016
58
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
58
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
58
                  std::is_base_of<TypeLoc, T>::value ||
1019
58
                  std::is_base_of<QualType, T>::value,
1020
58
                  "unsupported type for recursive matching");
1021
58
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
58
                               Matcher, Builder, Bind);
1023
58
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::ObjCMethodDecl>(clang::ObjCMethodDecl const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
6
                           BindKind Bind) {
1014
6
    static_assert(std::is_base_of<Decl, T>::value ||
1015
6
                  std::is_base_of<Stmt, T>::value ||
1016
6
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
6
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
6
                  std::is_base_of<TypeLoc, T>::value ||
1019
6
                  std::is_base_of<QualType, T>::value,
1020
6
                  "unsupported type for recursive matching");
1021
6
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
6
                               Matcher, Builder, Bind);
1023
6
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::FunctionDecl>(clang::FunctionDecl const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
291
                           BindKind Bind) {
1014
291
    static_assert(std::is_base_of<Decl, T>::value ||
1015
291
                  std::is_base_of<Stmt, T>::value ||
1016
291
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
291
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
291
                  std::is_base_of<TypeLoc, T>::value ||
1019
291
                  std::is_base_of<QualType, T>::value,
1020
291
                  "unsupported type for recursive matching");
1021
291
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
291
                               Matcher, Builder, Bind);
1023
291
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::BlockDecl>(clang::BlockDecl const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
1
                           BindKind Bind) {
1014
1
    static_assert(std::is_base_of<Decl, T>::value ||
1015
1
                  std::is_base_of<Stmt, T>::value ||
1016
1
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
1
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
1
                  std::is_base_of<TypeLoc, T>::value ||
1019
1
                  std::is_base_of<QualType, T>::value,
1020
1
                  "unsupported type for recursive matching");
1021
1
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
1
                               Matcher, Builder, Bind);
1023
1
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::ObjCAutoreleasePoolStmt>(clang::ObjCAutoreleasePoolStmt const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
18
                           BindKind Bind) {
1014
18
    static_assert(std::is_base_of<Decl, T>::value ||
1015
18
                  std::is_base_of<Stmt, T>::value ||
1016
18
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
18
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
18
                  std::is_base_of<TypeLoc, T>::value ||
1019
18
                  std::is_base_of<QualType, T>::value,
1020
18
                  "unsupported type for recursive matching");
1021
18
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
18
                               Matcher, Builder, Bind);
1023
18
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::Decl>(clang::Decl const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
222
                           BindKind Bind) {
1014
222
    static_assert(std::is_base_of<Decl, T>::value ||
1015
222
                  std::is_base_of<Stmt, T>::value ||
1016
222
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
222
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
222
                  std::is_base_of<TypeLoc, T>::value ||
1019
222
                  std::is_base_of<QualType, T>::value,
1020
222
                  "unsupported type for recursive matching");
1021
222
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
222
                               Matcher, Builder, Bind);
1023
222
  }
bool clang::ast_matchers::internal::ASTMatchFinder::matchesDescendantOf<clang::DeclStmt>(clang::DeclStmt const&, clang::ast_matchers::internal::DynTypedMatcher const&, clang::ast_matchers::internal::BoundNodesTreeBuilder*, clang::ast_matchers::internal::ASTMatchFinder::BindKind)
Line
Count
Source
1013
82
                           BindKind Bind) {
1014
82
    static_assert(std::is_base_of<Decl, T>::value ||
1015
82
                  std::is_base_of<Stmt, T>::value ||
1016
82
                  std::is_base_of<NestedNameSpecifier, T>::value ||
1017
82
                  std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1018
82
                  std::is_base_of<TypeLoc, T>::value ||
1019
82
                  std::is_base_of<QualType, T>::value,
1020
82
                  "unsupported type for recursive matching");
1021
82
    return matchesDescendantOf(ast_type_traits::DynTypedNode::create(Node),
1022
82
                               Matcher, Builder, Bind);
1023
82
  }
1024
1025
  // FIXME: Implement support for BindKind.
1026
  template <typename T>
1027
  bool matchesAncestorOf(const T &Node,
1028
                         const DynTypedMatcher &Matcher,
1029
                         BoundNodesTreeBuilder *Builder,
1030
46
                         AncestorMatchMode MatchMode) {
1031
46
    static_assert(std::is_base_of<Decl, T>::value ||
1032
46
                      std::is_base_of<NestedNameSpecifierLoc, T>::value ||
1033
46
                      std::is_base_of<Stmt, T>::value ||
1034
46
                      std::is_base_of<TypeLoc, T>::value,
1035
46
                  "type not allowed for recursive matching");
1036
46
    return matchesAncestorOf(ast_type_traits::DynTypedNode::create(Node),
1037
46
                             Matcher, Builder, MatchMode);
1038
46
  }
1039
1040
  virtual ASTContext &getASTContext() const = 0;
1041
1042
protected:
1043
  virtual bool matchesChildOf(const ast_type_traits::DynTypedNode &Node,
1044
                              const DynTypedMatcher &Matcher,
1045
                              BoundNodesTreeBuilder *Builder,
1046
                              TraversalKind Traverse,
1047
                              BindKind Bind) = 0;
1048
1049
  virtual bool matchesDescendantOf(const ast_type_traits::DynTypedNode &Node,
1050
                                   const DynTypedMatcher &Matcher,
1051
                                   BoundNodesTreeBuilder *Builder,
1052
                                   BindKind Bind) = 0;
1053
1054
  virtual bool matchesAncestorOf(const ast_type_traits::DynTypedNode &Node,
1055
                                 const DynTypedMatcher &Matcher,
1056
                                 BoundNodesTreeBuilder *Builder,
1057
                                 AncestorMatchMode MatchMode) = 0;
1058
};
1059
1060
/// A type-list implementation.
1061
///
1062
/// A "linked list" of types, accessible by using the ::head and ::tail
1063
/// typedefs.
1064
template <typename... Ts> struct TypeList {}; // Empty sentinel type list.
1065
1066
template <typename T1, typename... Ts> struct TypeList<T1, Ts...> {
1067
  /// The first type on the list.
1068
  using head = T1;
1069
1070
  /// A sublist with the tail. ie everything but the head.
1071
  ///
1072
  /// This type is used to do recursion. TypeList<>/EmptyTypeList indicates the
1073
  /// end of the list.
1074
  using tail = TypeList<Ts...>;
1075
};
1076
1077
/// The empty type list.
1078
using EmptyTypeList = TypeList<>;
1079
1080
/// Helper meta-function to determine if some type \c T is present or
1081
///   a parent type in the list.
1082
template <typename AnyTypeList, typename T>
1083
struct TypeListContainsSuperOf {
1084
  static const bool value =
1085
      std::is_base_of<typename AnyTypeList::head, T>::value ||
1086
      TypeListContainsSuperOf<typename AnyTypeList::tail, T>::value;
1087
};
1088
template <typename T>
1089
struct TypeListContainsSuperOf<EmptyTypeList, T> {
1090
  static const bool value = false;
1091
};
1092
1093
/// A "type list" that contains all types.
1094
///
1095
/// Useful for matchers like \c anything and \c unless.
1096
using AllNodeBaseTypes =
1097
    TypeList<Decl, Stmt, NestedNameSpecifier, NestedNameSpecifierLoc, QualType,
1098
             Type, TypeLoc, CXXCtorInitializer>;
1099
1100
/// Helper meta-function to extract the argument out of a function of
1101
///   type void(Arg).
1102
///
1103
/// See AST_POLYMORPHIC_SUPPORTED_TYPES for details.
1104
template <class T> struct ExtractFunctionArgMeta;
1105
template <class T> struct ExtractFunctionArgMeta<void(T)> {
1106
  using type = T;
1107
};
1108
1109
/// Default type lists for ArgumentAdaptingMatcher matchers.
1110
using AdaptativeDefaultFromTypes = AllNodeBaseTypes;
1111
using AdaptativeDefaultToTypes =
1112
    TypeList<Decl, Stmt, NestedNameSpecifier, NestedNameSpecifierLoc, TypeLoc,
1113
             QualType>;
1114
1115
/// All types that are supported by HasDeclarationMatcher above.
1116
using HasDeclarationSupportedTypes =
1117
    TypeList<CallExpr, CXXConstructExpr, CXXNewExpr, DeclRefExpr, EnumType,
1118
             ElaboratedType, InjectedClassNameType, LabelStmt, AddrLabelExpr,
1119
             MemberExpr, QualType, RecordType, TagType,
1120
             TemplateSpecializationType, TemplateTypeParmType, TypedefType,
1121
             UnresolvedUsingType, ObjCIvarRefExpr>;
1122
1123
/// Converts a \c Matcher<T> to a matcher of desired type \c To by
1124
/// "adapting" a \c To into a \c T.
1125
///
1126
/// The \c ArgumentAdapterT argument specifies how the adaptation is done.
1127
///
1128
/// For example:
1129
///   \c ArgumentAdaptingMatcher<HasMatcher, T>(InnerMatcher);
1130
/// Given that \c InnerMatcher is of type \c Matcher<T>, this returns a matcher
1131
/// that is convertible into any matcher of type \c To by constructing
1132
/// \c HasMatcher<To, T>(InnerMatcher).
1133
///
1134
/// If a matcher does not need knowledge about the inner type, prefer to use
1135
/// PolymorphicMatcherWithParam1.
1136
template <template <typename ToArg, typename FromArg> class ArgumentAdapterT,
1137
          typename FromTypes = AdaptativeDefaultFromTypes,
1138
          typename ToTypes = AdaptativeDefaultToTypes>
1139
struct ArgumentAdaptingMatcherFunc {
1140
  template <typename T> class Adaptor {
1141
  public:
1142
    explicit Adaptor(const Matcher<T> &InnerMatcher)
1143
38.1k
        : InnerMatcher(InnerMatcher) {}
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl>::Adaptor(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
1143
305
        : InnerMatcher(InnerMatcher) {}
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::Adaptor(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1143
1.44k
        : InnerMatcher(InnerMatcher) {}
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::Adaptor(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1143
2.44k
        : InnerMatcher(InnerMatcher) {}
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::Adaptor(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1143
16.8k
        : InnerMatcher(InnerMatcher) {}
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasAncestorMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc> >::Adaptor<clang::Stmt>::Adaptor(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1143
804
        : InnerMatcher(InnerMatcher) {}
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl>::Adaptor(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
1143
16.2k
        : InnerMatcher(InnerMatcher) {}
1144
1145
    using ReturnTypes = ToTypes;
1146
1147
37.0k
    template <typename To> operator Matcher<To>() const {
1148
37.0k
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
37.0k
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::VarDecl><clang::VarDecl>() const
Line
Count
Source
1147
150
    template <typename To> operator Matcher<To>() const {
1148
150
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
150
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::Stmt><clang::Stmt>() const
Line
Count
Source
1147
331
    template <typename To> operator Matcher<To>() const {
1148
331
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
331
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::CompoundStmt><clang::CompoundStmt>() const
Line
Count
Source
1147
527
    template <typename To> operator Matcher<To>() const {
1148
527
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
527
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl>::operator clang::ast_matchers::internal::Matcher<clang::CompoundStmt><clang::CompoundStmt>() const
Line
Count
Source
1147
150
    template <typename To> operator Matcher<To>() const {
1148
150
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
150
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::Expr><clang::Expr>() const
Line
Count
Source
1147
466
    template <typename To> operator Matcher<To>() const {
1148
466
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
466
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::UnaryOperator><clang::UnaryOperator>() const
Line
Count
Source
1147
104
    template <typename To> operator Matcher<To>() const {
1148
104
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
104
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr><clang::ExplicitCastExpr>() const
Line
Count
Source
1147
208
    template <typename To> operator Matcher<To>() const {
1148
208
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
208
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::Stmt><clang::Stmt>() const
Line
Count
Source
1147
1.71k
    template <typename To> operator Matcher<To>() const {
1148
1.71k
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
1.71k
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::Expr><clang::Expr>() const
Line
Count
Source
1147
98
    template <typename To> operator Matcher<To>() const {
1148
98
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
98
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl><clang::ObjCMethodDecl>() const
Line
Count
Source
1147
98
    template <typename To> operator Matcher<To>() const {
1148
98
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
98
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::FunctionDecl><clang::FunctionDecl>() const
Line
Count
Source
1147
100
    template <typename To> operator Matcher<To>() const {
1148
100
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
100
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::BlockDecl><clang::BlockDecl>() const
Line
Count
Source
1147
98
    template <typename To> operator Matcher<To>() const {
1148
98
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
98
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasAncestorMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::Stmt><clang::Stmt>() const
Line
Count
Source
1147
210
    template <typename To> operator Matcher<To>() const {
1148
210
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
210
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::ObjCAutoreleasePoolStmt><clang::ObjCAutoreleasePoolStmt>() const
Line
Count
Source
1147
140
    template <typename To> operator Matcher<To>() const {
1148
140
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
140
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::Decl><clang::Decl>() const
Line
Count
Source
1147
70
    template <typename To> operator Matcher<To>() const {
1148
70
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
70
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::FunctionDecl><clang::FunctionDecl>() const
Line
Count
Source
1147
248
    template <typename To> operator Matcher<To>() const {
1148
248
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
248
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt>::operator clang::ast_matchers::internal::Matcher<clang::InitListExpr><clang::InitListExpr>() const
Line
Count
Source
1147
16.1k
    template <typename To> operator Matcher<To>() const {
1148
16.1k
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
16.1k
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl>::operator clang::ast_matchers::internal::Matcher<clang::DeclStmt><clang::DeclStmt>() const
Line
Count
Source
1147
16.1k
    template <typename To> operator Matcher<To>() const {
1148
16.1k
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
16.1k
    }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl>::operator clang::ast_matchers::internal::Matcher<clang::Stmt><clang::Stmt>() const
Line
Count
Source
1147
49
    template <typename To> operator Matcher<To>() const {
1148
49
      return Matcher<To>(new ArgumentAdapterT<To, T>(InnerMatcher));
1149
49
    }
1150
1151
  private:
1152
    const Matcher<T> InnerMatcher;
1153
  };
1154
1155
  template <typename T>
1156
38.1k
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
38.1k
    return Adaptor<T>(InnerMatcher);
1158
38.1k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::create<clang::Decl>(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
1156
305
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
305
    return Adaptor<T>(InnerMatcher);
1158
305
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::create<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1156
1.44k
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
1.44k
    return Adaptor<T>(InnerMatcher);
1158
1.44k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::create<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1156
2.44k
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
2.44k
    return Adaptor<T>(InnerMatcher);
1158
2.44k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::create<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1156
16.8k
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
16.8k
    return Adaptor<T>(InnerMatcher);
1158
16.8k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasAncestorMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasAncestorMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc> >::create<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1156
804
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
804
    return Adaptor<T>(InnerMatcher);
1158
804
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::create<clang::Decl>(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
1156
16.2k
  static Adaptor<T> create(const Matcher<T> &InnerMatcher) {
1157
16.2k
    return Adaptor<T>(InnerMatcher);
1158
16.2k
  }
1159
1160
  template <typename T>
1161
38.1k
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
38.1k
    return create(InnerMatcher);
1163
38.1k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::operator()<clang::Decl>(clang::ast_matchers::internal::Matcher<clang::Decl> const&) const
Line
Count
Source
1161
305
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
305
    return create(InnerMatcher);
1163
305
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::operator()<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
1161
1.44k
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
1.44k
    return create(InnerMatcher);
1163
1.44k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::ForEachDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::operator()<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
1161
2.44k
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
2.44k
    return create(InnerMatcher);
1163
2.44k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::operator()<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
1161
16.8k
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
16.8k
    return create(InnerMatcher);
1163
16.8k
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasAncestorMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc> >::Adaptor<clang::Stmt> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasAncestorMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::NestedNameSpecifierLoc, clang::Stmt, clang::TypeLoc> >::operator()<clang::Stmt>(clang::ast_matchers::internal::Matcher<clang::Stmt> const&) const
Line
Count
Source
1161
804
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
804
    return create(InnerMatcher);
1163
804
  }
clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::Adaptor<clang::Decl> clang::ast_matchers::internal::ArgumentAdaptingMatcherFunc<clang::ast_matchers::internal::HasDescendantMatcher, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>, clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::TypeLoc, clang::QualType> >::operator()<clang::Decl>(clang::ast_matchers::internal::Matcher<clang::Decl> const&) const
Line
Count
Source
1161
16.2k
  Adaptor<T> operator()(const Matcher<T> &InnerMatcher) const {
1162
16.2k
    return create(InnerMatcher);
1163
16.2k
  }
1164
};
1165
1166
/// A PolymorphicMatcherWithParamN<MatcherT, P1, ..., PN> object can be
1167
/// created from N parameters p1, ..., pN (of type P1, ..., PN) and
1168
/// used as a Matcher<T> where a MatcherT<T, P1, ..., PN>(p1, ..., pN)
1169
/// can be constructed.
1170
///
1171
/// For example:
1172
/// - PolymorphicMatcherWithParam0<IsDefinitionMatcher>()
1173
///   creates an object that can be used as a Matcher<T> for any type T
1174
///   where an IsDefinitionMatcher<T>() can be constructed.
1175
/// - PolymorphicMatcherWithParam1<ValueEqualsMatcher, int>(42)
1176
///   creates an object that can be used as a Matcher<T> for any type T
1177
///   where a ValueEqualsMatcher<T, int>(42) can be constructed.
1178
template <template <typename T> class MatcherT,
1179
          typename ReturnTypesF = void(AllNodeBaseTypes)>
1180
class PolymorphicMatcherWithParam0 {
1181
public:
1182
  using ReturnTypes = typename ExtractFunctionArgMeta<ReturnTypesF>::type;
1183
1184
  template <typename T>
1185
404
  operator Matcher<T>() const {
1186
404
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1187
404
                  "right polymorphic conversion");
1188
404
    return Matcher<T>(new MatcherT<T>());
1189
404
  }
1190
};
1191
1192
template <template <typename T, typename P1> class MatcherT,
1193
          typename P1,
1194
          typename ReturnTypesF = void(AllNodeBaseTypes)>
1195
class PolymorphicMatcherWithParam1 {
1196
public:
1197
  explicit PolymorphicMatcherWithParam1(const P1 &Param1)
1198
83.0k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
1198
18.3k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType0Matcher, clang::ast_matchers::internal::Matcher<clang::QualType>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::TypedefNameDecl, clang::ValueDecl>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::QualType> const&)
Line
Count
Source
1198
37.1k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType1Matcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::ValueDecl>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Decl> const&)
Line
Count
Source
1198
54
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::ValueEqualsMatcher, int, void (clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>)>::PolymorphicMatcherWithParam1(int const&)
Line
Count
Source
1198
1.25k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasLHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Expr> const&)
Line
Count
Source
1198
1.67k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasRHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Expr> const&)
Line
Count
Source
1198
1.16k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyArgument0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXUnresolvedConstructExpr, clang::ObjCMessageExpr>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Expr> const&)
Line
Count
Source
1198
1.08k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_equalsBoundNode0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::Stmt, clang::Decl, clang::Type, clang::QualType>)>::PolymorphicMatcherWithParam1(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
1198
2.26k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasOperatorName0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::UnaryOperator>)>::PolymorphicMatcherWithParam1(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)
Line
Count
Source
1198
19.4k
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasCondition0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::IfStmt, clang::ForStmt, clang::WhileStmt, clang::DoStmt, clang::SwitchStmt, clang::AbstractConditionalOperator>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Expr> const&)
Line
Count
Source
1198
392
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyParameter0Matcher, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&)
Line
Count
Source
1198
107
      : Param1(Param1) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasBody0Matcher, clang::ast_matchers::internal::Matcher<clang::Stmt>, void (clang::ast_matchers::internal::TypeList<clang::DoStmt, clang::ForStmt, clang::WhileStmt, clang::CXXForRangeStmt, clang::FunctionDecl>)>::PolymorphicMatcherWithParam1(clang::ast_matchers::internal::Matcher<clang::Stmt> const&)
Line
Count
Source
1198
181
      : Param1(Param1) {}
1199
1200
  using ReturnTypes = typename ExtractFunctionArgMeta<ReturnTypesF>::type;
1201
1202
  template <typename T>
1203
83.6k
  operator Matcher<T>() const {
1204
83.6k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
83.6k
                  "right polymorphic conversion");
1206
83.6k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
83.6k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::CallExpr><clang::CallExpr>() const
Line
Count
Source
1203
1.19k
  operator Matcher<T>() const {
1204
1.19k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
1.19k
                  "right polymorphic conversion");
1206
1.19k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
1.19k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::QualType><clang::QualType>() const
Line
Count
Source
1203
343
  operator Matcher<T>() const {
1204
343
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
343
                  "right polymorphic conversion");
1206
343
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
343
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType0Matcher, clang::ast_matchers::internal::Matcher<clang::QualType>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::TypedefNameDecl, clang::ValueDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::Expr><clang::Expr>() const
Line
Count
Source
1203
1.04k
  operator Matcher<T>() const {
1204
1.04k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
1.04k
                  "right polymorphic conversion");
1206
1.04k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
1.04k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType1Matcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::ValueDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::Expr><clang::Expr>() const
Line
Count
Source
1203
27
  operator Matcher<T>() const {
1204
27
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
27
                  "right polymorphic conversion");
1206
27
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
27
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::ValueEqualsMatcher, int, void (clang::ast_matchers::internal::TypeList<clang::Decl, clang::Stmt, clang::NestedNameSpecifier, clang::NestedNameSpecifierLoc, clang::QualType, clang::Type, clang::TypeLoc, clang::CXXCtorInitializer>)>::operator clang::ast_matchers::internal::Matcher<clang::IntegerLiteral><clang::IntegerLiteral>() const
Line
Count
Source
1203
1.25k
  operator Matcher<T>() const {
1204
1.25k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
1.25k
                  "right polymorphic conversion");
1206
1.25k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
1.25k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasRHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::BinaryOperator><clang::BinaryOperator>() const
Line
Count
Source
1203
1.16k
  operator Matcher<T>() const {
1204
1.16k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
1.16k
                  "right polymorphic conversion");
1206
1.16k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
1.16k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasLHS0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::ArraySubscriptExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::BinaryOperator><clang::BinaryOperator>() const
Line
Count
Source
1203
1.67k
  operator Matcher<T>() const {
1204
1.67k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
1.67k
                  "right polymorphic conversion");
1206
1.67k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
1.67k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_equalsBoundNode0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::Stmt, clang::Decl, clang::Type, clang::QualType>)>::operator clang::ast_matchers::internal::Matcher<clang::VarDecl><clang::VarDecl>() const
Line
Count
Source
1203
869
  operator Matcher<T>() const {
1204
869
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
869
                  "right polymorphic conversion");
1206
869
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
869
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyArgument0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXUnresolvedConstructExpr, clang::ObjCMessageExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::CallExpr><clang::CallExpr>() const
Line
Count
Source
1203
842
  operator Matcher<T>() const {
1204
842
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
842
                  "right polymorphic conversion");
1206
842
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
842
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyArgument0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXUnresolvedConstructExpr, clang::ObjCMessageExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr><clang::ObjCMessageExpr>() const
Line
Count
Source
1203
497
  operator Matcher<T>() const {
1204
497
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
497
                  "right polymorphic conversion");
1206
497
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
497
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::TypedefType><clang::TypedefType>() const
Line
Count
Source
1203
314
  operator Matcher<T>() const {
1204
314
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
314
                  "right polymorphic conversion");
1206
314
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
314
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::RecordType><clang::RecordType>() const
Line
Count
Source
1203
108
  operator Matcher<T>() const {
1204
108
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
108
                  "right polymorphic conversion");
1206
108
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
108
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_equalsBoundNode0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::Stmt, clang::Decl, clang::Type, clang::QualType>)>::operator clang::ast_matchers::internal::Matcher<clang::Expr><clang::Expr>() const
Line
Count
Source
1203
312
  operator Matcher<T>() const {
1204
312
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
312
                  "right polymorphic conversion");
1206
312
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
312
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasOperatorName0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::UnaryOperator>)>::operator clang::ast_matchers::internal::Matcher<clang::BinaryOperator><clang::BinaryOperator>() const
Line
Count
Source
1203
1.69k
  operator Matcher<T>() const {
1204
1.69k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
1.69k
                  "right polymorphic conversion");
1206
1.69k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
1.69k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasCondition0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::IfStmt, clang::ForStmt, clang::WhileStmt, clang::DoStmt, clang::SwitchStmt, clang::AbstractConditionalOperator>)>::operator clang::ast_matchers::internal::Matcher<clang::IfStmt><clang::IfStmt>() const
Line
Count
Source
1203
108
  operator Matcher<T>() const {
1204
108
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
108
                  "right polymorphic conversion");
1206
108
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
108
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasCondition0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::IfStmt, clang::ForStmt, clang::WhileStmt, clang::DoStmt, clang::SwitchStmt, clang::AbstractConditionalOperator>)>::operator clang::ast_matchers::internal::Matcher<clang::ConditionalOperator><clang::ConditionalOperator>() const
Line
Count
Source
1203
110
  operator Matcher<T>() const {
1204
110
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
110
                  "right polymorphic conversion");
1206
110
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
110
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasOperatorName0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::BinaryOperator, clang::UnaryOperator>)>::operator clang::ast_matchers::internal::Matcher<clang::UnaryOperator><clang::UnaryOperator>() const
Line
Count
Source
1203
17.7k
  operator Matcher<T>() const {
1204
17.7k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
17.7k
                  "right polymorphic conversion");
1206
17.7k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
17.7k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType0Matcher, clang::ast_matchers::internal::Matcher<clang::QualType>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::TypedefNameDecl, clang::ValueDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::ExplicitCastExpr><clang::ExplicitCastExpr>() const
Line
Count
Source
1203
208
  operator Matcher<T>() const {
1204
208
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
208
                  "right polymorphic conversion");
1206
208
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
208
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType0Matcher, clang::ast_matchers::internal::Matcher<clang::QualType>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::TypedefNameDecl, clang::ValueDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::VarDecl><clang::VarDecl>() const
Line
Count
Source
1203
19.1k
  operator Matcher<T>() const {
1204
19.1k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
19.1k
                  "right polymorphic conversion");
1206
19.1k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
19.1k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasType0Matcher, clang::ast_matchers::internal::Matcher<clang::QualType>, void (clang::ast_matchers::internal::TypeList<clang::Expr, clang::FriendDecl, clang::TypedefNameDecl, clang::ValueDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::ParmVarDecl><clang::ParmVarDecl>() const
Line
Count
Source
1203
16.6k
  operator Matcher<T>() const {
1204
16.6k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
16.6k
                  "right polymorphic conversion");
1206
16.6k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
16.6k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyParameter0Matcher, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::ObjCMethodDecl><clang::ObjCMethodDecl>() const
Line
Count
Source
1203
99
  operator Matcher<T>() const {
1204
99
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
99
                  "right polymorphic conversion");
1206
99
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
99
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyParameter0Matcher, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::FunctionDecl><clang::FunctionDecl>() const
Line
Count
Source
1203
99
  operator Matcher<T>() const {
1204
99
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
99
                  "right polymorphic conversion");
1206
99
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
99
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasAnyParameter0Matcher, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::BlockDecl><clang::BlockDecl>() const
Line
Count
Source
1203
99
  operator Matcher<T>() const {
1204
99
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
99
                  "right polymorphic conversion");
1206
99
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
99
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_equalsBoundNode0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::Stmt, clang::Decl, clang::Type, clang::QualType>)>::operator clang::ast_matchers::internal::Matcher<clang::ObjCMessageExpr><clang::ObjCMessageExpr>() const
Line
Count
Source
1203
280
  operator Matcher<T>() const {
1204
280
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
280
                  "right polymorphic conversion");
1206
280
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
280
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::ObjCIvarRefExpr><clang::ObjCIvarRefExpr>() const
Line
Count
Source
1203
12
  operator Matcher<T>() const {
1204
12
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
12
                  "right polymorphic conversion");
1206
12
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
12
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasBody0Matcher, clang::ast_matchers::internal::Matcher<clang::Stmt>, void (clang::ast_matchers::internal::TypeList<clang::DoStmt, clang::ForStmt, clang::WhileStmt, clang::CXXForRangeStmt, clang::FunctionDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::ForStmt><clang::ForStmt>() const
Line
Count
Source
1203
167
  operator Matcher<T>() const {
1204
167
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
167
                  "right polymorphic conversion");
1206
167
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
167
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_hasCondition0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::IfStmt, clang::ForStmt, clang::WhileStmt, clang::DoStmt, clang::SwitchStmt, clang::AbstractConditionalOperator>)>::operator clang::ast_matchers::internal::Matcher<clang::ForStmt><clang::ForStmt>() const
Line
Count
Source
1203
167
  operator Matcher<T>() const {
1204
167
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
167
                  "right polymorphic conversion");
1206
167
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
167
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::matcher_equalsBoundNode0Matcher, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, void (clang::ast_matchers::internal::TypeList<clang::Stmt, clang::Decl, clang::Type, clang::QualType>)>::operator clang::ast_matchers::internal::Matcher<clang::Decl><clang::Decl>() const
Line
Count
Source
1203
660
  operator Matcher<T>() const {
1204
660
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
660
                  "right polymorphic conversion");
1206
660
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
660
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::CXXConstructExpr><clang::CXXConstructExpr>() const
Line
Count
Source
1203
702
  operator Matcher<T>() const {
1204
702
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
702
                  "right polymorphic conversion");
1206
702
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
702
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam1<clang::ast_matchers::internal::HasDeclarationMatcher, clang::ast_matchers::internal::Matcher<clang::Decl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::CXXNewExpr, clang::DeclRefExpr, clang::EnumType, clang::ElaboratedType, clang::InjectedClassNameType, clang::LabelStmt, clang::AddrLabelExpr, clang::MemberExpr, clang::QualType, clang::RecordType, clang::TagType, clang::TemplateSpecializationType, clang::TemplateTypeParmType, clang::TypedefType, clang::UnresolvedUsingType, clang::ObjCIvarRefExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::DeclRefExpr><clang::DeclRefExpr>() const
Line
Count
Source
1203
16.1k
  operator Matcher<T>() const {
1204
16.1k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1205
16.1k
                  "right polymorphic conversion");
1206
16.1k
    return Matcher<T>(new MatcherT<T, P1>(Param1));
1207
16.1k
  }
1208
1209
private:
1210
  const P1 Param1;
1211
};
1212
1213
template <template <typename T, typename P1, typename P2> class MatcherT,
1214
          typename P1, typename P2,
1215
          typename ReturnTypesF = void(AllNodeBaseTypes)>
1216
class PolymorphicMatcherWithParam2 {
1217
public:
1218
  PolymorphicMatcherWithParam2(const P1 &Param1, const P2 &Param2)
1219
18.1k
      : Param1(Param1), Param2(Param2) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_hasArgument0Matcher, unsigned int, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::ObjCMessageExpr>)>::PolymorphicMatcherWithParam2(unsigned int const&, clang::ast_matchers::internal::Matcher<clang::Expr> const&)
Line
Count
Source
1219
1.23k
      : Param1(Param1), Param2(Param2) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_forEachArgumentWithParam0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr>)>::PolymorphicMatcherWithParam2(clang::ast_matchers::internal::Matcher<clang::Expr> const&, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&)
Line
Count
Source
1219
16.5k
      : Param1(Param1), Param2(Param2) {}
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_hasParameter0Matcher, unsigned int, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::PolymorphicMatcherWithParam2(unsigned int const&, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl> const&)
Line
Count
Source
1219
431
      : Param1(Param1), Param2(Param2) {}
1220
1221
  using ReturnTypes = typename ExtractFunctionArgMeta<ReturnTypesF>::type;
1222
1223
  template <typename T>
1224
17.5k
  operator Matcher<T>() const {
1225
17.5k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1226
17.5k
                  "right polymorphic conversion");
1227
17.5k
    return Matcher<T>(new MatcherT<T, P1, P2>(Param1, Param2));
1228
17.5k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_hasArgument0Matcher, unsigned int, clang::ast_matchers::internal::Matcher<clang::Expr>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr, clang::ObjCMessageExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::CallExpr><clang::CallExpr>() const
Line
Count
Source
1224
614
  operator Matcher<T>() const {
1225
614
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1226
614
                  "right polymorphic conversion");
1227
614
    return Matcher<T>(new MatcherT<T, P1, P2>(Param1, Param2));
1228
614
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_forEachArgumentWithParam0Matcher, clang::ast_matchers::internal::Matcher<clang::Expr>, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::CallExpr, clang::CXXConstructExpr>)>::operator clang::ast_matchers::internal::Matcher<clang::CallExpr><clang::CallExpr>() const
Line
Count
Source
1224
16.5k
  operator Matcher<T>() const {
1225
16.5k
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1226
16.5k
                  "right polymorphic conversion");
1227
16.5k
    return Matcher<T>(new MatcherT<T, P1, P2>(Param1, Param2));
1228
16.5k
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_hasParameter0Matcher, unsigned int, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::CXXConstructorDecl><clang::CXXConstructorDecl>() const
Line
Count
Source
1224
201
  operator Matcher<T>() const {
1225
201
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1226
201
                  "right polymorphic conversion");
1227
201
    return Matcher<T>(new MatcherT<T, P1, P2>(Param1, Param2));
1228
201
  }
clang::ast_matchers::internal::PolymorphicMatcherWithParam2<clang::ast_matchers::internal::matcher_hasParameter0Matcher, unsigned int, clang::ast_matchers::internal::Matcher<clang::ParmVarDecl>, void (clang::ast_matchers::internal::TypeList<clang::FunctionDecl, clang::ObjCMethodDecl, clang::BlockDecl>)>::operator clang::ast_matchers::internal::Matcher<clang::FunctionDecl><clang::FunctionDecl>() const
Line
Count
Source
1224
220
  operator Matcher<T>() const {
1225
220
    static_assert(TypeListContainsSuperOf<ReturnTypes, T>::value,
1226
220
                  "right polymorphic conversion");