Coverage Report

Created: 2018-12-11 17:59

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