Go to the documentation of this file.
23 #include "llvm/ADT/ArrayRef.h"
24 #include "llvm/ADT/IntrusiveRefCntPtr.h"
25 #include "llvm/ADT/None.h"
26 #include "llvm/ADT/SmallString.h"
27 #include "llvm/ADT/SmallVector.h"
28 #include "llvm/ADT/StringRef.h"
29 #include "llvm/Support/Casting.h"
30 #include "llvm/Support/ErrorHandling.h"
31 #include "llvm/Support/ManagedStatic.h"
32 #include "llvm/Support/Regex.h"
33 #include "llvm/Support/WithColor.h"
34 #include "llvm/Support/raw_ostream.h"
43 namespace ast_matchers {
47 return llvm::is_contained(Matches,
Node.getSelector().getAsString());
53 ASTMatchFinder *Finder,
54 BoundNodesTreeBuilder *Builder,
58 ASTMatchFinder *Finder,
59 BoundNodesTreeBuilder *Builder,
63 ASTMatchFinder *Finder,
64 BoundNodesTreeBuilder *Builder,
68 ASTMatchFinder *Finder,
69 BoundNodesTreeBuilder *Builder,
73 ASTMatchFinder *Finder,
74 BoundNodesTreeBuilder *Builder,
78 const Matcher<CXXBaseSpecifier> &BaseSpecMatcher,
79 ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder) {
80 if (!
Node.hasDefinition())
84 Paths.setOrigin(&
Node);
86 const auto basePredicate =
89 BoundNodesTreeBuilder Result(*Builder);
90 if (BaseSpecMatcher.matches(*BaseSpec, Finder, Builder)) {
91 *Builder = std::move(Result);
97 return Node.lookupInBases(basePredicate, Paths,
101 void BoundNodesTreeBuilder::visitMatches(Visitor *ResultVisitor) {
103 Bindings.push_back(BoundNodesMap());
104 for (BoundNodesMap &Binding :
Bindings) {
105 ResultVisitor->visitMatch(
BoundNodes(Binding));
111 using VariadicOperatorFunction =
bool (*)(
113 BoundNodesTreeBuilder *Builder, ArrayRef<DynTypedMatcher> InnerMatchers);
115 template <VariadicOperatorFunction Func>
116 class VariadicMatcher :
public DynMatcherInterface {
118 VariadicMatcher(std::vector<DynTypedMatcher> InnerMatchers)
119 : InnerMatchers(
std::move(InnerMatchers)) {}
121 bool dynMatches(
const DynTypedNode &DynNode, ASTMatchFinder *Finder,
122 BoundNodesTreeBuilder *Builder)
const override {
123 return Func(DynNode, Finder, Builder, InnerMatchers);
127 std::vector<DynTypedMatcher> InnerMatchers;
130 class IdDynMatcher :
public DynMatcherInterface {
132 IdDynMatcher(StringRef ID,
133 IntrusiveRefCntPtr<DynMatcherInterface> InnerMatcher)
134 :
ID(
ID), InnerMatcher(
std::move(InnerMatcher)) {}
136 bool dynMatches(
const DynTypedNode &DynNode, ASTMatchFinder *Finder,
137 BoundNodesTreeBuilder *Builder)
const override {
138 bool Result = InnerMatcher->dynMatches(DynNode, Finder, Builder);
139 if (Result) Builder->setBinding(ID, DynNode);
144 return InnerMatcher->TraversalKind();
149 const IntrusiveRefCntPtr<DynMatcherInterface> InnerMatcher;
153 class TrueMatcherImpl :
public DynMatcherInterface {
155 TrueMatcherImpl() =
default;
158 BoundNodesTreeBuilder *)
const override {
167 class DynTraversalMatcherImpl :
public DynMatcherInterface {
169 explicit DynTraversalMatcherImpl(
171 IntrusiveRefCntPtr<DynMatcherInterface> InnerMatcher)
172 : TK(TK), InnerMatcher(
std::move(InnerMatcher)) {}
174 bool dynMatches(
const DynTypedNode &DynNode, ASTMatchFinder *Finder,
175 BoundNodesTreeBuilder *Builder)
const override {
176 return this->InnerMatcher->dynMatches(DynNode, Finder, Builder);
185 IntrusiveRefCntPtr<DynMatcherInterface> InnerMatcher;
190 bool ASTMatchFinder::isTraversalIgnoringImplicitNodes()
const {
191 return getASTContext().getParentMapContext().getTraversalKind() ==
196 DynTypedMatcher::constructVariadic(DynTypedMatcher::VariadicOperator Op,
197 ASTNodeKind SupportedKind,
198 std::vector<DynTypedMatcher> InnerMatchers) {
199 assert(!InnerMatchers.empty() &&
"Array must not be empty.");
200 assert(llvm::all_of(InnerMatchers,
201 [SupportedKind](
const DynTypedMatcher &M) {
202 return M.canConvertTo(SupportedKind);
204 "InnerMatchers must be convertible to SupportedKind!");
210 auto RestrictKind = SupportedKind;
218 for (
auto &IM : InnerMatchers) {
222 return DynTypedMatcher(
223 SupportedKind, RestrictKind,
224 new VariadicMatcher<allOfVariadicOperator>(std::move(InnerMatchers)));
227 return DynTypedMatcher(
228 SupportedKind, RestrictKind,
229 new VariadicMatcher<anyOfVariadicOperator>(std::move(InnerMatchers)));
232 return DynTypedMatcher(
233 SupportedKind, RestrictKind,
234 new VariadicMatcher<eachOfVariadicOperator>(std::move(InnerMatchers)));
237 return DynTypedMatcher(SupportedKind, RestrictKind,
238 new VariadicMatcher<optionallyVariadicOperator>(
239 std::move(InnerMatchers)));
244 return DynTypedMatcher(
245 SupportedKind, RestrictKind,
246 new VariadicMatcher<notUnaryOperator>(std::move(InnerMatchers)));
248 llvm_unreachable(
"Invalid Op value.");
252 DynTypedMatcher::constructRestrictedWrapper(
const DynTypedMatcher &InnerMatcher,
253 ASTNodeKind RestrictKind) {
254 DynTypedMatcher Copy = InnerMatcher;
255 Copy.RestrictKind = RestrictKind;
259 DynTypedMatcher DynTypedMatcher::withTraversalKind(
TraversalKind TK) {
261 Copy.Implementation =
262 new DynTraversalMatcherImpl(TK, std::move(Copy.Implementation));
266 DynTypedMatcher DynTypedMatcher::trueMatcher(ASTNodeKind
NodeKind) {
271 new TrueMatcherImpl();
275 bool DynTypedMatcher::canMatchNodesOfKind(ASTNodeKind
Kind)
const {
276 return RestrictKind.isBaseOf(
Kind);
279 DynTypedMatcher DynTypedMatcher::dynCastTo(
const ASTNodeKind
Kind)
const {
281 Copy.SupportedKind =
Kind;
287 ASTMatchFinder *Finder,
288 BoundNodesTreeBuilder *Builder)
const {
289 TraversalKindScope RAII(Finder->getASTContext(),
290 Implementation->TraversalKind());
292 if (Finder->isTraversalIgnoringImplicitNodes() &&
293 Finder->IsMatchingInASTNodeNotSpelledInSource())
296 if (!Finder->isTraversalIgnoringImplicitNodes() &&
297 Finder->IsMatchingInASTNodeNotAsIs())
301 Finder->getASTContext().getParentMapContext().traverseIgnored(DynNode);
303 if (RestrictKind.isBaseOf(N.getNodeKind()) &&
304 Implementation->dynMatches(N, Finder, Builder)) {
310 Builder->removeBindings([](
const BoundNodesMap &) {
return true; });
314 bool DynTypedMatcher::matchesNoKindCheck(
const DynTypedNode &DynNode,
315 ASTMatchFinder *Finder,
316 BoundNodesTreeBuilder *Builder)
const {
317 TraversalKindScope raii(Finder->getASTContext(),
318 Implementation->TraversalKind());
320 if (Finder->isTraversalIgnoringImplicitNodes() &&
321 Finder->IsMatchingInASTNodeNotSpelledInSource())
324 if (!Finder->isTraversalIgnoringImplicitNodes() &&
325 Finder->IsMatchingInASTNodeNotAsIs())
329 Finder->getASTContext().getParentMapContext().traverseIgnored(DynNode);
331 assert(RestrictKind.isBaseOf(N.getNodeKind()));
332 if (Implementation->dynMatches(N, Finder, Builder)) {
338 Builder->removeBindings([](
const BoundNodesMap &) {
return true; });
343 if (!AllowBind)
return llvm::None;
345 Result.Implementation =
346 new IdDynMatcher(ID, std::move(Result.Implementation));
347 return std::move(Result);
350 bool DynTypedMatcher::canConvertTo(ASTNodeKind To)
const {
351 const auto From = getSupportedKind();
352 auto QualKind = ASTNodeKind::getFromNodeKind<QualType>();
353 auto TypeKind = ASTNodeKind::getFromNodeKind<Type>();
356 if (From.isSame(TypeKind) && To.isSame(QualKind))
return true;
358 return From.isBaseOf(To);
361 void BoundNodesTreeBuilder::addMatch(
const BoundNodesTreeBuilder &Other) {
362 Bindings.append(Other.Bindings.begin(), Other.Bindings.end());
366 ASTMatchFinder *Finder,
367 BoundNodesTreeBuilder *Builder,
369 if (InnerMatchers.size() != 1)
382 BoundNodesTreeBuilder Discard(*Builder);
383 return !InnerMatchers[0].matches(DynNode, Finder, &Discard);
387 ASTMatchFinder *Finder,
388 BoundNodesTreeBuilder *Builder,
393 return llvm::all_of(InnerMatchers, [&](
const DynTypedMatcher &InnerMatcher) {
394 return InnerMatcher.matchesNoKindCheck(DynNode, Finder, Builder);
399 ASTMatchFinder *Finder,
400 BoundNodesTreeBuilder *Builder,
402 BoundNodesTreeBuilder Result;
403 bool Matched =
false;
404 for (
const DynTypedMatcher &InnerMatcher : InnerMatchers) {
405 BoundNodesTreeBuilder BuilderInner(*Builder);
406 if (InnerMatcher.matches(DynNode, Finder, &BuilderInner)) {
408 Result.addMatch(BuilderInner);
411 *Builder = std::move(Result);
416 ASTMatchFinder *Finder,
417 BoundNodesTreeBuilder *Builder,
419 for (
const DynTypedMatcher &InnerMatcher : InnerMatchers) {
420 BoundNodesTreeBuilder Result = *Builder;
421 if (InnerMatcher.matches(DynNode, Finder, &Result)) {
422 *Builder = std::move(Result);
431 BoundNodesTreeBuilder *Builder,
433 if (InnerMatchers.size() != 1)
436 BoundNodesTreeBuilder Result(*Builder);
437 if (InnerMatchers[0].
matches(DynNode, Finder, &Result))
438 *Builder = std::move(Result);
444 std::vector<std::string> Names;
445 Names.reserve(NameRefs.size());
446 for (
auto *Name : NameRefs)
447 Names.emplace_back(*Name);
452 return internal::Matcher<NamedDecl>(
465 HasOverloadOpNameMatcher
470 HasNameMatcher::HasNameMatcher(std::vector<std::string> N)
471 : UseUnqualifiedMatch(
472 llvm::all_of(N, [](StringRef Name) {
return !Name.contains(
"::"); })),
473 Names(std::move(N)) {
475 for (StringRef Name : Names)
476 assert(!Name.empty());
481 StringRef Name = FullName;
482 if (!Name.endswith(Suffix))
484 Name = Name.drop_back(Suffix.size());
486 if (!Name.endswith(
"::"))
488 Name = Name.drop_back(2);
497 if (
Node.getIdentifier())
498 return Node.getName();
500 if (
Node.getDeclName()) {
503 llvm::raw_svector_ostream OS(Scratch);
508 return "(anonymous)";
513 if (
Node.getIdentifier()) {
514 return Node.getName();
517 return (
"(anonymous " +
Node.getKindName() +
")").toStringRef(Scratch);
522 return Node.isAnonymousNamespace() ?
"(anonymous namespace)" :
Node.getName();
530 Patterns.reserve(Names.size());
531 for (StringRef Name : Names)
532 Patterns.push_back({Name, Name.startswith(
"::")});
539 for (
size_t I = 0; I < Patterns.size();) {
545 Patterns.erase(Patterns.begin() + I);
548 return !Patterns.empty();
554 bool foundMatch(
bool AllowFullyQualified)
const {
555 return llvm::any_of(Patterns, [&](
const Pattern &Pattern) {
556 return Pattern.P.empty() &&
557 (AllowFullyQualified || !Pattern.IsFullyQualified);
572 bool HasNameMatcher::matchesNodeUnqualified(
const NamedDecl &
Node)
const {
573 assert(UseUnqualifiedMatch);
576 return llvm::any_of(Names, [&](StringRef Name) {
581 bool HasNameMatcher::matchesNodeFullFast(
const NamedDecl &
Node)
const {
582 PatternSet Patterns(Names);
599 const DeclContext *Ctx =
Node.getDeclContext();
601 if (Ctx->isFunctionOrMethod())
602 return Patterns.foundMatch(
false);
604 for (; Ctx; Ctx = Ctx->getParent()) {
607 if (isa<LinkageSpecDecl>(Ctx))
609 if (!isa<NamedDecl>(Ctx))
611 if (Patterns.foundMatch(
false))
614 if (
const auto *ND = dyn_cast<NamespaceDecl>(Ctx)) {
616 if (Patterns.consumeNameSuffix(
getNodeName(*ND, Scratch),
617 ND->isAnonymousNamespace() ||
622 if (
const auto *RD = dyn_cast<RecordDecl>(Ctx)) {
623 if (!isa<ClassTemplateSpecializationDecl>(Ctx)) {
624 if (Patterns.consumeNameSuffix(
getNodeName(*RD, Scratch),
634 return matchesNodeFullSlow(
Node);
637 return Patterns.foundMatch(
true);
640 bool HasNameMatcher::matchesNodeFullSlow(
const NamedDecl &
Node)
const {
641 const bool SkipUnwrittenCases[] = {
false,
true};
642 for (
bool SkipUnwritten : SkipUnwrittenCases) {
644 llvm::raw_svector_ostream
OS(NodeName);
646 PrintingPolicy Policy =
Node.getASTContext().getPrintingPolicy();
647 Policy.SuppressUnwrittenScope = SkipUnwritten;
648 Policy.SuppressInlineNamespace = SkipUnwritten;
649 Node.printQualifiedName(OS, Policy);
651 const StringRef FullName =
OS.str();
653 for (
const StringRef Pattern : Names) {
654 if (Pattern.startswith(
"::")) {
655 if (FullName == Pattern)
657 }
else if (FullName.endswith(Pattern) &&
658 FullName.drop_back(Pattern.size()).endswith(
"::")) {
667 bool HasNameMatcher::matchesNode(
const NamedDecl &
Node)
const {
668 assert(matchesNodeFullFast(
Node) == matchesNodeFullSlow(
Node));
669 if (UseUnqualifiedMatch) {
670 assert(matchesNodeUnqualified(
Node) == matchesNodeFullFast(
Node));
671 return matchesNodeUnqualified(
Node);
673 return matchesNodeFullFast(
Node);
680 bool Invalid =
false;
685 return !Invalid &&
Text == TokenText;
691 auto &
SM = Context.getSourceManager();
692 const LangOptions &LangOpts = Context.getLangOpts();
695 SM.getSLocEntry(
SM.getFileID(Loc)).getExpansion();
710 llvm::Regex::RegexFlags Flags,
712 assert(!Regex.empty() &&
"Empty regex string");
713 auto SharedRegex = std::make_shared<llvm::Regex>(Regex, Flags);
715 if (!SharedRegex->isValid(
Error)) {
716 llvm::WithColor::error()
718 llvm::WithColor::note() <<
" input was '" << Regex <<
"'\n";
724 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAutoreleasePoolStmt>
726 const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl>
728 const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
typedefDecl;
729 const internal::VariadicDynCastAllOfMatcher<Decl, TypedefNameDecl>
731 const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasDecl>
typeAliasDecl;
732 const internal::VariadicDynCastAllOfMatcher<Decl, TypeAliasTemplateDecl>
734 const internal::VariadicAllOfMatcher<Decl>
decl;
736 const internal::VariadicDynCastAllOfMatcher<Decl, BindingDecl>
bindingDecl;
737 const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl>
739 const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl>
namedDecl;
740 const internal::VariadicDynCastAllOfMatcher<Decl, LabelDecl>
labelDecl;
741 const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl>
namespaceDecl;
742 const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceAliasDecl>
744 const internal::VariadicDynCastAllOfMatcher<Decl, RecordDecl>
recordDecl;
745 const internal::VariadicDynCastAllOfMatcher<Decl, CXXRecordDecl>
cxxRecordDecl;
746 const internal::VariadicDynCastAllOfMatcher<Decl, ClassTemplateDecl>
748 const internal::VariadicDynCastAllOfMatcher<
Decl,
751 const internal::VariadicDynCastAllOfMatcher<
754 const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl>
756 const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl>
parmVarDecl;
757 const internal::VariadicDynCastAllOfMatcher<Decl, AccessSpecDecl>
764 const internal::VariadicDynCastAllOfMatcher<Decl, NonTypeTemplateParmDecl>
766 const internal::VariadicDynCastAllOfMatcher<Decl, TemplateTypeParmDecl>
768 const internal::VariadicDynCastAllOfMatcher<Decl, TemplateTemplateParmDecl>
772 const internal::VariadicAllOfMatcher<QualType>
qualType;
773 const internal::VariadicAllOfMatcher<Type>
type;
774 const internal::VariadicAllOfMatcher<TypeLoc>
typeLoc;
776 const internal::VariadicDynCastAllOfMatcher<TypeLoc, QualifiedTypeLoc>
778 const internal::VariadicDynCastAllOfMatcher<TypeLoc, PointerTypeLoc>
780 const internal::VariadicDynCastAllOfMatcher<TypeLoc, ReferenceTypeLoc>
782 const internal::VariadicDynCastAllOfMatcher<
TypeLoc,
785 const internal::VariadicDynCastAllOfMatcher<TypeLoc, ElaboratedTypeLoc>
788 const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryExprOrTypeTraitExpr>
790 const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl>
valueDecl;
791 const internal::VariadicDynCastAllOfMatcher<Decl, CXXConstructorDecl>
793 const internal::VariadicDynCastAllOfMatcher<Decl, CXXDestructorDecl>
795 const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl>
enumDecl;
796 const internal::VariadicDynCastAllOfMatcher<Decl, EnumConstantDecl>
798 const internal::VariadicDynCastAllOfMatcher<Decl, TagDecl>
tagDecl;
799 const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl>
cxxMethodDecl;
800 const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
802 const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl>
varDecl;
803 const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl>
fieldDecl;
804 const internal::VariadicDynCastAllOfMatcher<Decl, IndirectFieldDecl>
806 const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl>
functionDecl;
807 const internal::VariadicDynCastAllOfMatcher<Decl, FunctionTemplateDecl>
809 const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl>
friendDecl;
810 const internal::VariadicAllOfMatcher<Stmt>
stmt;
811 const internal::VariadicDynCastAllOfMatcher<Stmt, DeclStmt>
declStmt;
812 const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr>
memberExpr;
813 const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedMemberExpr>
815 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDependentScopeMemberExpr>
817 const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr>
callExpr;
818 const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr>
lambdaExpr;
819 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXMemberCallExpr>
821 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCMessageExpr>
823 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCInterfaceDecl>
825 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCImplementationDecl>
827 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCProtocolDecl>
829 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryDecl>
831 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCCategoryImplDecl>
833 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCMethodDecl>
835 const internal::VariadicDynCastAllOfMatcher<Decl, BlockDecl>
837 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCIvarDecl>
objcIvarDecl;
838 const internal::VariadicDynCastAllOfMatcher<Decl, ObjCPropertyDecl>
840 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtThrowStmt>
842 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtTryStmt>
objcTryStmt;
843 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtCatchStmt>
845 const internal::VariadicDynCastAllOfMatcher<Stmt, ObjCAtFinallyStmt>
847 const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups>
849 const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr>
initListExpr;
850 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStdInitializerListExpr>
852 const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitValueInitExpr>
854 const internal::VariadicDynCastAllOfMatcher<Stmt, ParenListExpr>
parenListExpr;
855 const internal::VariadicDynCastAllOfMatcher<Stmt, SubstNonTypeTemplateParmExpr>
857 const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl>
usingDecl;
858 const internal::VariadicDynCastAllOfMatcher<Decl, UsingEnumDecl>
usingEnumDecl;
859 const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl>
861 const internal::VariadicDynCastAllOfMatcher<Stmt, UnresolvedLookupExpr>
863 const internal::VariadicDynCastAllOfMatcher<Decl, UnresolvedUsingValueDecl>
865 const internal::VariadicDynCastAllOfMatcher<Decl, UnresolvedUsingTypenameDecl>
867 const internal::VariadicDynCastAllOfMatcher<Stmt, ConstantExpr>
constantExpr;
868 const internal::VariadicDynCastAllOfMatcher<Stmt, ParenExpr>
parenExpr;
869 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstructExpr>
871 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXUnresolvedConstructExpr>
873 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr>
cxxThisExpr;
874 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBindTemporaryExpr>
876 const internal::VariadicDynCastAllOfMatcher<Stmt, MaterializeTemporaryExpr>
878 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr>
cxxNewExpr;
879 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr>
cxxDeleteExpr;
880 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNoexceptExpr>
882 const internal::VariadicDynCastAllOfMatcher<Stmt, ArraySubscriptExpr>
884 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDefaultArgExpr>
886 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXOperatorCallExpr>
888 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXRewrittenBinaryOperator>
890 const internal::VariadicDynCastAllOfMatcher<Stmt, Expr>
expr;
891 const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr>
declRefExpr;
893 const internal::VariadicDynCastAllOfMatcher<Stmt, BlockExpr>
blockExpr;
894 const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt>
ifStmt;
895 const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt>
forStmt;
896 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt>
898 const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt>
whileStmt;
899 const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt>
doStmt;
900 const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt>
breakStmt;
901 const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt>
continueStmt;
902 const internal::VariadicDynCastAllOfMatcher<Stmt, CoreturnStmt>
coreturnStmt;
903 const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt>
returnStmt;
904 const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt>
gotoStmt;
905 const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt>
labelStmt;
906 const internal::VariadicDynCastAllOfMatcher<Stmt, AddrLabelExpr>
addrLabelExpr;
907 const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt>
switchStmt;
908 const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase>
switchCase;
909 const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt>
caseStmt;
910 const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt>
defaultStmt;
911 const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt>
compoundStmt;
912 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt>
cxxCatchStmt;
913 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt>
cxxTryStmt;
914 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr>
cxxThrowExpr;
915 const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt>
nullStmt;
916 const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt>
asmStmt;
917 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXBoolLiteralExpr>
919 const internal::VariadicDynCastAllOfMatcher<Stmt, StringLiteral>
stringLiteral;
920 const internal::VariadicDynCastAllOfMatcher<Stmt, CharacterLiteral>
922 const internal::VariadicDynCastAllOfMatcher<Stmt, IntegerLiteral>
924 const internal::VariadicDynCastAllOfMatcher<Stmt, FloatingLiteral>
floatLiteral;
926 const internal::VariadicDynCastAllOfMatcher<Stmt, FixedPointLiteral>
928 const internal::VariadicDynCastAllOfMatcher<Stmt, UserDefinedLiteral>
930 const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundLiteralExpr>
932 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNullPtrLiteralExpr>
934 const internal::VariadicDynCastAllOfMatcher<Stmt, ChooseExpr>
chooseExpr;
935 const internal::VariadicDynCastAllOfMatcher<Stmt, CoawaitExpr>
937 const internal::VariadicDynCastAllOfMatcher<Stmt, DependentCoawaitExpr>
939 const internal::VariadicDynCastAllOfMatcher<Stmt, CoyieldExpr>
941 const internal::VariadicDynCastAllOfMatcher<Stmt, GNUNullExpr>
gnuNullExpr;
942 const internal::VariadicDynCastAllOfMatcher<Stmt, GenericSelectionExpr>
944 const internal::VariadicDynCastAllOfMatcher<Stmt, AtomicExpr>
atomicExpr;
945 const internal::VariadicDynCastAllOfMatcher<Stmt, StmtExpr>
stmtExpr;
946 const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryOperator>
951 const internal::MapAnyOfMatcher<CallExpr, CXXConstructExpr>
invocation;
952 const internal::VariadicDynCastAllOfMatcher<Stmt, UnaryOperator>
unaryOperator;
953 const internal::VariadicDynCastAllOfMatcher<Stmt, ConditionalOperator>
955 const internal::VariadicDynCastAllOfMatcher<Stmt, BinaryConditionalOperator>
957 const internal::VariadicDynCastAllOfMatcher<Stmt, OpaqueValueExpr>
959 const internal::VariadicDynCastAllOfMatcher<Decl, StaticAssertDecl>
961 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXReinterpretCastExpr>
963 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXStaticCastExpr>
965 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDynamicCastExpr>
967 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXConstCastExpr>
969 const internal::VariadicDynCastAllOfMatcher<Stmt, CStyleCastExpr>
971 const internal::VariadicDynCastAllOfMatcher<Stmt, ExplicitCastExpr>
973 const internal::VariadicDynCastAllOfMatcher<Stmt, ImplicitCastExpr>
975 const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr>
castExpr;
976 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXFunctionalCastExpr>
978 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTemporaryObjectExpr>
980 const internal::VariadicDynCastAllOfMatcher<Stmt, PredefinedExpr>
982 const internal::VariadicDynCastAllOfMatcher<Stmt, DesignatedInitExpr>
984 const internal::VariadicOperatorMatcherFunc<
986 eachOf = {internal::DynTypedMatcher::VO_EachOf};
987 const internal::VariadicOperatorMatcherFunc<
989 anyOf = {internal::DynTypedMatcher::VO_AnyOf};
990 const internal::VariadicOperatorMatcherFunc<
992 allOf = {internal::DynTypedMatcher::VO_AllOf};
993 const internal::VariadicOperatorMatcherFunc<1, 1>
optionally = {
994 internal::DynTypedMatcher::VO_Optionally};
995 const internal::VariadicFunction<internal::Matcher<NamedDecl>, StringRef,
999 const internal::VariadicFunction<internal::HasOpNameMatcher, StringRef,
1002 const internal::VariadicFunction<internal::HasOverloadOpNameMatcher, StringRef,
1005 const internal::VariadicFunction<internal::Matcher<ObjCMessageExpr>, StringRef,
1008 const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>
has = {};
1009 const internal::ArgumentAdaptingMatcherFunc<internal::HasDescendantMatcher>
1011 const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher>
forEach =
1013 const internal::ArgumentAdaptingMatcherFunc<internal::ForEachDescendantMatcher>
1015 const internal::ArgumentAdaptingMatcherFunc<
1016 internal::HasParentMatcher,
1017 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>,
1018 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>>
1020 const internal::ArgumentAdaptingMatcherFunc<
1021 internal::HasAncestorMatcher,
1022 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>,
1023 internal::TypeList<Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr>>
1025 const internal::VariadicOperatorMatcherFunc<1, 1>
unless = {
1026 internal::DynTypedMatcher::VO_UnaryNot};
1028 const internal::VariadicAllOfMatcher<NestedNameSpecifierLoc>
1030 const internal::VariadicAllOfMatcher<Attr>
attr;
1031 const internal::VariadicDynCastAllOfMatcher<Stmt, CUDAKernelCallExpr>
1077 const internal::VariadicDynCastAllOfMatcher<Stmt, OMPExecutableDirective>
1079 const internal::VariadicDynCastAllOfMatcher<OMPClause, OMPDefaultClause>
1081 const internal::VariadicDynCastAllOfMatcher<Decl, CXXDeductionGuideDecl>
const internal::ArgumentAdaptingMatcherFunc< internal::HasParentMatcher, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr >, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr > > hasParent
Matches AST nodes that have a parent that matches the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumConstantDecl > enumConstantDecl
Matches enum constants.
static bool consumeNameSuffix(StringRef &FullName, StringRef Suffix)
const internal::VariadicDynCastAllOfMatcher< Decl, DecompositionDecl > decompositionDecl
Matches decomposition-declarations.
const AstTypeMatcher< SubstTemplateTypeParmType > substTemplateTypeParmType
Matches types that represent the result of substituting a type for a template type parameter.
const internal::VariadicDynCastAllOfMatcher< Stmt, StmtExpr > stmtExpr
Matches statement expression (GNU extension).
TraversalKind
Defines how we descend a level in the AST when we pass through expressions.
const internal::MapAnyOfMatcher< CallExpr, CXXConstructExpr > invocation
Matches function calls and constructor calls.
llvm::Optional< SourceLocation > getExpansionLocOfMacro(StringRef MacroName, SourceLocation Loc, const ASTContext &Context)
__DEVICE__ int max(int __a, int __b)
const internal::VariadicDynCastAllOfMatcher< Decl, TemplateTemplateParmDecl > templateTemplateParmDecl
Matches template template parameter declarations.
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.
YAML serialization mapping.
const internal::VariadicDynCastAllOfMatcher< Stmt, ImaginaryLiteral > imaginaryLiteral
Matches imaginary literals, which are based on integer and floating point literals e....
const internal::VariadicDynCastAllOfMatcher< Stmt, UserDefinedLiteral > userDefinedLiteral
Matches user defined literal operator call.
const internal::VariadicDynCastAllOfMatcher< Stmt, InitListExpr > initListExpr
Matches init list expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, BlockExpr > blockExpr
Matches a reference to a block.
const internal::VariadicAllOfMatcher< Stmt > stmt
Matches statements.
const internal::VariadicAllOfMatcher< CXXBaseSpecifier > cxxBaseSpecifier
Matches class bases.
const AstTypeMatcher< LValueReferenceType > lValueReferenceType
Matches lvalue reference types.
const internal::VariadicDynCastAllOfMatcher< Stmt, StringLiteral > stringLiteral
Matches string literals (also matches wide string literals).
bool isMacroArgExpansion() const
static unsigned getSpelling(const Token &Tok, const char *&Buffer, const SourceManager &SourceMgr, const LangOptions &LangOpts, bool *Invalid=nullptr)
getSpelling - This method is used to get the spelling of a token into a preallocated buffer,...
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> anyOf
Matches if any of the given matchers matches.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXFunctionalCastExpr > cxxFunctionalCastExpr
Matches functional cast expressions.
Encodes a location in the source.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThrowExpr > cxxThrowExpr
Matches throw expressions.
const internal::VariadicAllOfMatcher< NestedNameSpecifierLoc > nestedNameSpecifierLoc
Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
This represents a decl that may have a name.
const internal::VariadicDynCastAllOfMatcher< Decl, DeclaratorDecl > declaratorDecl
Matches declarator declarations (field, variable, function and non-type template parameter declaratio...
const internal::VariadicDynCastAllOfMatcher< Stmt, GenericSelectionExpr > genericSelectionExpr
Matches C11 _Generic expression.
const AstTypeMatcher< UnaryTransformType > unaryTransformType
Matches types nodes representing unary type transformations.
const internal::VariadicAllOfMatcher< LambdaCapture > lambdaCapture
Matches lambda captures.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
const internal::VariadicAllOfMatcher< CXXCtorInitializer > cxxCtorInitializer
Matches constructor initializers.
const internal::VariadicDynCastAllOfMatcher< Stmt, MemberExpr > memberExpr
Matches member expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtThrowStmt > objcThrowStmt
Matches Objective-C @throw statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, DesignatedInitExpr > designatedInitExpr
Matches C99 designated initializer expressions [C99 6.7.8].
const internal::VariadicFunction< internal::PolymorphicMatcher< internal::HasOverloadedOperatorNameMatcher, AST_POLYMORPHIC_SUPPORTED_TYPES(CXXOperatorCallExpr, FunctionDecl), std::vector< std::string > >, StringRef, internal::hasAnyOverloadedOperatorNameFunc > hasAnyOverloadedOperatorName
Matches overloaded operator names.
static bool isTokenAtLoc(const SourceManager &SM, const LangOptions &LangOpts, StringRef Text, SourceLocation Loc)
const internal::VariadicOperatorMatcherFunc< 2, std::numeric_limits< unsigned >::max()> allOf
Matches if all given matchers match.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingTypenameDecl > unresolvedUsingTypenameDecl
Matches unresolved using value declarations that involve the typename.
internal::VariadicDynCastAllOfMatcher< Type, NodeType > AstTypeMatcher
const internal::VariadicDynCastAllOfMatcher< Decl, TemplateTypeParmDecl > templateTypeParmDecl
Matches template type parameter declarations.
const AstTypeMatcher< DecltypeType > decltypeType
Matches types nodes representing C++11 decltype(<expr>) types.
const internal::VariadicDynCastAllOfMatcher< Stmt, ExplicitCastExpr > explicitCastExpr
Matches explicit cast expressions.
const AstTypeMatcher< TagType > tagType
Matches tag types (record and enum types).
HasOverloadOpNameMatcher hasAnyOverloadedOperatorNameFunc(ArrayRef< const StringRef * > NameRefs)
const internal::VariadicDynCastAllOfMatcher< Stmt, ReturnStmt > returnStmt
Matches return statements.
const AstTypeMatcher< FunctionProtoType > functionProtoType
Matches FunctionProtoType nodes.
Matcher< NamedDecl > hasAnyNameFunc(ArrayRef< const StringRef * > NameRefs)
static bool anyOfVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConstructorDecl > cxxConstructorDecl
Matches C++ constructor declarations.
const AstTypeMatcher< DeducedTemplateSpecializationType > deducedTemplateSpecializationType
Matches C++17 deduced template specialization types, e.g.
const internal::VariadicDynCastAllOfMatcher< OMPClause, OMPDefaultClause > ompDefaultClause
Matches OpenMP default clause.
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitValueInitExpr > implicitValueInitExpr
Matches implicit initializers of init list expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ConstantExpr > constantExpr
Matches a constant expression wrapper.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCInterfaceDecl > objcInterfaceDecl
Matches Objective-C interface declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTryStmt > cxxTryStmt
Matches try statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ValueDecl > valueDecl
Matches any value declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, MaterializeTemporaryExpr > materializeTemporaryExpr
Matches nodes where temporaries are materialized.
const internal::VariadicDynCastAllOfMatcher< Decl, BlockDecl > blockDecl
Matches block declarations.
const AstTypeMatcher< RValueReferenceType > rValueReferenceType
Matches rvalue reference types.
const internal::VariadicDynCastAllOfMatcher< Stmt, OpaqueValueExpr > opaqueValueExpr
Matches opaque value expressions.
This class handles loading and caching of source files into memory.
const internal::VariadicDynCastAllOfMatcher< Stmt, FloatingLiteral > floatLiteral
Matches float literals of all sizes / encodings, e.g.
const internal::VariadicDynCastAllOfMatcher< Stmt, LabelStmt > labelStmt
Matches label statements.
DynTypedMatcher::MatcherIDType MatcherID
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDeleteExpr > cxxDeleteExpr
Matches delete expressions.
const internal::VariadicAllOfMatcher< TemplateName > templateName
Matches template name.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachDescendantMatcher > forEachDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBoolLiteralExpr > cxxBoolLiteral
Matches bool literals.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXForRangeStmt > cxxForRangeStmt
Matches range-based for statements.
const internal::VariadicAllOfMatcher< TypeLoc > typeLoc
Matches TypeLocs in the clang AST.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachMatcher > forEach
Matches AST nodes that have child AST nodes that match the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXOperatorCallExpr > cxxOperatorCallExpr
Matches overloaded operator calls.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCPropertyDecl > objcPropertyDecl
Matches Objective-C property declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingValueDecl > unresolvedUsingValueDecl
Matches unresolved using value declarations.
const AstTypeMatcher< AtomicType > atomicType
Matches atomic types.
const internal::VariadicDynCastAllOfMatcher< Stmt, Expr > expr
Matches expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDependentScopeMemberExpr > cxxDependentScopeMemberExpr
Matches member expressions where the actual member referenced could not be resolved because the base ...
const internal::VariadicAllOfMatcher< Attr > attr
Matches attributes.
const internal::VariadicAllOfMatcher< TemplateArgument > templateArgument
Matches template arguments.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCIvarRefExpr > objcIvarRefExpr
Matches a reference to an ObjCIvar.
const internal::VariadicDynCastAllOfMatcher< Decl, TagDecl > tagDecl
Matches tag declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCCategoryDecl > objcCategoryDecl
Matches Objective-C category declarations.
A rewritten comparison expression that was originally written using operator syntax.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDecl > usingDecl
Matches using declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, SubstNonTypeTemplateParmExpr > substNonTypeTemplateParmExpr
Matches substitutions of non-type template parameters.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtFinallyStmt > objcFinallyStmt
Matches Objective-C @finally statements.
static bool eachOfVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
A builtin binary operation expression such as "x + y" or "x <= y".
const AstTypeMatcher< FunctionType > functionType
Matches FunctionType nodes.
Each ExpansionInfo encodes the expansion location - where the token was ultimately expanded,...
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXUnresolvedConstructExpr > cxxUnresolvedConstructExpr
Matches unresolved constructor call expressions.
const AstTypeMatcher< BuiltinType > builtinType
Matches builtin Types.
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceAliasDecl > namespaceAliasDecl
Matches a declaration of a namespace alias.
const internal::VariadicDynCastAllOfMatcher< Decl, BindingDecl > bindingDecl
Matches binding declarations Example matches foo and bar (matcher = bindingDecl()
const internal::VariadicDynCastAllOfMatcher< Decl, EnumDecl > enumDecl
Matches enum declarations.
std::shared_ptr< llvm::Regex > createAndVerifyRegex(StringRef Regex, llvm::Regex::RegexFlags Flags, StringRef MatcherID)
const internal::VariadicDynCastAllOfMatcher< TypeLoc, ReferenceTypeLoc > referenceTypeLoc
Matches reference TypeLocs.
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCProtocolDecl > objcProtocolDecl
Matches Objective-C protocol declarations.
Represents an array type, per C99 6.7.5.2 - Array Declarators.
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchStmt > switchStmt
Matches switch statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXReinterpretCastExpr > cxxReinterpretCastExpr
Matches a reinterpret_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThisExpr > cxxThisExpr
Matches implicit and explicit this expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, BreakStmt > breakStmt
Matches break statements.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXMethodDecl > cxxMethodDecl
Matches method declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryExprOrTypeTraitExpr > unaryExprOrTypeTraitExpr
Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNullPtrLiteralExpr > cxxNullPtrLiteralExpr
Matches nullptr literal.
static bool notUnaryOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStdInitializerListExpr > cxxStdInitializerListExpr
Matches C++ initializer list expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDirectiveDecl > usingDirectiveDecl
Matches using namespace declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ChooseExpr > chooseExpr
Matches GNU __builtin_choose_expr.
const internal::VariadicDynCastAllOfMatcher< Stmt, WhileStmt > whileStmt
Matches while statements.
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< TypedefType > typedefType
Matches typedef types.
const internal::VariadicDynCastAllOfMatcher< Decl, LinkageSpecDecl > linkageSpecDecl
Matches a declaration of a linkage specification.
const internal::VariadicAllOfMatcher< NestedNameSpecifier > nestedNameSpecifier
Matches nested name specifiers.
const internal::MapAnyOfMatcher< BinaryOperator, CXXOperatorCallExpr, CXXRewrittenBinaryOperator > binaryOperation
Matches nodes which can be used with binary operators.
SourceLocation getSpellingLoc() const
const internal::VariadicDynCastAllOfMatcher< Stmt, AsmStmt > asmStmt
Matches asm statements.
DynTypedNode DynTypedNode
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstCastExpr > cxxConstCastExpr
Matches a const_cast expression.
const internal::VariadicDynCastAllOfMatcher< Decl, NonTypeTemplateParmDecl > nonTypeTemplateParmDecl
Matches non-type template parameter declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, AtomicExpr > atomicExpr
Matches atomic builtins.
const internal::VariadicDynCastAllOfMatcher< TypeLoc, PointerTypeLoc > pointerTypeLoc
Matches pointer TypeLocs.
const internal::VariadicDynCastAllOfMatcher< Stmt, CoyieldExpr > coyieldExpr
Matches co_yield expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXMemberCallExpr > cxxMemberCallExpr
Matches member call expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, IfStmt > ifStmt
Matches if statements.
const AstTypeMatcher< MemberPointerType > memberPointerType
Matches member pointer types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXRewrittenBinaryOperator > cxxRewrittenBinaryOperator
Matches rewritten binary operators.
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryOperator > binaryOperator
Matches binary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceDecl > namespaceDecl
Matches a declaration of a namespace.
const internal::VariadicDynCastAllOfMatcher< Decl, LabelDecl > labelDecl
Matches a declaration of label.
const internal::VariadicDynCastAllOfMatcher< Stmt, ParenListExpr > parenListExpr
Matches paren list expressions.
const internal::VariadicDynCastAllOfMatcher< TypeLoc, QualifiedTypeLoc > qualifiedTypeLoc
Matches QualifiedTypeLocs in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Stmt, NullStmt > nullStmt
Matches null statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAutoreleasePoolStmt > autoreleasePoolStmt
Matches an Objective-C autorelease pool statement.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtCatchStmt > objcCatchStmt
Matches Objective-C @catch statements.
const internal::VariadicDynCastAllOfMatcher< Decl, UsingEnumDecl > usingEnumDecl
Matches using-enum declarations.
const internal::VariadicOperatorMatcherFunc< 1, 1 > unless
Matches if the provided matcher does not match.
BoundNodesTreeBuilder BoundNodes
const internal::VariadicDynCastAllOfMatcher< Stmt, DoStmt > doStmt
Matches do statements.
const AstTypeMatcher< ArrayType > arrayType
Matches all kinds of arrays.
An expression that sends a message to the given Objective-C object or class.
static bool allOfVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCImplementationDecl > objcImplementationDecl
Matches Objective-C implementation declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionTemplateDecl > functionTemplateDecl
Matches C++ function template declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefNameDecl > typedefNameDecl
Matches typedef name declarations.
#define AST_POLYMORPHIC_SUPPORTED_TYPES(...)
Construct a type-list to be passed to the AST_POLYMORPHIC_MATCHER* macros.
const internal::VariadicDynCastAllOfMatcher< Stmt, ParenExpr > parenExpr
Matches parentheses used in expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CStyleCastExpr > cStyleCastExpr
Matches a C-style cast expression.
const internal::ArgumentAdaptingMatcherFunc< internal::HasAncestorMatcher, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr >, internal::TypeList< Decl, NestedNameSpecifierLoc, Stmt, TypeLoc, Attr > > hasAncestor
Matches AST nodes that have an ancestor that matches the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, GNUNullExpr > gnuNullExpr
Matches GNU __null expression.
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, TranslationUnitDecl > translationUnitDecl
Matches the top declaration context.
Represents a C++ struct/union/class.
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 internal::VariadicAllOfMatcher< Decl > decl
Matches declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryOperator > unaryOperator
Matches unary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefDecl > typedefDecl
Matches typedef declarations.
const AstTypeMatcher< VariableArrayType > variableArrayType
Matches C arrays with a specified size that is not an integer-constant-expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCAtTryStmt > objcTryStmt
Matches Objective-C @try statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundStmt > compoundStmt
Matches compound statements.
const internal::VariadicDynCastAllOfMatcher< Decl, FriendDecl > friendDecl
Matches friend declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, GotoStmt > gotoStmt
Matches goto statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCIvarDecl > objcIvarDecl
Matches Objective-C instance variable declarations.
const internal::VariadicDynCastAllOfMatcher< TypeLoc, TemplateSpecializationTypeLoc > templateSpecializationTypeLoc
Matches template specialization TypeLocs.
Complex values, per C99 6.2.5p11.
const internal::VariadicDynCastAllOfMatcher< Stmt, CastExpr > castExpr
Matches any cast nodes of Clang's AST.
const AstTypeMatcher< IncompleteArrayType > incompleteArrayType
Matches C arrays with unspecified size.
SourceLocation getExpansionLocStart() const
const internal::VariadicDynCastAllOfMatcher< Decl, TypeAliasDecl > typeAliasDecl
Matches type alias declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, PredefinedExpr > predefinedExpr
Matches predefined identifier expressions [C99 6.4.2.2].
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCCategoryImplDecl > objcCategoryImplDecl
Matches Objective-C category definitions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDynamicCastExpr > cxxDynamicCastExpr
Matches a dynamic_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundLiteralExpr > compoundLiteralExpr
Matches compound (i.e.
Decl - This represents one declaration (or definition), e.g.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCMessageExpr > objcMessageExpr
Matches ObjectiveC Message invocation expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, DependentCoawaitExpr > dependentCoawaitExpr
Matches co_await expressions where the type of the promise is dependent.
Base wrapper for a particular "section" of type source info.
const internal::VariadicDynCastAllOfMatcher< Decl, RecordDecl > recordDecl
Matches class, struct, and union declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStaticCastExpr > cxxStaticCastExpr
Matches a C++ static_cast expression.
const AstTypeMatcher< BlockPointerType > blockPointerType
Matches block pointer types, i.e.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXDestructorDecl > cxxDestructorDecl
Matches explicit C++ destructor declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXCatchStmt > cxxCatchStmt
Matches catch statements.
const AstTypeMatcher< ComplexType > complexType
Matches C99 complex types.
const internal::VariadicDynCastAllOfMatcher< Stmt, ArraySubscriptExpr > arraySubscriptExpr
Matches array subscript expressions.
@ TK_IgnoreUnlessSpelledInSource
Ignore AST nodes not written in the source.
const internal::VariadicDynCastAllOfMatcher< Stmt, CharacterLiteral > characterLiteral
Matches character literals (also matches wchar_t).
const internal::ArgumentAdaptingMatcherFunc< internal::HasDescendantMatcher > hasDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher.
static StringRef getNodeName(const NamespaceDecl &Node, llvm::SmallString< 128 > &Scratch)
static bool optionallyVariadicOperator(const DynTypedNode &DynNode, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder, ArrayRef< DynTypedMatcher > InnerMatchers)
const internal::VariadicDynCastAllOfMatcher< Stmt, CallExpr > callExpr
Matches call expressions.
const internal::VariadicDynCastAllOfMatcher< TypeLoc, ElaboratedTypeLoc > elaboratedTypeLoc
Matches C or C++ elaborated TypeLocs.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDefaultArgExpr > cxxDefaultArgExpr
Matches the value of a default argument at the call site.
const internal::VariadicDynCastAllOfMatcher< Stmt, AddrLabelExpr > addrLabelExpr
Matches address of label statements (GNU extension).
bool matches(const til::SExpr *E1, const til::SExpr *E2)
HasOpNameMatcher hasAnyOperatorNameFunc(ArrayRef< const StringRef * > NameRefs)
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
A pointer to member type per C++ 8.3.3 - Pointers to members.
bool matchesAnyBase(const CXXRecordDecl &Node, const Matcher< CXXBaseSpecifier > &BaseSpecMatcher, ASTMatchFinder *Finder, BoundNodesTreeBuilder *Builder)
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionDecl > functionDecl
Matches function declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, IndirectFieldDecl > indirectFieldDecl
Matches indirect field declarations.
Matcher< ObjCMessageExpr > hasAnySelectorFunc(ArrayRef< const StringRef * > NameRefs)
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclRefExpr > declRefExpr
Matches expressions that refer to declarations.
PointerType - C99 6.7.5.1 - Pointer Declarators.
const AstTypeMatcher< PointerType > pointerType
Matches pointer types, but does not match Objective-C object pointer types.
const AstTypeMatcher< RecordType > recordType
Matches record types (e.g.
const internal::VariadicFunction< internal::PolymorphicMatcher< internal::HasAnyOperatorNameMatcher, AST_POLYMORPHIC_SUPPORTED_TYPES(BinaryOperator, CXXOperatorCallExpr, CXXRewrittenBinaryOperator, UnaryOperator), std::vector< std::string > >, StringRef, internal::hasAnyOperatorNameFunc > hasAnyOperatorName
Matches operator expressions (binary or unary) that have any of the specified names.
const AstTypeMatcher< DecayedType > decayedType
Matches decayed type Example matches i[] in declaration of f.
const internal::VariadicOperatorMatcherFunc< 1, 1 > optionally
Matches any node regardless of the submatcher.
Represents a path from a specific derived class (which is not represented as part of the path) to a p...
#define AST_TYPELOC_TRAVERSE_MATCHER_DEF(MatcherName, ReturnTypesF)
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryConditionalOperator > binaryConditionalOperator
Matches binary conditional operator expressions (GNU extension).
const internal::VariadicDynCastAllOfMatcher< Stmt, FixedPointLiteral > fixedPointLiteral
Matches fixed point literals.
NodeKind
A kind of a syntax node, used for implementing casts.
const AstTypeMatcher< ReferenceType > referenceType
Matches both lvalue and rvalue reference types.
const internal::VariadicDynCastAllOfMatcher< Decl, TypeAliasTemplateDecl > typeAliasTemplateDecl
Matches type alias template declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateSpecializationDecl > classTemplateSpecializationDecl
Matches C++ class template specializations.
const internal::VariadicDynCastAllOfMatcher< Stmt, DefaultStmt > defaultStmt
Matches default statements inside switch statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNewExpr > cxxNewExpr
Matches new expressions.
const AstTypeMatcher< InjectedClassNameType > injectedClassNameType
Matches injected class name types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CaseStmt > caseStmt
Matches case statements inside switch statements.
const AstTypeMatcher< ElaboratedType > elaboratedType
Matches types specified with an elaborated type keyword or with a qualified name.
const internal::VariadicDynCastAllOfMatcher< Decl, ObjCMethodDecl > objcMethodDecl
Matches Objective-C method declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ForStmt > forStmt
Matches for statements.
const AstTypeMatcher< DependentSizedArrayType > dependentSizedArrayType
Matches C++ arrays whose size is a value-dependent expression.
Represents a base class of a C++ class.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplatePartialSpecializationDecl > classTemplatePartialSpecializationDecl
Matches C++ class template partial specializations.
const internal::VariadicDynCastAllOfMatcher< Decl, NamedDecl > namedDecl
Matches a declaration of anything that could have a name.
const internal::VariadicDynCastAllOfMatcher< Stmt, LambdaExpr > lambdaExpr
Matches lambda expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, AccessSpecDecl > accessSpecDecl
Matches C++ access specifier declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTemporaryObjectExpr > cxxTemporaryObjectExpr
Matches functional cast expressions having N != 1 arguments.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnresolvedMemberExpr > unresolvedMemberExpr
Matches unresolved member expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CoawaitExpr > coawaitExpr
Matches co_await expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, OMPExecutableDirective > ompExecutableDirective
Matches any #pragma omp executable directive.
BasePaths - Represents the set of paths from a derived class to one of its (direct or indirect) bases...
A dynamically typed AST node container.
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...
Base for LValueReferenceType and RValueReferenceType.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXRecordDecl > cxxRecordDecl
Matches C++ class declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CUDAKernelCallExpr > cudaKernelCallExpr
Matches CUDA kernel call expression.
const AstTypeMatcher< UsingType > usingType
Matches types specified through a using declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNoexceptExpr > cxxNoexceptExpr
Matches noexcept expressions.
static std::vector< std::string > vectorFromRefs(ArrayRef< const StringRef * > NameRefs)
const internal::VariadicDynCastAllOfMatcher< Decl, StaticAssertDecl > staticAssertDecl
Matches a C++ static_assert declaration.
static ASTNodeKind getMostDerivedType(ASTNodeKind Kind1, ASTNodeKind Kind2)
Return the most derived type between Kind1 and Kind2.
const internal::VariadicDynCastAllOfMatcher< Stmt, IntegerLiteral > integerLiteral
Matches integer literals of all sizes / encodings, e.g.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConversionDecl > cxxConversionDecl
Matches conversion operator declarations.
const AstTypeMatcher< EnumType > enumType
Matches enum types.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstructExpr > cxxConstructExpr
Matches constructor call expressions (including implicit ones).
const AstTypeMatcher< ObjCObjectPointerType > objcObjectPointerType
Matches an Objective-C object pointer type, which is different from a pointer type,...
const internal::VariadicAllOfMatcher< TemplateArgumentLoc > templateArgumentLoc
Matches template arguments (with location info).
const internal::VariadicDynCastAllOfMatcher< Decl, VarDecl > varDecl
Matches variable 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.
Represents a class template specialization, which refers to a class template with a given set of temp...
const AstTypeMatcher< TemplateTypeParmType > templateTypeParmType
Matches template type parameter types.
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitCastExpr > implicitCastExpr
Matches the implicit cast nodes of Clang's AST.
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclStmt > declStmt
Matches declaration statements.
Represent a C++ namespace.
Represents a struct/union/class.
A call to an overloaded operator written using operator syntax.
const internal::VariadicDynCastAllOfMatcher< Decl, FieldDecl > fieldDecl
Matches field declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateDecl > classTemplateDecl
Matches C++ class template declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ParmVarDecl > parmVarDecl
Matches parameter variable declarations.
const AstTypeMatcher< TemplateSpecializationType > templateSpecializationType
Matches template specialization types.
const internal::VariadicDynCastAllOfMatcher< Stmt, ConditionalOperator > conditionalOperator
Matches conditional operator expressions.
const AstTypeMatcher< ConstantArrayType > constantArrayType
Matches C arrays with a specified constant size.
const internal::VariadicDynCastAllOfMatcher< Stmt, ContinueStmt > continueStmt
Matches continue statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CoreturnStmt > coreturnStmt
Matches co_return statements.
@ OS
Indicates that the tracking object is a descendant of a referenced-counted OSObject,...
const internal::VariadicDynCastAllOfMatcher< Decl, CXXDeductionGuideDecl > cxxDeductionGuideDecl
Matches user-defined and implicitly generated deduction guide.
AST_MATCHER_P(FieldDecl, hasBitWidth, unsigned, Width)
Matches non-static data members that are bit-fields of the specified bit width.
const internal::VariadicAllOfMatcher< QualType > qualType
Matches QualTypes in the clang AST.
const AstTypeMatcher< ParenType > parenType
Matches ParenType nodes.