21 #include "llvm/ADT/ArrayRef.h" 22 #include "llvm/ADT/IntrusiveRefCntPtr.h" 23 #include "llvm/ADT/None.h" 24 #include "llvm/ADT/SmallString.h" 25 #include "llvm/ADT/SmallVector.h" 26 #include "llvm/ADT/StringRef.h" 27 #include "llvm/Support/Casting.h" 28 #include "llvm/Support/ErrorHandling.h" 29 #include "llvm/Support/ManagedStatic.h" 30 #include "llvm/Support/raw_ostream.h" 43 std::string SelString =
Node.getSelector().getAsString();
44 for (
const std::string &S : Matches)
53 ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder,
57 ASTMatchFinder *Finder,
58 BoundNodesTreeBuilder *Builder,
62 ASTMatchFinder *Finder,
63 BoundNodesTreeBuilder *Builder,
67 ASTMatchFinder *Finder,
68 BoundNodesTreeBuilder *Builder,
71 void BoundNodesTreeBuilder::visitMatches(Visitor *ResultVisitor) {
73 Bindings.push_back(BoundNodesMap());
74 for (BoundNodesMap &Binding : Bindings) {
75 ResultVisitor->visitMatch(
BoundNodes(Binding));
81 using VariadicOperatorFunction =
bool (*)(
85 template <VariadicOperatorFunction Func>
86 class VariadicMatcher :
public DynMatcherInterface {
88 VariadicMatcher(std::vector<DynTypedMatcher> InnerMatchers)
89 : InnerMatchers(std::move(InnerMatchers)) {}
92 ASTMatchFinder *Finder,
93 BoundNodesTreeBuilder *Builder)
const override {
94 return Func(DynNode, Finder, Builder, InnerMatchers);
98 std::vector<DynTypedMatcher> InnerMatchers;
101 class IdDynMatcher :
public DynMatcherInterface {
103 IdDynMatcher(StringRef ID,
105 : ID(ID), InnerMatcher(std::move(InnerMatcher)) {}
108 ASTMatchFinder *Finder,
109 BoundNodesTreeBuilder *Builder)
const override {
110 bool Result = InnerMatcher->dynMatches(DynNode, Finder, Builder);
111 if (Result) Builder->setBinding(ID, DynNode);
116 const std::string ID;
125 class TrueMatcherImpl :
public DynMatcherInterface {
132 BoundNodesTreeBuilder *)
const override {
141 DynTypedMatcher DynTypedMatcher::constructVariadic(
142 DynTypedMatcher::VariadicOperator Op,
144 std::vector<DynTypedMatcher> InnerMatchers) {
145 assert(!InnerMatchers.empty() &&
"Array must not be empty.");
146 assert(llvm::all_of(InnerMatchers,
147 [SupportedKind](
const DynTypedMatcher &M) {
148 return M.canConvertTo(SupportedKind);
150 "InnerMatchers must be convertible to SupportedKind!");
156 auto RestrictKind = SupportedKind;
164 for (
auto &IM : InnerMatchers) {
166 RestrictKind, IM.RestrictKind);
168 return DynTypedMatcher(
169 SupportedKind, RestrictKind,
170 new VariadicMatcher<AllOfVariadicOperator>(std::move(InnerMatchers)));
173 return DynTypedMatcher(
174 SupportedKind, RestrictKind,
175 new VariadicMatcher<AnyOfVariadicOperator>(std::move(InnerMatchers)));
178 return DynTypedMatcher(
179 SupportedKind, RestrictKind,
180 new VariadicMatcher<EachOfVariadicOperator>(std::move(InnerMatchers)));
185 return DynTypedMatcher(
186 SupportedKind, RestrictKind,
187 new VariadicMatcher<NotUnaryOperator>(std::move(InnerMatchers)));
189 llvm_unreachable(
"Invalid Op value.");
192 DynTypedMatcher DynTypedMatcher::trueMatcher(
194 return DynTypedMatcher(NodeKind, NodeKind, &*TrueMatcherInstance);
197 bool DynTypedMatcher::canMatchNodesOfKind(
199 return RestrictKind.isBaseOf(Kind);
202 DynTypedMatcher DynTypedMatcher::dynCastTo(
205 Copy.SupportedKind =
Kind;
212 ASTMatchFinder *Finder,
213 BoundNodesTreeBuilder *Builder)
const {
214 if (RestrictKind.isBaseOf(DynNode.
getNodeKind()) &&
215 Implementation->dynMatches(DynNode, Finder, Builder)) {
221 Builder->removeBindings([](
const BoundNodesMap &) {
return true; });
225 bool DynTypedMatcher::matchesNoKindCheck(
227 BoundNodesTreeBuilder *Builder)
const {
228 assert(RestrictKind.isBaseOf(DynNode.
getNodeKind()));
229 if (Implementation->dynMatches(DynNode, Finder, Builder)) {
235 Builder->removeBindings([](
const BoundNodesMap &) {
return true; });
242 Result.Implementation =
243 new IdDynMatcher(ID, std::move(Result.Implementation));
244 return std::move(Result);
248 const auto From = getSupportedKind();
249 auto QualKind = ast_type_traits::ASTNodeKind::getFromNodeKind<QualType>();
250 auto TypeKind = ast_type_traits::ASTNodeKind::getFromNodeKind<Type>();
253 if (From.isSame(TypeKind) && To.
isSame(QualKind))
return true;
255 return From.isBaseOf(To);
258 void BoundNodesTreeBuilder::addMatch(
const BoundNodesTreeBuilder &Other) {
259 Bindings.append(Other.Bindings.begin(), Other.Bindings.end());
263 ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder,
265 if (InnerMatchers.size() != 1)
278 BoundNodesTreeBuilder Discard(*Builder);
279 return !InnerMatchers[0].matches(DynNode, Finder, &Discard);
283 ASTMatchFinder *Finder,
284 BoundNodesTreeBuilder *Builder,
289 for (
const DynTypedMatcher &InnerMatcher : InnerMatchers) {
290 if (!InnerMatcher.matchesNoKindCheck(DynNode, Finder, Builder))
297 ASTMatchFinder *Finder,
298 BoundNodesTreeBuilder *Builder,
300 BoundNodesTreeBuilder Result;
301 bool Matched =
false;
302 for (
const DynTypedMatcher &InnerMatcher : InnerMatchers) {
303 BoundNodesTreeBuilder BuilderInner(*Builder);
304 if (InnerMatcher.matches(DynNode, Finder, &BuilderInner)) {
306 Result.addMatch(BuilderInner);
309 *Builder = std::move(Result);
314 ASTMatchFinder *Finder,
315 BoundNodesTreeBuilder *Builder,
317 for (
const DynTypedMatcher &InnerMatcher : InnerMatchers) {
318 BoundNodesTreeBuilder Result = *Builder;
319 if (InnerMatcher.matches(DynNode, Finder, &Result)) {
320 *Builder = std::move(Result);
329 std::vector<std::string> Names;
330 for (
auto *Name : NameRefs)
331 Names.emplace_back(*Name);
337 return internal::Matcher<NamedDecl>(
new internal::HasNameMatcher(Names));
345 HasNameMatcher::HasNameMatcher(std::vector<std::string> N)
346 : UseUnqualifiedMatch(std::all_of(
348 [](StringRef Name) {
return Name.find(
"::") == Name.npos; })),
349 Names(std::move(N)) {
351 for (StringRef Name : Names)
352 assert(!Name.empty());
357 StringRef Name = FullName;
358 if (!Name.endswith(Suffix))
360 Name = Name.drop_back(Suffix.size());
362 if (!Name.endswith(
"::"))
364 Name = Name.drop_back(2);
379 llvm::raw_svector_ostream OS(Scratch);
384 return "(anonymous)";
393 return (
"(anonymous " + Node.
getKindName() +
")").toStringRef(Scratch);
406 for (StringRef Name : Names)
407 Patterns.push_back({Name, Name.startswith(
"::")});
414 for (
size_t I = 0; I < Patterns.size();) {
420 Patterns.erase(Patterns.begin() + I);
423 return !Patterns.empty();
429 bool foundMatch(
bool AllowFullyQualified)
const {
430 for (
auto&
P: Patterns)
431 if (
P.P.empty() && (AllowFullyQualified || !
P.IsFullyQualified))
447 bool HasNameMatcher::matchesNodeUnqualified(
const NamedDecl &
Node)
const {
448 assert(UseUnqualifiedMatch);
451 return llvm::any_of(Names, [&](StringRef Name) {
456 bool HasNameMatcher::matchesNodeFullFast(
const NamedDecl &
Node)
const {
457 PatternSet Patterns(Names);
468 if (!Patterns.consumeNameSuffix(
getNodeName(Node, Scratch),
474 const DeclContext *Ctx = Node.getDeclContext();
476 if (Ctx->isFunctionOrMethod())
477 return Patterns.foundMatch(
false);
479 for (; Ctx && isa<NamedDecl>(Ctx); Ctx = Ctx->getParent()) {
480 if (Patterns.foundMatch(
false))
483 if (
const auto *ND = dyn_cast<NamespaceDecl>(Ctx)) {
485 if (Patterns.consumeNameSuffix(
getNodeName(*ND, Scratch),
486 ND->isAnonymousNamespace() ||
491 if (
const auto *RD = dyn_cast<RecordDecl>(Ctx)) {
492 if (!isa<ClassTemplateSpecializationDecl>(Ctx)) {
493 if (Patterns.consumeNameSuffix(
getNodeName(*RD, Scratch),
503 return matchesNodeFullSlow(Node);
506 return Patterns.foundMatch(
true);
509 bool HasNameMatcher::matchesNodeFullSlow(
const NamedDecl &Node)
const {
510 const bool SkipUnwrittenCases[] = {
false,
true};
511 for (
bool SkipUnwritten : SkipUnwrittenCases) {
513 llvm::raw_svector_ostream OS(NodeName);
516 PrintingPolicy Policy = Node.getASTContext().getPrintingPolicy();
517 Policy.SuppressUnwrittenScope =
true;
518 Node.printQualifiedName(OS, Policy);
520 Node.printQualifiedName(OS);
523 const StringRef FullName = OS.str();
525 for (
const StringRef Pattern : Names) {
526 if (Pattern.startswith(
"::")) {
527 if (FullName == Pattern)
529 }
else if (FullName.endswith(Pattern) &&
530 FullName.drop_back(Pattern.size()).endswith(
"::")) {
539 bool HasNameMatcher::matchesNode(
const NamedDecl &Node)
const {
540 assert(matchesNodeFullFast(Node) == matchesNodeFullSlow(Node));
541 if (UseUnqualifiedMatch) {
542 assert(matchesNodeUnqualified(Node) == matchesNodeFullFast(Node));
543 return matchesNodeUnqualified(Node);
545 return matchesNodeFullFast(Node);
550 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAutoreleasePoolStmt>
552 const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl>
554 const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
typedefDecl;
555 const internal::VariadicDynCastAllOfMatcher<Decl, TypedefNameDecl>
557 const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasDecl>
typeAliasDecl;
558 const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasTemplateDecl>
560 const internal::VariadicAllOfMatcher<Decl>
decl;
561 const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl>
563 const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl>
namedDecl;
564 const internal::VariadicDynCastAllOfMatcher<Decl, LabelDecl>
labelDecl;
565 const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl>
namespaceDecl;
566 const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceAliasDecl>
568 const internal::VariadicDynCastAllOfMatcher<Decl, RecordDecl>
recordDecl;
569 const internal::VariadicDynCastAllOfMatcher<Decl, CXXRecordDecl>
cxxRecordDecl;
570 const internal::VariadicDynCastAllOfMatcher<Decl, ClassTemplateDecl>
572 const internal::VariadicDynCastAllOfMatcher<
Decl,
575 const internal::VariadicDynCastAllOfMatcher<
578 const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl>
580 const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl>
parmVarDecl;
581 const internal::VariadicDynCastAllOfMatcher<Decl, AccessSpecDecl>
586 const internal::VariadicDynCastAllOfMatcher<Decl, NonTypeTemplateParmDecl>
588 const internal::VariadicDynCastAllOfMatcher<Decl, TemplateTypeParmDecl>
590 const internal::VariadicAllOfMatcher<QualType>
qualType;
591 const internal::VariadicAllOfMatcher<Type>
type;
592 const internal::VariadicAllOfMatcher<TypeLoc>
typeLoc;
593 const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryExprOrTypeTraitExpr>
595 const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl>
valueDecl;
596 const internal::VariadicDynCastAllOfMatcher<Decl, CXXConstructorDecl>
598 const internal::VariadicDynCastAllOfMatcher<Decl, CXXDestructorDecl>
600 const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl>
enumDecl;
601 const internal::VariadicDynCastAllOfMatcher<Decl, EnumConstantDecl>
603 const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl>
cxxMethodDecl;
604 const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
606 const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl>
varDecl;
607 const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl>
fieldDecl;
608 const internal::VariadicDynCastAllOfMatcher<Decl, IndirectFieldDecl>
610 const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl>
functionDecl;
611 const internal::VariadicDynCastAllOfMatcher<Decl, FunctionTemplateDecl>
613 const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl>
friendDecl;
614 const internal::VariadicAllOfMatcher<Stmt>
stmt;
615 const internal::VariadicDynCastAllOfMatcher<Stmt, DeclStmt>
declStmt;
616 const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr>
memberExpr;
617 const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedMemberExpr>
619 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDependentScopeMemberExpr>
621 const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr>
callExpr;
622 const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr>
lambdaExpr;
623 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXMemberCallExpr>
625 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCMessageExpr>
627 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCInterfaceDecl>
629 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCImplementationDecl>
631 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCProtocolDecl>
633 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryDecl>
635 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryImplDecl>
637 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCMethodDecl>
639 const internal::VariadicDynCastAllOfMatcher<Decl, BlockDecl>
641 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCIvarDecl>
objcIvarDecl;
642 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCPropertyDecl>
644 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtThrowStmt>
646 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtTryStmt>
objcTryStmt;
647 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtCatchStmt>
649 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtFinallyStmt>
651 const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups>
653 const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr>
initListExpr;
654 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStdInitializerListExpr>
656 const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitValueInitExpr>
658 const internal::VariadicDynCastAllOfMatcher<Stmt, ParenListExpr>
parenListExpr;
659 const internal::VariadicDynCastAllOfMatcher<Stmt, SubstNonTypeTemplateParmExpr>
661 const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl>
usingDecl;
662 const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl>
664 const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedLookupExpr>
666 const internal::VariadicDynCastAllOfMatcher<Decl, UnresolvedUsingValueDecl>
668 const internal::VariadicDynCastAllOfMatcher<Decl, UnresolvedUsingTypenameDecl>
670 const internal::VariadicDynCastAllOfMatcher<Stmt, ConstantExpr>
constantExpr;
671 const internal::VariadicDynCastAllOfMatcher<Stmt, ParenExpr>
parenExpr;
672 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstructExpr>
674 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXUnresolvedConstructExpr>
676 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr>
cxxThisExpr;
677 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBindTemporaryExpr>
679 const internal::VariadicDynCastAllOfMatcher<Stmt, MaterializeTemporaryExpr>
681 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr>
cxxNewExpr;
682 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr>
cxxDeleteExpr;
683 const internal::VariadicDynCastAllOfMatcher<Stmt, ArraySubscriptExpr>
685 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDefaultArgExpr>
687 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXOperatorCallExpr>
689 const internal::VariadicDynCastAllOfMatcher<Stmt, Expr>
expr;
690 const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr>
declRefExpr;
692 const internal::VariadicDynCastAllOfMatcher<Stmt, BlockExpr>
blockExpr;
693 const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt>
ifStmt;
694 const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt>
forStmt;
695 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt>
697 const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt>
whileStmt;
698 const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt>
doStmt;
699 const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt>
breakStmt;
700 const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt>
continueStmt;
701 const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt>
returnStmt;
702 const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt>
gotoStmt;
703 const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt>
labelStmt;
704 const internal::VariadicDynCastAllOfMatcher<Stmt, AddrLabelExpr>
addrLabelExpr;
705 const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt>
switchStmt;
706 const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase>
switchCase;
707 const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt>
caseStmt;
708 const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt>
defaultStmt;
709 const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt>
compoundStmt;
710 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt>
cxxCatchStmt;
711 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt>
cxxTryStmt;
712 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr>
cxxThrowExpr;
713 const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt>
nullStmt;
714 const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt>
asmStmt;
715 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr>
717 const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral>
stringLiteral;
718 const internal::VariadicDynCastAllOfMatcher<Stmt, CharacterLiteral>
720 const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral>
722 const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral>
floatLiteral;
724 const internal::VariadicDynCastAllOfMatcher<Stmt, UserDefinedLiteral>
726 const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundLiteralExpr>
728 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNullPtrLiteralExpr>
730 const internal::VariadicDynCastAllOfMatcher<Stmt, GNUNullExpr>
gnuNullExpr;
731 const internal::VariadicDynCastAllOfMatcher<Stmt, AtomicExpr>
atomicExpr;
732 const internal::VariadicDynCastAllOfMatcher<Stmt, StmtExpr>
stmtExpr;
733 const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryOperator>
735 const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryOperator>
unaryOperator;
736 const internal::VariadicDynCastAllOfMatcher<Stmt, ConditionalOperator>
738 const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryConditionalOperator>
740 const internal::VariadicDynCastAllOfMatcher<Stmt, OpaqueValueExpr>
742 const internal::VariadicDynCastAllOfMatcher<Decl, StaticAssertDecl>
744 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXReinterpretCastExpr>
746 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStaticCastExpr>
748 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDynamicCastExpr>
750 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstCastExpr>
752 const internal::VariadicDynCastAllOfMatcher<Stmt, CStyleCastExpr>
754 const internal::VariadicDynCastAllOfMatcher<Stmt, ExplicitCastExpr>
756 const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitCastExpr>
758 const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr>
castExpr;
759 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXFunctionalCastExpr>
761 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTemporaryObjectExpr>
763 const internal::VariadicDynCastAllOfMatcher<Stmt, PredefinedExpr>
765 const internal::VariadicDynCastAllOfMatcher<Stmt, DesignatedInitExpr>
767 const internal::VariadicOperatorMatcherFunc<
769 eachOf = {internal::DynTypedMatcher::VO_EachOf};
770 const internal::VariadicOperatorMatcherFunc<
772 anyOf = {internal::DynTypedMatcher::VO_AnyOf};
773 const internal::VariadicOperatorMatcherFunc<
775 allOf = {internal::DynTypedMatcher::VO_AllOf};
776 const internal::VariadicFunction<internal::Matcher<NamedDecl>, StringRef,
779 const internal::VariadicFunction<internal::Matcher<ObjCMessageExpr>, StringRef,
782 const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>
has = {};
783 const internal::ArgumentAdaptingMatcherFunc<internal::HasDescendantMatcher>
785 const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher>
forEach =
787 const internal::ArgumentAdaptingMatcherFunc<internal::ForEachDescendantMatcher>
789 const internal::ArgumentAdaptingMatcherFunc<
790 internal::HasParentMatcher,
791 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>,
792 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
794 const internal::ArgumentAdaptingMatcherFunc<
795 internal::HasAncestorMatcher,
796 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>,
797 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc>>
799 const internal::VariadicOperatorMatcherFunc<1, 1>
unless = {
800 internal::DynTypedMatcher::VO_UnaryNot};
802 const internal::VariadicAllOfMatcher<NestedNameSpecifierLoc>
804 const internal::VariadicDynCastAllOfMatcher<Stmt, CUDAKernelCallExpr>
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThisExpr > cxxThisExpr
Matches implicit and explicit this expressions.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Decl, NonTypeTemplateParmDecl > nonTypeTemplateParmDecl
Matches non-type template parameter declarations.
Defines the clang::ASTContext interface.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtThrowStmt > objcThrowStmt
Matches Objective-C @throw statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CallExpr > callExpr
Matches call expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ParenExpr > parenExpr
Matches parentheses used in expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefDecl > typedefDecl
Matches typedef declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, LinkageSpecDecl > linkageSpecDecl
Matches a declaration of a linkage specification.
PointerType - C99 6.7.5.1 - Pointer Declarators.
const AstTypeMatcher< DecltypeType > decltypeType
Matches types nodes representing C++11 decltype(<expr>) types.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachMatcher > forEach
Matches AST nodes that have child AST nodes that match the provided matcher.
AST_MATCHER_P(FieldDecl, hasBitWidth, unsigned, Width)
Matches non-static data members that are bit-fields of the specified bit width.
const AstTypeMatcher< UnaryTransformType > unaryTransformType
Matches types nodes representing unary type transformations.
const internal::VariadicAllOfMatcher< Stmt > stmt
Matches statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXUnresolvedConstructExpr > cxxUnresolvedConstructExpr
Matches unresolved constructor call expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCInterfaceDecl > objcInterfaceDecl
Matches Objective-C interface declarations.
const internal::ArgumentAdaptingMatcherFunc< internal::HasMatcher > has
Matches AST nodes that have child AST nodes that match the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBindTemporaryExpr > cxxBindTemporaryExpr
Matches nodes where temporaries are created.
const internal::VariadicDynCastAllOfMatcher< Decl, RecordDecl > recordDecl
Matches class, struct, and union declarations.
const internal::VariadicFunction< internal::Matcher< ObjCMessageExpr >, StringRef, internal::hasAnySelectorFunc > hasAnySelector
Matches when at least one of the supplied string equals to the Selector.getAsString() ...
const AstTypeMatcher< TagType > tagType
Matches tag types (record and enum types).
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> anyOf
Matches if any of the given matchers matches.
Decl - This represents one declaration (or definition), e.g.
Defines the C++ template declaration subclasses.
const internal::ArgumentAdaptingMatcherFunc< internal::HasDescendantMatcher > hasDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher. ...
const AstTypeMatcher< FunctionType > functionType
Matches FunctionType nodes.
bool isSame(ASTNodeKind Other) const
Returns true if this and Other represent the same kind.
bool AnyOfVariadicOperator(const ast_type_traits::DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
const internal::VariadicDynCastAllOfMatcher< Stmt, ImaginaryLiteral > imaginaryLiteral
Matches imaginary literals, which are based on integer and floating point literals e...
Represents an array type, per C99 6.7.5.2 - Array Declarators.
Represent a C++ namespace.
const AstTypeMatcher< SubstTemplateTypeParmType > substTemplateTypeParmType
Matches types that represent the result of substituting a type for a template type parameter...
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> eachOf
Matches if any of the given matchers matches.
const AstTypeMatcher< AutoType > autoType
Matches types nodes representing C++11 auto types.
const AstTypeMatcher< RValueReferenceType > rValueReferenceType
Matches rvalue reference types.
const internal::VariadicAllOfMatcher< TemplateName > templateName
Matches template name.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtTryStmt > objcTryStmt
Matches Objective-C statements.
const AstTypeMatcher< PointerType > pointerType
Matches pointer types, but does not match Objective-C object pointer types.
const internal::VariadicDynCastAllOfMatcher< Stmt, Expr > expr
Matches expressions.
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> allOf
Matches if all given matchers match.
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryOperator > binaryOperator
Matches binary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStdInitializerListExpr > cxxStdInitializerListExpr
Matches C++ initializer list expressions.
Matcher< NamedDecl > hasAnyNameFunc(ArrayRef< const StringRef *> NameRefs)
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCIvarRefExpr > objcIvarRefExpr
Matches a reference to an ObjCIvar.
const internal::VariadicDynCastAllOfMatcher< Decl, VarDecl > varDecl
Matches variable declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionDecl > functionDecl
Matches function declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, BlockExpr > blockExpr
Matches a reference to a block.
const internal::VariadicDynCastAllOfMatcher< Decl, NamedDecl > namedDecl
Matches a declaration of anything that could have a name.
const AstTypeMatcher< BuiltinType > builtinType
Matches builtin Types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThrowExpr > cxxThrowExpr
Matches throw expressions.
IdentifierInfo * getIdentifier() const
Get the identifier that names this declaration, if there is one.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumDecl > enumDecl
Matches enum declarations.
const AstTypeMatcher< RecordType > recordType
Matches record types (e.g.
Represents a struct/union/class.
DeclarationName getDeclName() const
Get the actual, stored name of the declaration, which may be a special name.
bool NotUnaryOperator(const ast_type_traits::DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
Represents a class template specialization, which refers to a class template with a given set of temp...
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateDecl > classTemplateDecl
Matches C++ class template declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCCategoryDecl > objcCategoryDecl
Matches Objective-C category declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXOperatorCallExpr > cxxOperatorCallExpr
Matches overloaded operator calls.
const internal::VariadicDynCastAllOfMatcher< Decl, TypeAliasTemplateDecl > typeAliasTemplateDecl
Matches type alias template declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, DesignatedInitExpr > designatedInitExpr
Matches C99 designated initializer expressions [C99 6.7.8].
const AstTypeMatcher< InjectedClassNameType > injectedClassNameType
Matches injected class name types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNullPtrLiteralExpr > cxxNullPtrLiteralExpr
Matches nullptr literal.
const internal::VariadicDynCastAllOfMatcher< Stmt, ConstantExpr > constantExpr
Matches a constant expression wrapper.
const AstTypeMatcher< DependentSizedArrayType > dependentSizedArrayType
Matches C++ arrays whose size is a value-dependent expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTryStmt > cxxTryStmt
Matches try statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStaticCastExpr > cxxStaticCastExpr
Matches a C++ static_cast expression.
internal::VariadicDynCastAllOfMatcher< Type, NodeType > AstTypeMatcher
const AstTypeMatcher< TypedefType > typedefType
Matches typedef types.
const internal::VariadicDynCastAllOfMatcher< Stmt, GotoStmt > gotoStmt
Matches goto statements.
const AstTypeMatcher< ComplexType > complexType
Matches C99 complex types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXFunctionalCastExpr > cxxFunctionalCastExpr
Matches functional cast expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXReinterpretCastExpr > cxxReinterpretCastExpr
Matches a reinterpret_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, FloatingLiteral > floatLiteral
Matches float literals of all sizes / encodings, e.g.
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclStmt > declStmt
Matches declaration statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, OpaqueValueExpr > opaqueValueExpr
Matches opaque value expressions.
const AstTypeMatcher< MemberPointerType > memberPointerType
Matches member pointer types.
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclRefExpr > declRefExpr
Matches expressions that refer to declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, IfStmt > ifStmt
Matches if statements.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceDecl > namespaceDecl
Matches a declaration of a namespace.
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitValueInitExpr > implicitValueInitExpr
Matches implicit initializers of init list expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchCase > switchCase
Matches case and default statements inside switch statements.
const internal::VariadicFunction< internal::Matcher< NamedDecl >, StringRef, internal::hasAnyNameFunc > hasAnyName
Matches NamedDecl nodes that have any of the specified names.
const internal::VariadicDynCastAllOfMatcher< Stmt, UserDefinedLiteral > userDefinedLiteral
Matches user defined literal operator call.
const AstTypeMatcher< VariableArrayType > variableArrayType
Matches C arrays with a specified size that is not an integer-constant-expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CastExpr > castExpr
Matches any cast nodes of Clang's AST.
bool EachOfVariadicOperator(const ast_type_traits::DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
ASTNodeKind getNodeKind() const
const internal::VariadicDynCastAllOfMatcher< Decl, ValueDecl > valueDecl
Matches any value declaration.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCPropertyDecl > objcPropertyDecl
Matches Objective-C property declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtFinallyStmt > objcFinallyStmt
Matches Objective-C statements.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionTemplateDecl > functionTemplateDecl
Matches C++ function template declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXCatchStmt > cxxCatchStmt
Matches catch statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateSpecializationDecl > classTemplateSpecializationDecl
Matches C++ class template specializations.
const internal::VariadicDynCastAllOfMatcher< Stmt, MaterializeTemporaryExpr > materializeTemporaryExpr
Matches nodes where temporaries are materialized.
const internal::VariadicDynCastAllOfMatcher< Stmt, CaseStmt > caseStmt
Matches case statements inside switch statements.
const AstTypeMatcher< ParenType > parenType
Matches ParenType nodes.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDirectiveDecl > usingDirectiveDecl
Matches using namespace declarations.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachDescendantMatcher > forEachDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher. ...
const internal::VariadicDynCastAllOfMatcher< Stmt, AsmStmt > asmStmt
Matches asm statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplatePartialSpecializationDecl > classTemplatePartialSpecializationDecl
Matches C++ class template partial specializations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAutoreleasePoolStmt > autoreleasePoolStmt
Matches an Objective-C autorelease pool statement.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingTypenameDecl > unresolvedUsingTypenameDecl
Matches unresolved using value declarations that involve the typename.
const internal::VariadicDynCastAllOfMatcher< Stmt, MemberExpr > memberExpr
Matches member expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, AddrLabelExpr > addrLabelExpr
Matches address of label statements (GNU extension).
const internal::VariadicDynCastAllOfMatcher< Stmt, ExplicitCastExpr > explicitCastExpr
Matches explicit cast expressions.
StringRef getKindName() const
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchStmt > switchStmt
Matches switch statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnresolvedLookupExpr > unresolvedLookupExpr
Matches reference to a name that can be looked up during parsing but could not be resolved to a speci...
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryConditionalOperator > binaryConditionalOperator
Matches binary conditional operator expressions (GNU extension).
const internal::VariadicAllOfMatcher< Decl > decl
Matches declarations.
const AstTypeMatcher< IncompleteArrayType > incompleteArrayType
Matches C arrays with unspecified size.
bool AllOfVariadicOperator(const ast_type_traits::DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
bool isAnonymousNamespace() const
Returns true if this is an anonymous namespace declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, LabelStmt > labelStmt
Matches label statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CStyleCastExpr > cStyleCastExpr
Matches a C-style cast expression.
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceAliasDecl > namespaceAliasDecl
Matches a declaration of a namespace alias.
const internal::VariadicDynCastAllOfMatcher< Decl, FieldDecl > fieldDecl
Matches field declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnresolvedMemberExpr > unresolvedMemberExpr
Matches unresolved member expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ConditionalOperator > conditionalOperator
Matches conditional operator expressions.
const AstTypeMatcher< ArrayType > arrayType
Matches all kinds of arrays.
static ASTNodeKind getMostDerivedType(ASTNodeKind Kind1, ASTNodeKind Kind2)
Return the most derived type between Kind1 and Kind2.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefNameDecl > typedefNameDecl
Matches typedef name declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, SubstNonTypeTemplateParmExpr > substNonTypeTemplateParmExpr
Matches substitutions of non-type template parameters.
const internal::VariadicDynCastAllOfMatcher< Stmt, ReturnStmt > returnStmt
Matches return statements.
const AstTypeMatcher< FunctionProtoType > functionProtoType
Matches FunctionProtoType nodes.
const internal::VariadicDynCastAllOfMatcher< Stmt, CUDAKernelCallExpr > cudaKernelCallExpr
Matches CUDA kernel call expression.
An expression that sends a message to the given Objective-C object or class.
const AstTypeMatcher< AtomicType > atomicType
Matches atomic types.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCCategoryImplDecl > objcCategoryImplDecl
Matches Objective-C category definitions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ExprWithCleanups > exprWithCleanups
Matches expressions that introduce cleanups to be run at the end of the sub-expression's evaluation...
const internal::VariadicDynCastAllOfMatcher< Decl, FriendDecl > friendDecl
Matches friend declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, DoStmt > doStmt
Matches do statements.
const internal::ArgumentAdaptingMatcherFunc< internal::HasAncestorMatcher, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc >, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc > > hasAncestor
Matches AST nodes that have an ancestor that matches the provided matcher.
const AstTypeMatcher< TemplateSpecializationType > templateSpecializationType
Matches template specialization types.
const internal::VariadicAllOfMatcher< NestedNameSpecifierLoc > nestedNameSpecifierLoc
Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
virtual void printName(raw_ostream &os) const
const internal::VariadicDynCastAllOfMatcher< Stmt, PredefinedExpr > predefinedExpr
Matches predefined identifier expressions [C99 6.4.2.2].
const internal::VariadicDynCastAllOfMatcher< Decl, LabelDecl > labelDecl
Matches a declaration of label.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXMemberCallExpr > cxxMemberCallExpr
Matches member call expressions.
static StringRef getNodeName(const NamedDecl &Node, llvm::SmallString< 128 > &Scratch)
const internal::VariadicDynCastAllOfMatcher< Decl, ParmVarDecl > parmVarDecl
Matches parameter variable declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstCastExpr > cxxConstCastExpr
Matches a const_cast expression.
const internal::VariadicDynCastAllOfMatcher< Decl, TypeAliasDecl > typeAliasDecl
Matches type alias declarations.
const internal::VariadicAllOfMatcher< CXXCtorInitializer > cxxCtorInitializer
Matches constructor initializers.
const internal::VariadicDynCastAllOfMatcher< Stmt, GNUNullExpr > gnuNullExpr
Matches GNU __null expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, BreakStmt > breakStmt
Matches break statements.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXMethodDecl > cxxMethodDecl
Matches method declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDynamicCastExpr > cxxDynamicCastExpr
Matches a dynamic_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, DefaultStmt > defaultStmt
Matches default statements inside switch statements.
const internal::VariadicDynCastAllOfMatcher< Decl, TranslationUnitDecl > translationUnitDecl
Matches the top declaration context.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXForRangeStmt > cxxForRangeStmt
Matches range-based for statements.
const internal::VariadicAllOfMatcher< TypeLoc > typeLoc
Matches TypeLocs in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Stmt, IntegerLiteral > integerLiteral
Matches integer literals of all sizes / encodings, e.g.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstructExpr > cxxConstructExpr
Matches constructor call expressions (including implicit ones).
const internal::VariadicAllOfMatcher< QualType > qualType
Matches QualTypes in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Decl, TemplateTypeParmDecl > templateTypeParmDecl
Matches template type parameter declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCMethodDecl > objcMethodDecl
Matches Objective-C method declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDecl > usingDecl
Matches using declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ArraySubscriptExpr > arraySubscriptExpr
Matches array subscript expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryExprOrTypeTraitExpr > unaryExprOrTypeTraitExpr
Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
const internal::ArgumentAdaptingMatcherFunc< internal::HasParentMatcher, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc >, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc > > hasParent
Matches AST nodes that have a parent that matches the provided matcher.
#define AST_POLYMORPHIC_SUPPORTED_TYPES(...)
Construct a type-list to be passed to the AST_POLYMORPHIC_MATCHER* macros.
static std::vector< std::string > vectorFromRefs(ArrayRef< const StringRef *> NameRefs)
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCIvarDecl > objcIvarDecl
Matches Objective-C instance variable declarations.
const internal::VariadicOperatorMatcherFunc< 1, 1 > unless
Matches if the provided matcher does not match.
const internal::VariadicDynCastAllOfMatcher< Stmt, ForStmt > forStmt
Matches for statements.
BoundNodesTreeBuilder BoundNodes
ast_type_traits::DynTypedNode Node
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCImplementationDecl > objcImplementationDecl
Matches Objective-C implementation declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundLiteralExpr > compoundLiteralExpr
Matches compound (i.e.
Dataflow Directional Tag Classes.
const internal::VariadicDynCastAllOfMatcher< Stmt, AtomicExpr > atomicExpr
Matches atomic builtins.
const internal::VariadicDynCastAllOfMatcher< Decl, StaticAssertDecl > staticAssertDecl
Matches a C++ static_assert declaration.
const AstTypeMatcher< ElaboratedType > elaboratedType
Matches types specified with an elaborated type keyword or with a qualified name. ...
const internal::VariadicDynCastAllOfMatcher< Stmt, ParenListExpr > parenListExpr
Matches paren list expressions.
static bool consumeNameSuffix(StringRef &FullName, StringRef Suffix)
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConversionDecl > cxxConversionDecl
Matches conversion operator declarations.
const internal::VariadicAllOfMatcher< TemplateArgument > templateArgument
Matches template arguments.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCProtocolDecl > objcProtocolDecl
Matches Objective-C protocol declarations.
const AstTypeMatcher< DecayedType > decayedType
Matches decayed type Example matches i[] in declaration of f.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXRecordDecl > cxxRecordDecl
Matches C++ class declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDefaultArgExpr > cxxDefaultArgExpr
Matches the value of a default argument at the call site.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingValueDecl > unresolvedUsingValueDecl
Matches unresolved using value declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, NullStmt > nullStmt
Matches null statements.
A pointer to member type per C++ 8.3.3 - Pointers to members.
const internal::VariadicDynCastAllOfMatcher< Decl, IndirectFieldDecl > indirectFieldDecl
Matches indirect field declarations.
A dynamically typed AST node container.
Complex values, per C99 6.2.5p11.
const internal::VariadicDynCastAllOfMatcher< Stmt, LambdaExpr > lambdaExpr
Matches lambda expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNewExpr > cxxNewExpr
Matches new expressions.
Base for LValueReferenceType and RValueReferenceType.
static llvm::ManagedStatic< TrueMatcherImpl > TrueMatcherInstance
const internal::VariadicDynCastAllOfMatcher< Stmt, InitListExpr > initListExpr
Matches init list expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDeleteExpr > cxxDeleteExpr
Matches delete expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ContinueStmt > continueStmt
Matches continue statements.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumConstantDecl > enumConstantDecl
Matches enum constants.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtCatchStmt > objcCatchStmt
Matches Objective-C statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryOperator > unaryOperator
Matches unary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CharacterLiteral > characterLiteral
Matches character literals (also matches wchar_t).
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTemporaryObjectExpr > cxxTemporaryObjectExpr
Matches functional cast expressions having N != 1 arguments.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConstructorDecl > cxxConstructorDecl
Matches C++ constructor declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDependentScopeMemberExpr > cxxDependentScopeMemberExpr
Matches member expressions where the actual member referenced could not be resolved because the base ...
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitCastExpr > implicitCastExpr
Matches the implicit cast nodes of Clang's AST.
const internal::VariadicAllOfMatcher< NestedNameSpecifier > nestedNameSpecifier
Matches nested name specifiers.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBoolLiteralExpr > cxxBoolLiteral
Matches bool literals.
const internal::VariadicDynCastAllOfMatcher< Stmt, StmtExpr > stmtExpr
Matches statement expression (GNU extension).
const AstTypeMatcher< ObjCObjectPointerType > objcObjectPointerType
Matches an Objective-C object pointer type, which is different from a pointer type, despite being syntactically similar.
const internal::VariadicDynCastAllOfMatcher< Decl, AccessSpecDecl > accessSpecDecl
Matches C++ access specifier declarations.
const AstTypeMatcher< TemplateTypeParmType > templateTypeParmType
Matches template type parameter types.
StringRef getName() const
Get the name of identifier for this declaration as a StringRef.
__DEVICE__ int max(int __a, int __b)
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundStmt > compoundStmt
Matches compound statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, StringLiteral > stringLiteral
Matches string literals (also matches wide string literals).
const internal::VariadicDynCastAllOfMatcher< Decl, BlockDecl > blockDecl
Matches block declarations.
const AstTypeMatcher< ConstantArrayType > constantArrayType
Matches C arrays with a specified constant size.
bool matches(const til::SExpr *E1, const til::SExpr *E2)
const internal::VariadicDynCastAllOfMatcher< Decl, CXXDestructorDecl > cxxDestructorDecl
Matches explicit C++ destructor declarations.
This represents a decl that may have a name.
const AstTypeMatcher< ReferenceType > referenceType
Matches both lvalue and rvalue reference types.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCMessageExpr > objcMessageExpr
Matches ObjectiveC Message invocation expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, DeclaratorDecl > declaratorDecl
Matches declarator declarations (field, variable, function and non-type template parameter declaratio...
Matcher< ObjCMessageExpr > hasAnySelectorFunc(ArrayRef< const StringRef *> NameRefs)
const AstTypeMatcher< LValueReferenceType > lValueReferenceType
Matches lvalue reference types.
const internal::VariadicDynCastAllOfMatcher< Stmt, WhileStmt > whileStmt
Matches while statements.
AST_TYPELOC_TRAVERSE_MATCHER_DEF(hasElementType, AST_POLYMORPHIC_SUPPORTED_TYPES(ArrayType, ComplexType))
const AstTypeMatcher< EnumType > enumType
Matches enum types.
const AstTypeMatcher< BlockPointerType > blockPointerType
Matches block pointer types, i.e.