44 #ifndef LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H
45 #define LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H
82 #include "llvm/ADT/ArrayRef.h"
83 #include "llvm/ADT/SmallVector.h"
84 #include "llvm/ADT/StringRef.h"
85 #include "llvm/Support/Casting.h"
86 #include "llvm/Support/Compiler.h"
87 #include "llvm/Support/ErrorHandling.h"
88 #include "llvm/Support/Regex.h"
98 namespace ast_matchers {
113 template <
typename T>
115 return MyBoundNodes.getNodeAs<T>(
ID);
125 return MyBoundNodes.getMap();
132 BoundNodes(internal::BoundNodesMap &MyBoundNodes)
133 : MyBoundNodes(MyBoundNodes) {}
135 internal::BoundNodesMap MyBoundNodes;
169 inline internal::TrueMatcher
anything() {
return internal::TrueMatcher(); }
182 extern const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl>
194 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
206 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypedefNameDecl>
218 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasDecl>
228 extern const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasTemplateDecl>
247 auto &
SourceManager = Finder->getASTContext().getSourceManager();
268 auto &
SourceManager = Finder->getASTContext().getSourceManager();
270 if (ExpansionLoc.isInvalid()) {
295 auto &
SourceManager = Finder->getASTContext().getSourceManager();
297 if (ExpansionLoc.isInvalid()) {
319 auto& Context = Finder->getASTContext();
322 if (!B)
return false;
325 if (!E)
return false;
338 extern const internal::VariadicAllOfMatcher<Decl>
decl;
350 extern const internal::VariadicDynCastAllOfMatcher<Decl, DecompositionDecl>
360 extern const internal::VariadicDynCastAllOfMatcher<Decl, BindingDecl>
371 extern const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl>
385 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl>
namedDecl;
396 extern const internal::VariadicDynCastAllOfMatcher<Decl, LabelDecl>
labelDecl;
407 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl>
419 extern const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceAliasDecl>
431 extern const internal::VariadicDynCastAllOfMatcher<Decl, RecordDecl>
recordDecl;
440 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXRecordDecl>
449 extern const internal::VariadicDynCastAllOfMatcher<Decl, ClassTemplateDecl>
462 extern const internal::VariadicDynCastAllOfMatcher<
481 extern const internal::VariadicDynCastAllOfMatcher<
494 extern const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl>
505 extern const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl>
519 extern const internal::VariadicDynCastAllOfMatcher<Decl, AccessSpecDecl>
529 extern const internal::VariadicAllOfMatcher<CXXBaseSpecifier>
cxxBaseSpecifier;
540 extern const internal::VariadicAllOfMatcher<CXXCtorInitializer>
552 extern const internal::VariadicAllOfMatcher<TemplateArgument>
templateArgument;
563 extern const internal::VariadicAllOfMatcher<TemplateArgumentLoc>
575 extern const internal::VariadicAllOfMatcher<TemplateName>
templateName;
585 extern const internal::VariadicDynCastAllOfMatcher<
Decl,
597 extern const internal::VariadicDynCastAllOfMatcher<Decl, TemplateTypeParmDecl>
608 extern const internal::VariadicDynCastAllOfMatcher<
Decl,
692 return Node.isBitField();
709 return Node.isBitField() &&
710 Node.getBitWidthValue(Finder->getASTContext()) == Width;
731 InnerMatcher.matches(*
Initializer, Finder, Builder));
737 return Node.isMain();
751 internal::Matcher<ClassTemplateDecl>, InnerMatcher) {
753 return (
Decl !=
nullptr &&
754 InnerMatcher.matches(*
Decl, Finder, Builder));
762 return Node.isImplicit();
787 hasAnyTemplateArgument,
791 internal::Matcher<TemplateArgument>, InnerMatcher) {
793 internal::getTemplateSpecializationArgs(
Node);
794 return matchesFirstInRange(InnerMatcher, List.begin(), List.end(), Finder,
795 Builder) != List.end();
814 template <
typename T>
816 const internal::Matcher<T> &InnerMatcher) {
817 return internal::DynTypedMatcher::constructRestrictedWrapper(
818 new internal::TraversalMatcher<T>(TK, InnerMatcher),
819 InnerMatcher.getID().first)
820 .template unconditionalConvertTo<T>();
823 template <
typename T>
824 internal::BindableMatcher<T>
826 return internal::BindableMatcher<T>(
827 internal::DynTypedMatcher::constructRestrictedWrapper(
828 new internal::TraversalMatcher<T>(TK, InnerMatcher),
829 InnerMatcher.getID().first)
830 .template unconditionalConvertTo<T>());
833 template <
typename... T>
834 internal::TraversalWrapper<internal::VariadicOperatorMatcher<T...>>
836 const internal::VariadicOperatorMatcher<T...> &InnerMatcher) {
837 return internal::TraversalWrapper<internal::VariadicOperatorMatcher<T...>>(
841 template <
template <
typename ToArg,
typename FromArg>
class ArgumentAdapterT,
842 typename T,
typename ToTypes>
843 internal::TraversalWrapper<
844 internal::ArgumentAdaptingMatcherFuncAdaptor<ArgumentAdapterT, T, ToTypes>>
846 ArgumentAdapterT, T, ToTypes> &InnerMatcher) {
847 return internal::TraversalWrapper<
848 internal::ArgumentAdaptingMatcherFuncAdaptor<ArgumentAdapterT, T,
849 ToTypes>>(TK, InnerMatcher);
852 template <
template <
typename T,
typename...
P>
class MatcherT, typename...
P,
853 typename ReturnTypesF>
854 internal::TraversalWrapper<
855 internal::PolymorphicMatcher<MatcherT, ReturnTypesF, P...>>
857 const internal::PolymorphicMatcher<MatcherT, ReturnTypesF, P...>
859 return internal::TraversalWrapper<
860 internal::PolymorphicMatcher<MatcherT, ReturnTypesF,
P...>>(TK,
864 template <
typename... T>
865 internal::Matcher<
typename internal::GetClade<T...>
::Type>
867 return traverse(TK, InnerMatcher.with());
893 return InnerMatcher.matches(*
Node.IgnoreImplicit(), Finder, Builder);
922 internal::Matcher<Expr>, InnerMatcher) {
923 return InnerMatcher.matches(*
Node.IgnoreImpCasts(), Finder, Builder);
944 return InnerMatcher.matches(*
Node.IgnoreParenCasts(), Finder, Builder);
969 internal::Matcher<Expr>, InnerMatcher) {
970 return InnerMatcher.matches(*
Node.IgnoreParenImpCasts(), Finder, Builder);
986 return InnerMatcher.matches(
Node.IgnoreParens(), Finder, Builder);
1002 const Expr *E =
Node.IgnoreParens();
1003 return InnerMatcher.matches(*E, Finder, Builder);
1020 return Node.isInstantiationDependent();
1067 hasTemplateArgument,
1071 unsigned, N, internal::Matcher<TemplateArgument>, InnerMatcher) {
1073 internal::getTemplateSpecializationArgs(
Node);
1074 if (List.size() <= N)
1076 return InnerMatcher.matches(List[N], Finder, Builder);
1089 templateArgumentCountIs,
1093 return internal::getTemplateSpecializationArgs(
Node).size() == N;
1108 internal::Matcher<QualType>, InnerMatcher) {
1111 return InnerMatcher.matches(
Node.getAsType(), Finder, Builder);
1126 internal::Matcher<TemplateName>, InnerMatcher) {
1129 return InnerMatcher.matches(
Node.getAsTemplate(), Finder, Builder);
1146 internal::Matcher<Decl>, InnerMatcher) {
1148 return InnerMatcher.matches(*
Node.getAsDecl(), Finder, Builder);
1166 return InnerMatcher.matches(*
Node.getAsExpr(), Finder, Builder);
1196 internal::Matcher<QualType>, InnerMatcher) {
1199 return InnerMatcher.matches(
Node.getIntegralType(), Finder, Builder);
1233 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1243 extern const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl>
valueDecl;
1256 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConstructorDecl>
1268 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXDestructorDecl>
1279 extern const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl>
enumDecl;
1289 extern const internal::VariadicDynCastAllOfMatcher<Decl, EnumConstantDecl>
1304 extern const internal::VariadicDynCastAllOfMatcher<Decl, TagDecl>
tagDecl;
1312 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl>
1321 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
1332 extern const internal::VariadicDynCastAllOfMatcher<Decl, CXXDeductionGuideDecl>
1344 extern const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl>
varDecl;
1354 extern const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl>
fieldDecl;
1364 extern const internal::VariadicDynCastAllOfMatcher<Decl, IndirectFieldDecl>
1373 extern const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl>
1382 extern const internal::VariadicDynCastAllOfMatcher<Decl, FunctionTemplateDecl>
1393 extern const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl>
friendDecl;
1403 extern const internal::VariadicAllOfMatcher<Stmt>
stmt;
1413 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DeclStmt>
declStmt;
1426 extern const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr>
memberExpr;
1440 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedMemberExpr>
1452 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1464 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr>
callExpr;
1494 extern const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr>
lambdaExpr;
1503 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXMemberCallExpr>
1515 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCMessageExpr>
1525 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCInterfaceDecl>
1535 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCImplementationDecl>
1545 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCProtocolDecl>
1555 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryDecl>
1565 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryImplDecl>
1580 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCMethodDecl>
1593 extern const internal::VariadicDynCastAllOfMatcher<Decl, BlockDecl>
1605 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCIvarDecl>
1616 extern const internal::VariadicDynCastAllOfMatcher<Decl, ObjCPropertyDecl>
1625 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtThrowStmt>
1635 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtTryStmt>
1645 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtCatchStmt>
1655 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtFinallyStmt>
1665 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups>
1678 extern const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr>
1684 internal::Matcher<Expr>, InnerMatcher) {
1685 const Expr *SyntForm =
Node.getSyntacticForm();
1686 return (SyntForm !=
nullptr &&
1687 InnerMatcher.matches(*SyntForm, Finder, Builder));
1701 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1713 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitValueInitExpr>
1731 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ParenListExpr>
1744 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1757 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl>
usingDecl;
1768 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingEnumDecl>
1780 extern const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl>
1797 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedLookupExpr>
1811 extern const internal::VariadicDynCastAllOfMatcher<
Decl,
1830 extern const internal::VariadicDynCastAllOfMatcher<
Decl,
1843 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ConstantExpr>
1853 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ParenExpr>
parenExpr;
1865 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstructExpr>
1876 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1890 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr>
1901 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBindTemporaryExpr>
1922 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
1934 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr>
cxxNewExpr;
1944 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr>
1960 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNoexceptExpr>
1971 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ArraySubscriptExpr>
1983 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDefaultArgExpr>
2002 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXOperatorCallExpr>
2022 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
2032 extern const internal::VariadicDynCastAllOfMatcher<Stmt, Expr>
expr;
2041 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr>
2055 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCIvarRefExpr>
2064 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BlockExpr>
blockExpr;
2072 extern const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt>
ifStmt;
2081 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt>
forStmt;
2093 const Stmt *
const Increment =
Node.getInc();
2094 return (Increment !=
nullptr &&
2095 InnerMatcher.matches(*Increment, Finder, Builder));
2108 const Stmt *
const Init =
Node.getInit();
2109 return (Init !=
nullptr && InnerMatcher.matches(*Init, Finder, Builder));
2119 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt>
2132 const VarDecl *
const Var =
Node.getLoopVariable();
2133 return (Var !=
nullptr && InnerMatcher.matches(*Var, Finder, Builder));
2146 const Expr *
const Init =
Node.getRangeInit();
2147 return (Init !=
nullptr && InnerMatcher.matches(*Init, Finder, Builder));
2158 extern const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt>
whileStmt;
2168 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt>
doStmt;
2178 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt>
breakStmt;
2188 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt>
2199 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CoreturnStmt>
2210 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt>
returnStmt;
2221 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt>
gotoStmt;
2232 extern const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt>
labelStmt;
2244 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AddrLabelExpr>
2255 extern const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt>
switchStmt;
2265 extern const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase>
switchCase;
2275 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt>
caseStmt;
2285 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt>
2294 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt>
2304 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt>
2314 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt>
cxxTryStmt;
2323 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr>
2333 extern const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt>
nullStmt;
2343 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt>
asmStmt;
2351 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr>
2361 extern const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral>
2374 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CharacterLiteral>
2381 extern const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral>
2391 extern const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral>
2396 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImaginaryLiteral>
2400 extern const internal::VariadicDynCastAllOfMatcher<Stmt, FixedPointLiteral>
2406 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UserDefinedLiteral>
2416 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundLiteralExpr>
2427 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CoawaitExpr>
2430 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DependentCoawaitExpr>
2440 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CoyieldExpr>
2444 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNullPtrLiteralExpr>
2448 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ChooseExpr>
2452 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GNUNullExpr>
2456 extern const internal::VariadicDynCastAllOfMatcher<Stmt, GenericSelectionExpr>
2464 extern const internal::VariadicDynCastAllOfMatcher<Stmt, AtomicExpr>
atomicExpr;
2472 extern const internal::VariadicDynCastAllOfMatcher<Stmt, StmtExpr>
stmtExpr;
2481 extern const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryOperator>
2490 extern const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryOperator>
2499 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ConditionalOperator>
2508 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
2520 extern const internal::VariadicDynCastAllOfMatcher<Stmt, OpaqueValueExpr>
2536 extern const internal::VariadicDynCastAllOfMatcher<Decl, StaticAssertDecl>
2549 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXReinterpretCastExpr>
2565 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStaticCastExpr>
2580 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDynamicCastExpr>
2591 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstCastExpr>
2600 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CStyleCastExpr>
2624 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ExplicitCastExpr>
2631 extern const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitCastExpr>
2647 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr>
castExpr;
2657 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXFunctionalCastExpr>
2666 extern const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTemporaryObjectExpr>
2675 extern const internal::VariadicDynCastAllOfMatcher<Stmt, PredefinedExpr>
2684 extern const internal::VariadicDynCastAllOfMatcher<Stmt, DesignatedInitExpr>
2699 return Node.size() == N;
2703 extern const internal::VariadicAllOfMatcher<QualType>
qualType;
2706 extern const internal::VariadicAllOfMatcher<Type>
type;
2709 extern const internal::VariadicAllOfMatcher<TypeLoc>
typeLoc;
2730 extern const internal::VariadicOperatorMatcherFunc<
2737 extern const internal::VariadicOperatorMatcherFunc<
2744 extern const internal::VariadicOperatorMatcherFunc<
2772 extern const internal::VariadicOperatorMatcherFunc<1, 1>
optionally;
2783 extern const internal::VariadicDynCastAllOfMatcher<
Stmt,
2812 template <
typename T,
typename...
U>
2813 auto mapAnyOf(internal::VariadicDynCastAllOfMatcher<T, U>
const &...) {
2814 return internal::MapAnyOfHelper<
U...>();
2927 extern const internal::MapAnyOfMatcher<CallExpr, CXXConstructExpr>
invocation;
2938 internal::Matcher<QualType>, InnerMatcher) {
2939 const QualType ArgumentType =
Node.getTypeOfArgument();
2940 return InnerMatcher.matches(ArgumentType, Finder, Builder);
2962 const internal::Matcher<UnaryExprOrTypeTraitExpr> &InnerMatcher) {
2964 allOf(
anyOf(ofKind(UETT_AlignOf), ofKind(UETT_PreferredAlignOf)),
2971 const internal::Matcher<UnaryExprOrTypeTraitExpr> &InnerMatcher) {
2973 allOf(ofKind(UETT_SizeOf), InnerMatcher)));
2991 inline internal::Matcher<NamedDecl>
hasName(StringRef Name) {
2992 return internal::Matcher<NamedDecl>(
2993 new internal::HasNameMatcher({
std::string(Name)}));
3006 extern const internal::VariadicFunction<internal::Matcher<NamedDecl>, StringRef,
3028 return RegExp->match(FullNameString);
3050 inline internal::PolymorphicMatcher<
3051 internal::HasOverloadedOperatorNameMatcher,
3053 std::vector<std::string>>
3055 return internal::PolymorphicMatcher<
3056 internal::HasOverloadedOperatorNameMatcher,
3069 extern const internal::VariadicFunction<
3070 internal::PolymorphicMatcher<internal::HasOverloadedOperatorNameMatcher,
3073 std::vector<std::string>>,
3098 return Node.getMember().getAsString() == N;
3137 auto MemberName =
Node.getMember().getAsString();
3139 return Builder->removeBindings(
3140 [
this, MemberName](
const BoundNodesMap &
Nodes) {
3141 const auto &BN =
Nodes.getNode(this->BindingID);
3142 if (
const auto *ND = BN.get<
NamedDecl>()) {
3143 if (!isa<FieldDecl, CXXMethodDecl, VarDecl>(ND))
3145 return ND->getName() != MemberName;
3184 internal::Matcher<NamedDecl>,
Base) {
3186 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
3187 return Finder->classIsDerivedFrom(RD,
Base, Builder,
false);
3190 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
3191 return Finder->objcClassIsDerivedFrom(InterfaceDecl,
Base, Builder,
3200 if (BaseName.empty())
3203 const auto M = isDerivedFrom(
hasName(BaseName));
3205 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
3206 return Matcher<CXXRecordDecl>(M).matches(*RD, Finder, Builder);
3208 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
3209 return Matcher<ObjCInterfaceDecl>(M).matches(*InterfaceDecl, Finder, Builder);
3246 return Node.hasDefinition() &&
3248 return BaseSpecMatcher.matches(Base, Finder, Builder);
3255 isSameOrDerivedFrom,
3257 internal::Matcher<NamedDecl>,
Base, 0) {
3260 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
3261 return Matcher<CXXRecordDecl>(M).matches(*RD, Finder, Builder);
3263 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
3264 return Matcher<ObjCInterfaceDecl>(M).matches(*InterfaceDecl, Finder, Builder);
3270 isSameOrDerivedFrom,
3273 if (BaseName.empty())
3276 const auto M = isSameOrDerivedFrom(
hasName(BaseName));
3278 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
3279 return Matcher<CXXRecordDecl>(M).matches(*RD, Finder, Builder);
3281 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
3282 return Matcher<ObjCInterfaceDecl>(M).matches(*InterfaceDecl, Finder, Builder);
3307 isDirectlyDerivedFrom,
3309 internal::Matcher<NamedDecl>,
Base, 0) {
3311 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
3312 return Finder->classIsDerivedFrom(RD,
Base, Builder,
true);
3315 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
3316 return Finder->objcClassIsDerivedFrom(InterfaceDecl,
Base, Builder,
3322 isDirectlyDerivedFrom,
3325 if (BaseName.empty())
3327 const auto M = isDirectlyDerivedFrom(
hasName(BaseName));
3329 if (
const auto *RD = dyn_cast<CXXRecordDecl>(&
Node))
3330 return Matcher<CXXRecordDecl>(M).matches(*RD, Finder, Builder);
3332 const auto *InterfaceDecl = cast<ObjCInterfaceDecl>(&
Node);
3333 return Matcher<ObjCInterfaceDecl>(M).matches(*InterfaceDecl, Finder, Builder);
3348 BoundNodesTreeBuilder Result(*Builder);
3349 auto MatchIt = matchesFirstInPointerRange(InnerMatcher,
Node.method_begin(),
3350 Node.method_end(), Finder, &Result);
3351 if (MatchIt ==
Node.method_end())
3354 if (Finder->isTraversalIgnoringImplicitNodes() && (*MatchIt)->isImplicit())
3356 *Builder = std::move(Result);
3370 return Node.isLambda();
3391 extern const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>
has;
3407 extern const internal::ArgumentAdaptingMatcherFunc<
3408 internal::HasDescendantMatcher>
3429 extern const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher>
3459 extern const internal::ArgumentAdaptingMatcherFunc<
3460 internal::ForEachDescendantMatcher>
3479 template <
typename T>
3480 internal::Matcher<T>
findAll(
const internal::Matcher<T> &Matcher) {
3494 extern const internal::ArgumentAdaptingMatcherFunc<
3495 internal::HasParentMatcher,
3496 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>,
3497 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>>
3511 extern const internal::ArgumentAdaptingMatcherFunc<
3512 internal::HasAncestorMatcher,
3513 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>,
3514 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>>
3526 extern const internal::VariadicOperatorMatcherFunc<1, 1>
unless;
3562 inline internal::PolymorphicMatcher<
3563 internal::HasDeclarationMatcher,
3564 void(internal::HasDeclarationSupportedTypes), internal::Matcher<Decl>>
3566 return internal::PolymorphicMatcher<
3567 internal::HasDeclarationMatcher,
3568 void(internal::HasDeclarationSupportedTypes), internal::Matcher<Decl>>(
3587 return UnderlyingDecl !=
nullptr &&
3588 InnerMatcher.matches(*UnderlyingDecl, Finder, Builder);
3611 const Expr *ExprNode =
Node.getImplicitObjectArgument()
3612 ->IgnoreParenImpCasts();
3613 return (ExprNode !=
nullptr &&
3614 InnerMatcher.matches(*ExprNode, Finder, Builder));
3631 return InnerMatcher.matches(
TypeDecl, Finder, Builder);
3647 return Node.isClassMethod();
3663 return Node.isInstanceMethod();
3680 return Node.isClassMessage();
3697 return Node.isInstanceMessage();
3712 const Expr *ReceiverNode =
Node.getInstanceReceiver();
3713 return (ReceiverNode !=
nullptr &&
3740 extern const internal::VariadicFunction<internal::Matcher<ObjCMessageExpr>,
3755 return RegExp->match(SelectorString);
3763 return Node.getSelector().isNull();
3775 return Node.getSelector().isUnarySelector();
3791 return Node.getSelector().isKeywordSelector();
3806 return Node.getSelector().getNumArgs() == N;
3827 const Expr *ExprNode =
Node.getCallee();
3828 return (ExprNode !=
nullptr &&
3829 InnerMatcher.matches(*ExprNode, Finder, Builder));
3866 internal::Matcher<QualType>, InnerMatcher, 0) {
3869 return InnerMatcher.matches(QT, Finder, Builder);
3907 internal::Matcher<Decl>, InnerMatcher, 1) {
3952 internal::Matcher<TypeLoc>, Inner) {
3954 if (source ==
nullptr) {
3958 return Inner.matches(source->
getTypeLoc(), Finder, Builder);
3971 return Name ==
Node.getAsString();
3985 QualType, pointsTo, internal::Matcher<QualType>,
3987 return (!
Node.isNull() &&
Node->isAnyPointerType() &&
3988 InnerMatcher.matches(
Node->getPointeeType(), Finder, Builder));
3995 .matches(
Node, Finder, Builder);
4010 return InnerMatcher.matches(*
Node.getUnqualifiedDesugaredType(), Finder,
4029 return (!
Node.isNull() &&
Node->isReferenceType() &&
4030 InnerMatcher.matches(
Node->getPointeeType(), Finder, Builder));
4049 return InnerMatcher.matches(
Node.getCanonicalType(), Finder, Builder);
4056 .matches(
Node, Finder, Builder);
4077 internal::Matcher<Expr>, InnerMatcher) {
4078 const Expr *ExprNode =
Node.getImplicitObjectArgument();
4079 return (ExprNode !=
nullptr &&
4080 InnerMatcher.matches(*ExprNode, Finder, Builder));
4100 internal::Matcher<QualType>, InnerMatcher, 0) {
4101 return onImplicitObjectArgument(
4102 anyOf(hasType(InnerMatcher), hasType(pointsTo(InnerMatcher))))
4103 .matches(
Node, Finder, Builder);
4108 internal::Matcher<Decl>, InnerMatcher, 1) {
4109 return onImplicitObjectArgument(
4110 anyOf(hasType(InnerMatcher), hasType(pointsTo(InnerMatcher))))
4111 .matches(
Node, Finder, Builder);
4125 const Decl *DeclNode =
Node.getDecl();
4126 return (DeclNode !=
nullptr &&
4127 InnerMatcher.matches(*DeclNode, Finder, Builder));
4154 internal::Matcher<UsingShadowDecl>, Inner) {
4157 return Inner.matches(*
UsingDecl, Finder, Builder);
4178 return matchesFirstInPointerRange(InnerMatcher,
Node.decls_begin(),
4179 Node.decls_end(), Finder,
4180 Builder) !=
Node.decls_end();
4193 if (
Node.isSingleDecl()) {
4194 const Decl *FoundDecl =
Node.getSingleDecl();
4195 return InnerMatcher.matches(*FoundDecl, Finder, Builder);
4209 VarDecl, hasInitializer, internal::Matcher<Expr>,
4213 InnerMatcher.matches(*
Initializer, Finder, Builder));
4239 internal::Matcher<LambdaCapture>, InnerMatcher) {
4240 BoundNodesTreeBuilder Result;
4241 bool Matched =
false;
4243 if (Finder->isTraversalIgnoringImplicitNodes() &&
Capture.isImplicit())
4245 BoundNodesTreeBuilder CaptureBuilder(*Builder);
4246 if (InnerMatcher.matches(
Capture, Finder, &CaptureBuilder)) {
4248 Result.addMatch(CaptureBuilder);
4251 *Builder = std::move(Result);
4266 return Node.isStaticLocal();
4281 return Node.hasLocalStorage();
4295 return Node.hasGlobalStorage();
4362 return Node.isExceptionVariable();
4378 unsigned NumArgs =
Node.getNumArgs();
4379 if (!Finder->isTraversalIgnoringImplicitNodes())
4380 return NumArgs == N;
4382 if (!isa<CXXDefaultArgExpr>(
Node.getArg(NumArgs - 1)))
4386 return NumArgs == N;
4401 unsigned, N, internal::Matcher<Expr>, InnerMatcher) {
4402 if (N >=
Node.getNumArgs())
4405 if (Finder->isTraversalIgnoringImplicitNodes() && isa<CXXDefaultArgExpr>(Arg))
4418 ast_matchers::internal::Matcher<Expr>, InnerMatcher) {
4419 return N <
Node.getNumInits() &&
4420 InnerMatcher.matches(*
Node.getInit(N), Finder, Builder);
4458 internal::Matcher<Decl>, InnerMatcher) {
4464 return InnerMatcher.matches(**Iterator, Finder, Builder);
4481 return Node.getExceptionDecl() ==
nullptr;
4498 internal::Matcher<CXXCtorInitializer>, InnerMatcher) {
4499 auto MatchIt = matchesFirstInPointerRange(InnerMatcher,
Node.init_begin(),
4500 Node.init_end(), Finder, Builder);
4501 if (MatchIt ==
Node.init_end())
4503 return (*MatchIt)->isWritten() || !Finder->isTraversalIgnoringImplicitNodes();
4520 internal::Matcher<FieldDecl>, InnerMatcher) {
4522 return (NodeAsDecl !=
nullptr &&
4523 InnerMatcher.matches(*NodeAsDecl, Finder, Builder));
4540 internal::Matcher<Expr>, InnerMatcher) {
4541 const Expr* NodeAsExpr =
Node.getInit();
4542 return (NodeAsExpr !=
nullptr &&
4543 InnerMatcher.matches(*NodeAsExpr, Finder, Builder));
4560 return Node.isWritten();
4580 return Node.isBaseInitializer();
4600 return Node.isMemberInitializer();
4626 internal::Matcher<Expr>, InnerMatcher) {
4627 for (
const Expr *Arg :
Node.arguments()) {
4628 if (Finder->isTraversalIgnoringImplicitNodes() &&
4629 isa<CXXDefaultArgExpr>(Arg))
4631 BoundNodesTreeBuilder Result(*Builder);
4632 if (InnerMatcher.matches(*Arg, Finder, &Result)) {
4633 *Builder = std::move(Result);
4652 extern const internal::VariadicAllOfMatcher<LambdaCapture>
lambdaCapture;
4669 clang::ast_matchers::internal::BoundNodesTreeBuilder Result(*Builder);
4670 if (InnerMatcher.matches(
Capture, Finder, &Result)) {
4671 *Builder = std::move(Result);
4695 auto *capturedVar =
Node.getCapturedVar();
4696 return capturedVar && InnerMatcher.matches(*capturedVar, Finder, Builder);
4717 return Node.isListInitialization();
4733 return Node.requiresZeroInitialization();
4760 unsigned, N, internal::Matcher<ParmVarDecl>,
4762 return (N <
Node.parameters().size()
4763 && InnerMatcher.matches(*
Node.parameters()[N], Finder, Builder));
4787 internal::Matcher<Expr>, ArgMatcher,
4788 internal::Matcher<ParmVarDecl>, ParamMatcher) {
4789 BoundNodesTreeBuilder Result;
4793 BoundNodesTreeBuilder Matches;
4795 .matches(
Node, Finder, &Matches)
4799 bool Matched =
false;
4800 for (; ArgIndex <
Node.getNumArgs(); ++ArgIndex) {
4801 BoundNodesTreeBuilder ArgMatches(*Builder);
4802 if (ArgMatcher.matches(*(
Node.getArg(ArgIndex)->IgnoreParenCasts()),
4803 Finder, &ArgMatches)) {
4804 BoundNodesTreeBuilder ParamMatches(ArgMatches);
4806 hasParameter(ParamIndex, ParamMatcher)))),
4808 hasParameter(ParamIndex, ParamMatcher))))))
4810 Result.addMatch(ParamMatches);
4816 *Builder = std::move(Result);
4848 internal::Matcher<Expr>, ArgMatcher,
4849 internal::Matcher<QualType>, ParamMatcher) {
4850 BoundNodesTreeBuilder Result;
4854 BoundNodesTreeBuilder Matches;
4856 .matches(
Node, Finder, &Matches)
4862 if (
const auto *Call = dyn_cast<CallExpr>(&
Node)) {
4863 if (
const auto *
Value =
4864 dyn_cast_or_null<ValueDecl>(Call->getCalleeDecl())) {
4874 assert(MP &&
"Must be member-pointer if its a memberfunctionpointer");
4877 "The call must have happened through a member function "
4883 unsigned ParamIndex = 0;
4884 bool Matched =
false;
4885 unsigned NumArgs =
Node.getNumArgs();
4889 for (; ArgIndex < NumArgs; ++ArgIndex, ++ParamIndex) {
4890 BoundNodesTreeBuilder ArgMatches(*Builder);
4891 if (ArgMatcher.matches(*(
Node.getArg(ArgIndex)->IgnoreParenCasts()), Finder,
4893 BoundNodesTreeBuilder ParamMatches(ArgMatches);
4899 if (ParamMatcher.matches(ParamType, Finder, &ParamMatches)) {
4900 Result.addMatch(ParamMatches);
4906 hasParameter(ParamIndex, hasType(ParamMatcher))))),
4908 hasParameter(ParamIndex, hasType(ParamMatcher)))))))
4910 Result.addMatch(ParamMatches);
4916 *Builder = std::move(Result);
4938 if (
const auto *
Decl = dyn_cast_or_null<FunctionDecl>(Context))
4939 return N <
Decl->param_size() &&
Decl->getParamDecl(N) == &
Node;
4940 if (
const auto *
Decl = dyn_cast_or_null<BlockDecl>(Context))
4941 return N <
Decl->param_size() &&
Decl->getParamDecl(N) == &
Node;
4942 if (
const auto *
Decl = dyn_cast_or_null<ObjCMethodDecl>(Context))
4943 return N <
Decl->param_size() &&
Decl->getParamDecl(N) == &
Node;
4983 internal::Matcher<ParmVarDecl>,
4985 return matchesFirstInPointerRange(InnerMatcher,
Node.param_begin(),
4986 Node.param_end(), Finder,
4987 Builder) !=
Node.param_end();
5011 return Node.getNumParams() == N;
5038 forEachTemplateArgument,
5041 clang::ast_matchers::internal::Matcher<TemplateArgument>, InnerMatcher) {
5043 clang::ast_matchers::internal::getTemplateSpecializationArgs(
Node);
5044 clang::ast_matchers::internal::BoundNodesTreeBuilder Result;
5045 bool Matched =
false;
5046 for (
const auto &Arg : TemplateArgs) {
5047 clang::ast_matchers::internal::BoundNodesTreeBuilder ArgBuilder(*Builder);
5048 if (InnerMatcher.matches(Arg, Finder, &ArgBuilder)) {
5050 Result.addMatch(ArgBuilder);
5053 *Builder = std::move(Result);
5082 internal::Matcher<QualType>, InnerMatcher) {
5083 return InnerMatcher.matches(
Node.getReturnType(), Finder, Builder);
5103 return Node.isExternC();
5136 return Node.isDeleted();
5149 return Node.isDefaulted();
5182 return FnTy->hasDynamicExceptionSpec();
5232 return Node.isConsteval();
5254 return Node.isConstexpr();
5269 if (
const auto *CIA =
Node.getAttr<ConstInitAttr>())
5270 return CIA->isConstinit();
5298 internal::Matcher<Stmt>, InnerMatcher) {
5300 return Init !=
nullptr && InnerMatcher.matches(*Init, Finder, Builder);
5314 internal::Matcher<Expr>, InnerMatcher) {
5317 InnerMatcher.matches(*
Condition, Finder, Builder));
5328 const Stmt *
const Then =
Node.getThen();
5329 return (Then !=
nullptr && InnerMatcher.matches(*Then, Finder, Builder));
5340 const Stmt *
const Else =
Node.getElse();
5341 return (Else !=
nullptr && InnerMatcher.matches(*Else, Finder, Builder));
5375 internal::NotEqualsBoundNodePredicate Predicate;
5378 return Builder->removeBindings(Predicate);
5390 internal::Matcher<DeclStmt>, InnerMatcher) {
5391 const DeclStmt*
const DeclarationStatement =
5392 Node.getConditionVariableDeclStmt();
5393 return DeclarationStatement !=
nullptr &&
5394 InnerMatcher.matches(*DeclarationStatement, Finder, Builder);
5407 internal::Matcher<Expr>, InnerMatcher) {
5409 return InnerMatcher.matches(*
Expression, Finder, Builder);
5424 internal::Matcher<Expr>, InnerMatcher) {
5426 return InnerMatcher.matches(*
Expression, Finder, Builder);
5460 internal::Matcher<Stmt>, InnerMatcher) {
5461 if (Finder->isTraversalIgnoringImplicitNodes() && isDefaultedHelper(&
Node))
5463 const Stmt *
const Statement = internal::GetBodyMatcher<NodeType>::get(
Node);
5464 return (Statement !=
nullptr &&
5465 InnerMatcher.matches(*Statement, Finder, Builder));
5485 internal::Matcher<Stmt>, InnerMatcher) {
5486 const Stmt *
const Statement =
Node.getBody();
5487 return (Statement !=
nullptr &&
5488 InnerMatcher.matches(*Statement, Finder, Builder));
5506 internal::Matcher<Stmt>, InnerMatcher) {
5508 return CS && matchesFirstInPointerRange(InnerMatcher, CS->
body_begin(),
5524 return Node.size() == N;
5552 template <
typename ValueT>
5553 internal::PolymorphicMatcher<internal::ValueEqualsMatcher,
5554 void(internal::AllNodeBaseTypes), ValueT>
5556 return internal::PolymorphicMatcher<internal::ValueEqualsMatcher,
5557 void(internal::AllNodeBaseTypes), ValueT>(
5566 return internal::ValueEqualsMatcher<NodeType, ParamT>(
Value)
5574 unsigned,
Value, 1) {
5575 return internal::ValueEqualsMatcher<NodeType, ParamT>(
Value)
5585 return internal::ValueEqualsMatcher<NodeType, ParamT>(
Value)
5602 return *OpName == Name;
5612 extern const internal::VariadicFunction<
5613 internal::PolymorphicMatcher<internal::HasAnyOperatorNameMatcher,
5617 std::vector<std::string>>,
5636 isAssignmentOperator,
5639 return Node.isAssignmentOp();
5660 return Node.isComparisonOp();
5673 internal::Matcher<Expr>, InnerMatcher) {
5674 const Expr *LeftHandSide = internal::getLHS(
Node);
5675 return (LeftHandSide !=
nullptr &&
5676 InnerMatcher.matches(*LeftHandSide, Finder, Builder));
5689 internal::Matcher<Expr>, InnerMatcher) {
5690 const Expr *RightHandSide = internal::getRHS(
Node);
5691 return (RightHandSide !=
nullptr &&
5692 InnerMatcher.matches(*RightHandSide, Finder, Builder));
5701 internal::Matcher<Expr>, InnerMatcher) {
5702 return internal::VariadicDynCastAllOfMatcher<Stmt, NodeType>()(
5703 anyOf(hasLHS(InnerMatcher), hasRHS(InnerMatcher)))
5721 internal::Matcher<Expr>, Matcher1, internal::Matcher<Expr>, Matcher2) {
5722 return internal::VariadicDynCastAllOfMatcher<Stmt, NodeType>()(
5723 anyOf(
allOf(hasLHS(Matcher1), hasRHS(Matcher2)),
5724 allOf(hasLHS(Matcher2), hasRHS(Matcher1))))
5738 internal::Matcher<Expr>, InnerMatcher) {
5739 const Expr *
const Operand = internal::getSubExpr(
Node);
5740 return (Operand !=
nullptr &&
5741 InnerMatcher.matches(*Operand, Finder, Builder));
5762 internal::Matcher<Expr>, InnerMatcher) {
5763 const Expr *
const SubExpression =
5764 internal::GetSourceExpressionMatcher<NodeType>::get(
Node);
5765 return (SubExpression !=
nullptr &&
5766 InnerMatcher.matches(*SubExpression, Finder, Builder));
5788 internal::Matcher<QualType>, InnerMatcher) {
5790 return InnerMatcher.matches(NodeType, Finder, Builder);
5798 internal::Matcher<QualType>, InnerMatcher) {
5799 return InnerMatcher.matches(
Node.getType(), Finder, Builder);
5812 return Node.isStruct();
5825 return Node.isUnion();
5838 return Node.isClass();
5851 return Node.isEnum();
5866 internal::Matcher<Expr>, InnerMatcher) {
5869 InnerMatcher.matches(*
Expression, Finder, Builder));
5881 internal::Matcher<Expr>, InnerMatcher) {
5884 InnerMatcher.matches(*
Expression, Finder, Builder));
5911 return Node.isThisDeclarationADefinition();
5925 return Node.isVariadic();
5946 internal::Matcher<CXXRecordDecl>, InnerMatcher) {
5948 ASTChildrenNotSpelledInSourceScope RAII(Finder,
false);
5951 return (
Parent !=
nullptr &&
5952 InnerMatcher.matches(*
Parent, Finder, Builder));
5980 internal::Matcher<CXXMethodDecl>, InnerMatcher) {
5981 BoundNodesTreeBuilder Result;
5982 bool Matched =
false;
5983 for (
const auto *Overridden :
Node.overridden_methods()) {
5984 BoundNodesTreeBuilder OverriddenBuilder(*Builder);
5985 const bool OverriddenMatched =
5986 InnerMatcher.matches(*Overridden, Finder, &OverriddenBuilder);
5987 if (OverriddenMatched) {
5989 Result.addMatch(OverriddenBuilder);
5992 *Builder = std::move(Result);
6018 return Node.isVirtual();
6036 return Node.isVirtualAsWritten();
6040 return Node.isInheritingConstructor();
6061 return Node.template hasAttr<FinalAttr>();
6075 return Node.isPure();
6090 return Node.isConst();
6107 return Node.isCopyAssignmentOperator();
6124 return Node.isMoveAssignmentOperator();
6142 return Node.size_overridden_methods() > 0 ||
Node.hasAttr<OverrideAttr>();
6157 return Node.isUserProvided();
6187 return Node.isArrow();
6201 return Node->isIntegerType();
6215 return Node->isUnsignedIntegerType();
6229 return Node->isSignedIntegerType();
6243 return Node->isAnyCharacterType();
6263 return Node->isAnyPointerType();
6282 return Node.isConstQualified();
6301 return Node.isVolatileQualified();
6318 return Node.hasLocalQualifiers();
6334 internal::Matcher<ValueDecl>, InnerMatcher) {