Coverage Report

Created: 2018-07-21 08:31

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