45 #ifndef LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H
46 #define LLVM_CLANG_ASTMATCHERS_ASTMATCHERS_H
54 #include "llvm/ADT/Twine.h"
55 #include "llvm/Support/Regex.h"
59 namespace ast_matchers {
76 return MyBoundNodes.getNodeAs<T>(
ID);
83 return getNodeAs<T>(
ID);
87 return getNodeAs<T>(
ID);
98 return MyBoundNodes.getMap();
103 BoundNodes(internal::BoundNodesMap &MyBoundNodes)
104 : MyBoundNodes(MyBoundNodes) {}
106 internal::BoundNodesMap MyBoundNodes;
114 template <
typename T>
115 internal::Matcher<T>
id(StringRef
ID,
117 return InnerMatcher.bind(ID);
145 inline internal::TrueMatcher
anything() {
return internal::TrueMatcher(); }
158 const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl>
169 const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl>
typedefDecl;
209 if (ExpansionLoc.isInvalid()) {
232 std::string, RegExp) {
235 if (ExpansionLoc.isInvalid()) {
245 llvm::Regex RE(RegExp);
246 return RE.match(Filename);
258 const internal::VariadicAllOfMatcher<Decl>
decl;
268 const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl>
282 const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl>
namedDecl;
293 const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl>
namespaceDecl;
302 const internal::VariadicDynCastAllOfMatcher<
312 const internal::VariadicDynCastAllOfMatcher<
326 const internal::VariadicDynCastAllOfMatcher<
339 const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl>
350 const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl>
parmVarDecl;
363 const internal::VariadicDynCastAllOfMatcher<
440 return Node.isImplicit();
456 hasAnyTemplateArgument,
461 internal::getTemplateSpecializationArgs(
Node);
559 unsigned, N, internal::Matcher<TemplateArgument>,
InnerMatcher) {
561 internal::getTemplateSpecializationArgs(
Node);
562 if (List.size() <= N)
577 templateArgumentCountIs,
581 return internal::getTemplateSpecializationArgs(
Node).size() == N;
687 std::string,
Value) {
690 return Node.getAsIntegral().toString(10) ==
Value;
700 const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl>
valueDecl;
713 const internal::VariadicDynCastAllOfMatcher<
726 const internal::VariadicDynCastAllOfMatcher<
738 const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl>
enumDecl;
748 const internal::VariadicDynCastAllOfMatcher<
758 const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl>
methodDecl;
766 const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl>
778 const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl>
varDecl;
788 const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl>
fieldDecl;
796 const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl>
functionDecl;
804 const internal::VariadicDynCastAllOfMatcher<
816 const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl>
friendDecl;
826 const internal::VariadicAllOfMatcher<Stmt>
stmt;
836 const internal::VariadicDynCastAllOfMatcher<
851 const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr>
memberExpr;
861 const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr>
callExpr;
869 const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr>
lambdaExpr;
878 const internal::VariadicDynCastAllOfMatcher<
891 const internal::VariadicDynCastAllOfMatcher<
903 const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups>
916 const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr>
initListExpr;
928 const internal::VariadicDynCastAllOfMatcher<Stmt, SubstNonTypeTemplateParmExpr>
940 const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl>
usingDecl;
951 const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl>
965 const internal::VariadicDynCastAllOfMatcher<
979 const internal::VariadicDynCastAllOfMatcher<
991 const internal::VariadicDynCastAllOfMatcher<
1005 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr>
thisExpr;
1015 const internal::VariadicDynCastAllOfMatcher<
1037 const internal::VariadicDynCastAllOfMatcher<
1049 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr>
newExpr;
1059 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr>
deleteExpr;
1069 const internal::VariadicDynCastAllOfMatcher<
1082 const internal::VariadicDynCastAllOfMatcher<
1100 const internal::VariadicDynCastAllOfMatcher<
1110 const internal::VariadicDynCastAllOfMatcher<Stmt, Expr>
expr;
1119 const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr>
declRefExpr;
1127 const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt>
ifStmt;
1136 const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt>
forStmt;
1148 const Stmt *
const Increment =
Node.getInc();
1149 return (Increment !=
nullptr &&
1163 const Stmt *
const Init =
Node.getInit();
1174 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt>
forRangeStmt;
1186 const VarDecl *
const Var =
Node.getLoopVariable();
1200 const Expr *
const Init =
Node.getRangeInit();
1212 const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt>
whileStmt;
1222 const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt>
doStmt;
1232 const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt>
breakStmt;
1242 const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt>
continueStmt;
1252 const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt>
returnStmt;
1263 const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt>
gotoStmt;
1274 const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt>
labelStmt;
1284 const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt>
switchStmt;
1294 const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase>
switchCase;
1304 const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt>
caseStmt;
1314 const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt>
defaultStmt;
1322 const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt>
compoundStmt;
1331 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt>
catchStmt;
1340 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt>
tryStmt;
1349 const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr>
throwExpr;
1358 const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt>
nullStmt;
1368 const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt>
asmStmt;
1376 const internal::VariadicDynCastAllOfMatcher<
1386 const internal::VariadicDynCastAllOfMatcher<
1399 const internal::VariadicDynCastAllOfMatcher<
1407 const internal::VariadicDynCastAllOfMatcher<
1418 const internal::VariadicDynCastAllOfMatcher<
1425 const internal::VariadicDynCastAllOfMatcher<
1435 const internal::VariadicDynCastAllOfMatcher<
1440 const internal::VariadicDynCastAllOfMatcher<
1445 const internal::VariadicDynCastAllOfMatcher<
1455 const internal::VariadicDynCastAllOfMatcher<
1465 const internal::VariadicDynCastAllOfMatcher<
1475 const internal::VariadicDynCastAllOfMatcher<
1492 const internal::VariadicDynCastAllOfMatcher<
1506 const internal::VariadicDynCastAllOfMatcher<
1523 const internal::VariadicDynCastAllOfMatcher<
1539 const internal::VariadicDynCastAllOfMatcher<
1551 const internal::VariadicDynCastAllOfMatcher<
1561 const internal::VariadicDynCastAllOfMatcher<
1586 const internal::VariadicDynCastAllOfMatcher<
1594 const internal::VariadicDynCastAllOfMatcher<
1611 const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr>
castExpr;
1621 const internal::VariadicDynCastAllOfMatcher<
1631 const internal::VariadicDynCastAllOfMatcher<
1636 const internal::VariadicAllOfMatcher<QualType>
qualType;
1639 const internal::VariadicAllOfMatcher<Type>
type;
1642 const internal::VariadicAllOfMatcher<TypeLoc>
typeLoc;
1663 const internal::VariadicOperatorMatcherFunc<2, UINT_MAX>
eachOf = {
1664 internal::DynTypedMatcher::VO_EachOf
1670 const internal::VariadicOperatorMatcherFunc<2, UINT_MAX>
anyOf = {
1671 internal::DynTypedMatcher::VO_AnyOf
1677 const internal::VariadicOperatorMatcherFunc<2, UINT_MAX>
allOf = {
1678 internal::DynTypedMatcher::VO_AllOf
1690 const internal::VariadicDynCastAllOfMatcher<
1704 const QualType ArgumentType =
Node.getTypeOfArgument();
1724 const internal::Matcher<UnaryExprOrTypeTraitExpr> &
InnerMatcher) {
1732 const internal::Matcher<UnaryExprOrTypeTraitExpr> &
InnerMatcher) {
1752 inline internal::Matcher<NamedDecl>
hasName(
const std::string &Name) {
1753 return internal::Matcher<NamedDecl>(
new internal::HasNameMatcher(Name));
1773 assert(!RegExp.empty());
1774 std::string FullNameString =
"::" +
Node.getQualifiedNameAsString();
1775 llvm::Regex RE(RegExp);
1776 return RE.match(FullNameString);
1797 inline internal::PolymorphicMatcherWithParam1<
1798 internal::HasOverloadedOperatorNameMatcher, StringRef,
1801 return internal::PolymorphicMatcherWithParam1<
1802 internal::HasOverloadedOperatorNameMatcher, StringRef,
1828 internal::Matcher<NamedDecl>,
Base) {
1834 assert(!BaseName.empty());
1841 internal::Matcher<NamedDecl>,
Base, 0) {
1842 return Matcher<CXXRecordDecl>(
anyOf(
Base, isDerivedFrom(
Base)))
1850 assert(!BaseName.empty());
1884 const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher>
1885 LLVM_ATTRIBUTE_UNUSED
has = {};
1901 const internal::ArgumentAdaptingMatcherFunc<internal::HasDescendantMatcher>
1920 const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher>
1947 const internal::ArgumentAdaptingMatcherFunc<internal::ForEachDescendantMatcher>
1965 template <
typename T>
1980 const internal::ArgumentAdaptingMatcherFunc<
1981 internal::HasParentMatcher, internal::TypeList<Decl, Stmt>,
1982 internal::TypeList<Decl, Stmt> > LLVM_ATTRIBUTE_UNUSED
hasParent = {};
1995 const internal::ArgumentAdaptingMatcherFunc<
1996 internal::HasAncestorMatcher, internal::TypeList<Decl, Stmt>,
1997 internal::TypeList<Decl, Stmt> > LLVM_ATTRIBUTE_UNUSED
hasAncestor = {};
2008 const internal::VariadicOperatorMatcherFunc<1, 1>
unless = {
2009 internal::DynTypedMatcher::VO_UnaryNot
2030 inline internal::PolymorphicMatcherWithParam1<
2031 internal::HasDeclarationMatcher, internal::Matcher<Decl>,
2032 void(internal::HasDeclarationSupportedTypes)>
2034 return internal::PolymorphicMatcherWithParam1<
2035 internal::HasDeclarationMatcher, internal::Matcher<Decl>,
2036 void(internal::HasDeclarationSupportedTypes)>(
InnerMatcher);
2050 const Expr *ExprNode =
Node.getImplicitObjectArgument()
2051 ->IgnoreParenImpCasts();
2052 return (ExprNode !=
nullptr &&
2096 assert(!RegExp.empty());
2097 std::string SelectorString =
Node.getSelector().getAsString();
2098 llvm::Regex RE(RegExp);
2099 return RE.match(SelectorString);
2107 return Node.getSelector().isNull();
2119 return Node.getSelector().isUnarySelector();
2136 return Node.getSelector().isKeywordSelector();
2151 return Node.getSelector().getNumArgs() == N;
2172 const Expr *ExprNode =
Node.getCallee();
2173 return (ExprNode !=
nullptr &&
2240 if (!
Node.getTypeSourceInfo())
2256 return Name ==
Node.getAsString();
2269 QualType, pointsTo, internal::Matcher<QualType>,
2271 return (!
Node.isNull() &&
Node->isPointerType() &&
2297 return (!
Node.isNull() &&
Node->isReferenceType() &&
2329 const Expr *ExprNode =
Node.getImplicitObjectArgument();
2330 return (ExprNode !=
nullptr &&
2338 return onImplicitObjectArgument(
2346 return onImplicitObjectArgument(
2362 const Decl *DeclNode =
Node.getDecl();
2363 return (DeclNode !=
nullptr &&
2401 if (
Node.isSingleDecl()) {
2402 const Decl *FoundDecl =
Node.getSingleDecl();
2417 VarDecl, hasInitializer, internal::Matcher<Expr>,
2419 const Expr *Initializer =
Node.getAnyInitializer();
2420 return (Initializer !=
nullptr &&
2436 return Node.hasLocalStorage();
2450 return Node.hasGlobalStorage();
2466 return Node.getNumArgs() == N;
2482 return (N <
Node.getNumArgs() &&
2523 const unsigned NumDecls = std::distance(
Node.decl_begin(),
Node.decl_end());
2527 std::advance(Iterator, N);
2545 return Node.getExceptionDecl() ==
nullptr;
2581 return (NodeAsDecl !=
nullptr &&
2600 const Expr* NodeAsExpr =
Node.getInit();
2601 return (NodeAsExpr !=
nullptr &&
2619 return Node.isWritten();
2642 for (
const Expr *Arg :
Node.arguments()) {
2654 return Node.isListInitialization();
2668 unsigned, N, internal::Matcher<ParmVarDecl>,
2670 return (N <
Node.getNumParams() &&
2703 return Node.getNumParams() == N;
2730 return Node.isExternC();
2743 return Node.isDeleted();
2760 return Node.isConstexpr();
2775 const Expr *
const Condition =
Node.getCond();
2776 return (Condition !=
nullptr &&
2788 const Stmt *
const Then =
Node.getThen();
2800 const Stmt *
const Else =
Node.getElse();
2835 internal::NotEqualsBoundNodePredicate Predicate;
2838 return Builder->removeBindings(Predicate);
2851 const DeclStmt*
const DeclarationStatement =
2852 Node.getConditionVariableDeclStmt();
2853 return DeclarationStatement !=
nullptr &&
2868 if (
const Expr* Expression =
Node.getIdx())
2885 if (
const Expr* Expression =
Node.getBase())
2906 const Stmt *
const Statement =
Node.getBody();
2907 return (Statement !=
nullptr &&
2939 return Node.size() == N;
2951 template <
typename ValueT>
2952 internal::PolymorphicMatcherWithParam1<internal::ValueEqualsMatcher, ValueT>
2954 return internal::PolymorphicMatcherWithParam1<
2955 internal::ValueEqualsMatcher,
2969 std::string, Name) {
2970 return Name ==
Node.getOpcodeStr(
Node.getOpcode());
2981 Expr *LeftHandSide =
Node.getLHS();
2982 return (LeftHandSide !=
nullptr &&
2994 Expr *RightHandSide =
Node.getRHS();
2995 return (RightHandSide !=
nullptr &&
3003 return anyOf(hasLHS(InnerMatcher), hasRHS(InnerMatcher));
3014 const Expr *
const Operand =
Node.getSubExpr();
3015 return (Operand !=
nullptr &&
3028 const Expr*
const SubExpression =
Node.getSubExpr();
3029 return (SubExpression !=
nullptr &&
3039 const QualType NodeType =
Node.getTypeAsWritten();
3060 Expr *Expression =
Node.getTrueExpr();
3061 return (Expression !=
nullptr &&
3073 Expr *Expression =
Node.getFalseExpr();
3074 return (Expression !=
nullptr &&
3094 return Node.isThisDeclarationADefinition();
3117 return (Parent !=
nullptr &&
3132 return Node.isVirtual();
3146 return Node.isPure();
3161 return Node.isConst();
3179 return Node.size_overridden_methods() > 0 ||
Node.hasAttr<OverrideAttr>();
3198 return Node.isArrow();
3212 return Node->isIntegerType();
3231 return Node.isConstQualified();
3248 return Node.hasLocalQualifiers();
3344 Node.getTemplateSpecializationKind() ==
3407 return internal::BindableMatcher<TypeLoc>(
3420 return Node.isVoidType();
3501 return Node.getSize() == N;
3836 internal::Matcher<NestedNameSpecifier>,
InnerMatcher) {
3858 AST_MATCHER_P(ElaboratedType, namesType, internal::Matcher<QualType>,
3878 const DeclContext *DC =
Node.getDeclContext();
3879 if (!DC)
return false;
3899 const internal::VariadicAllOfMatcher<
3905 internal::BindableMatcher<NestedNameSpecifierLoc>, loc,
3906 internal::Matcher<NestedNameSpecifier>,
InnerMatcher, 1) {
3907 return internal::BindableMatcher<NestedNameSpecifierLoc>(
3908 new internal::LocMatcher<NestedNameSpecifierLoc, NestedNameSpecifier>(
3924 if (!
Node.getAsType())
3973 internal::Matcher<NestedNameSpecifierLoc>,
InnerMatcher,
3993 if (!
Node.getAsNamespace())
4006 return &
Node == Other;
4013 return &
Node == Other;
4031 BoundNodesTreeBuilder
Result;
4036 bool Matched =
false;
4038 SC = SC->getNextSwitchCase()) {
4039 BoundNodesTreeBuilder CaseBuilder(*
Builder);
4043 Result.addMatch(CaseBuilder);
4060 BoundNodesTreeBuilder
Result;
4061 bool Matched =
false;
4062 for (
const auto *I :
Node.inits()) {
4063 BoundNodesTreeBuilder InitBuilder(*
Builder);
4066 Result.addMatch(InitBuilder);
4099 for (
const auto *
Attr :
Node.attrs()) {
4112 const internal::VariadicDynCastAllOfMatcher<Stmt, CUDAKernelCallExpr>
A call to an overloaded operator written using operator syntax.
internal::TrueMatcher anything()
Matches any node.
Defines the clang::ASTContext interface.
Represents a type that was referred to using an elaborated type keyword, e.g., struct S...
const T * getStmtAs(StringRef ID) const
The null pointer literal (C++11 [lex.nullptr])
const internal::VariadicDynCastAllOfMatcher< Stmt, Expr > expr
Matches expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, BreakStmt > breakStmt
Matches break statements.
Smart pointer class that efficiently represents Objective-C method names.
const internal::ArgumentAdaptingMatcherFunc< internal::HasParentMatcher, internal::TypeList< Decl, Stmt >, internal::TypeList< Decl, Stmt > > LLVM_ATTRIBUTE_UNUSED hasParent
Matches AST nodes that have a parent that matches the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, DoStmt > doStmt
Matches do statements.
const internal::ArgumentAdaptingMatcherFunc< internal::HasDescendantMatcher > LLVM_ATTRIBUTE_UNUSED hasDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher. ...
static Decl * castFromDeclContext(const DeclContext *)
const internal::VariadicAllOfMatcher< Stmt > stmt
Matches statements.
internal::PolymorphicMatcherWithParam1< internal::HasDeclarationMatcher, internal::Matcher< Decl >, void(internal::HasDeclarationSupportedTypes)> hasDeclaration(const internal::Matcher< Decl > &InnerMatcher)
Matches a node if the declaration associated with that node matches the given matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBindTemporaryExpr > bindTemporaryExpr
Matches nodes where temporaries are created.
const internal::VariadicDynCastAllOfMatcher< Decl, LinkageSpecDecl > linkageSpecDecl
Matches a declaration of a linkage specification.
Defines the C++ template declaration subclasses.
Represents a C++11 auto or C++1y decltype(auto) type.
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachMatcher > LLVM_ATTRIBUTE_UNUSED forEach
Matches AST nodes that have child AST nodes that match the provided matcher.
const internal::VariadicDynCastAllOfMatcher< Stmt, LabelStmt > labelStmt
Matches label statements.
internal::Matcher< Decl > DeclarationMatcher
Types of matchers for the top-level classes in the AST class hierarchy.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThisExpr > thisExpr
Matches implicit and explicit this expressions.
Represents a call to a C++ constructor.
Represents a C++ constructor within a class.
Represents a prvalue temporary that is written into memory so that a reference can bind to it...
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDecl > usingDecl
Matches using declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ValueDecl > valueDecl
Matches any value declaration.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateDecl > classTemplateDecl
Matches C++ class template declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumConstantDecl > enumConstantDecl
Matches enum constants.
const DynTypedMatcher *const Matcher
AST_MATCHER(Decl, isPublic)
Matches public C++ declarations.
internal::PolymorphicMatcherWithParam1< internal::ValueEqualsMatcher, ValueT > equals(const ValueT &Value)
Matches literals that are equal to the given value.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXForRangeStmt > forRangeStmt
Matches range-based for statements.
const internal::VariadicDynCastAllOfMatcher< Decl, VarDecl > varDecl
Matches variable declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, AsmStmt > asmStmt
Matches asm statements.
A C++ static_cast expression (C++ [expr.static.cast]).
Base wrapper for a particular "section" of type source info.
const internal::VariadicDynCastAllOfMatcher< Stmt, ConditionalOperator > conditionalOperator
Matches conditional operator expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryExprOrTypeTraitExpr > unaryExprOrTypeTraitExpr
Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)
Represents a class template specialization, which refers to a class template with a given set of temp...
const internal::VariadicAllOfMatcher< QualType > qualType
Matches QualTypes in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Stmt, CaseStmt > caseStmt
Matches case statements inside switch statements.
A C++ nested-name-specifier augmented with source location information.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConversionDecl > conversionDecl
Matches conversion operator declarations.
AST_MATCHER_P(Expr, ignoringImpCasts, internal::Matcher< Expr >, InnerMatcher)
Matches expressions that match InnerMatcher after any implicit casts are stripped off...
const internal::VariadicDynCastAllOfMatcher< Decl, UsingDirectiveDecl > usingDirectiveDecl
Matches using namespace declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, GNUNullExpr > gnuNullExpr
Matches GNU __null expression.
UnaryExprOrTypeTrait
Names for the "expression or type" traits.
const internal::VariadicAllOfMatcher< Decl > decl
Matches declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCMessageExpr > objcMessageExpr
Matches ObjectiveC Message invocation expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, WhileStmt > whileStmt
Matches while statements.
Represents an access specifier followed by colon ':'.
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundLiteralExpr > compoundLiteralExpr
Matches compound (i.e. non-scalar) literals.
Represents a C++ using-declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, NullStmt > nullStmt
Matches null statements.
const internal::VariadicDynCastAllOfMatcher< Decl, NamedDecl > namedDecl
Matches a declaration of anything that could have a name.
const internal::VariadicDynCastAllOfMatcher< Decl, TypedefDecl > typedefDecl
Matches typedef declarations.
const internal::VariadicOperatorMatcherFunc< 2, UINT_MAX > eachOf
Matches if any of the given matchers matches.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXReinterpretCastExpr > reinterpretCastExpr
Matches a reinterpret_cast expression.
AST_MATCHER_FUNCTION(internal::Matcher< Decl >, isInstantiated)
Matches declarations that are template instantiations or are inside template instantiations.
const internal::VariadicDynCastAllOfMatcher< Stmt, DefaultStmt > defaultStmt
Matches default statements inside switch statements.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXRecordDecl > recordDecl
Matches C++ class declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundStmt > compoundStmt
Matches compound statements.
const internal::VariadicDynCastAllOfMatcher< Decl, ParmVarDecl > parmVarDecl
Matches parameter variable declarations.
A builtin binary operation expression such as "x + y" or "x <= y".
const IntrusiveRefCntPtr< DynMatcherInterface > InnerMatcher
const internal::VariadicDynCastAllOfMatcher< Stmt, ReturnStmt > returnStmt
Matches return statements.
const internal::VariadicDynCastAllOfMatcher< Decl, TranslationUnitDecl > translationUnitDecl
Matches the top declaration context.
const internal::VariadicDynCastAllOfMatcher< Decl, FriendDecl > friendDecl
Matches friend declarations.
internal::Matcher< Stmt > sizeOfExpr(const internal::Matcher< UnaryExprOrTypeTraitExpr > &InnerMatcher)
Same as unaryExprOrTypeTraitExpr, but only matching sizeof.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTemporaryObjectExpr > temporaryObjectExpr
Matches functional cast expressions having N != 1 arguments.
const internal::VariadicDynCastAllOfMatcher< Decl, StaticAssertDecl > staticAssertDecl
Matches a C++ static_assert declaration.
Represents binding an expression to a temporary.
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclStmt > declStmt
Matches declaration statements.
internal::PolymorphicMatcherWithParam1< internal::HasOverloadedOperatorNameMatcher, StringRef, AST_POLYMORPHIC_SUPPORTED_TYPES(CXXOperatorCallExpr, FunctionDecl)> hasOverloadedOperatorName(StringRef Name)
Matches overloaded operator names.
internal::Matcher< T > findAll(const internal::Matcher< T > &Matcher)
Matches if the node or any descendant matches.
internal::Matcher< Stmt > StatementMatcher
A default argument (C++ [dcl.fct.default]).
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstCastExpr > constCastExpr
Matches a const_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryOperator > unaryOperator
Matches unary operator expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStaticCastExpr > staticCastExpr
Matches a C++ static_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXOperatorCallExpr > operatorCallExpr
Matches overloaded operator calls.
const internal::VariadicDynCastAllOfMatcher< Stmt, MemberExpr > memberExpr
Matches member expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, InitListExpr > initListExpr
Matches init list expressions.
const internal::VariadicOperatorMatcherFunc< 2, UINT_MAX > allOf
Matches if all given matchers match.
const FileEntry * getFileEntryForID(FileID FID) const
Returns the FileEntry record for the provided FileID.
FileID getFileID(SourceLocation SpellingLoc) const
Return the FileID for a SourceLocation.
Represents a ValueDecl that came out of a declarator. Contains type source information through TypeSo...
const internal::VariadicDynCastAllOfMatcher< Stmt, ArraySubscriptExpr > arraySubscriptExpr
Matches array subscript expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNewExpr > newExpr
Matches new expressions.
ID
Defines the set of possible language-specific address spaces.
internal::Matcher< NestedNameSpecifierLoc > NestedNameSpecifierLocMatcher
const internal::VariadicDynCastAllOfMatcher< Stmt, LambdaExpr > lambdaExpr
Matches lambda expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryOperator > binaryOperator
Matches binary operator expressions.
const internal::VariadicAllOfMatcher< NestedNameSpecifier > nestedNameSpecifier
Matches record types (e.g. structs, classes).
const internal::ArgumentAdaptingMatcherFunc< internal::ForEachDescendantMatcher > LLVM_ATTRIBUTE_UNUSED forEachDescendant
Matches AST nodes that have descendant AST nodes that match the provided matcher. ...
const internal::VariadicDynCastAllOfMatcher< Stmt, IntegerLiteral > integerLiteral
Matches integer literals of all sizes / encodings, e.g. 1, 1L, 0x1 and 1U.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXThrowExpr > throwExpr
Matches throw expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, ForStmt > forStmt
Matches for statements.
const internal::VariadicOperatorMatcherFunc< 1, 1 > unless
Matches if the provided matcher does not match.
Represents a C++ functional cast expression that builds a temporary object.
A C++ const_cast expression (C++ [expr.const.cast]).
Represents a C++ destructor within a class.
const internal::VariadicAllOfMatcher< NestedNameSpecifierLoc > nestedNameSpecifierLoc
Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.
const internal::VariadicDynCastAllOfMatcher< Stmt, GotoStmt > gotoStmt
Matches goto statements.
internal::Matcher< T > id(StringRef ID, const internal::BindableMatcher< T > &InnerMatcher)
If the provided matcher matches a node, binds the node to ID.
bool isInSystemHeader(SourceLocation Loc) const
Returns if a SourceLocation is in a system header.
static SVal getValue(SVal val, SValBuilder &svalBuilder)
internal::BoundNodesMap::IDToNodeMap IDToNodeMap
Type of mapping from binding identifiers to bound nodes. This type is an associative container with a...
const internal::VariadicDynCastAllOfMatcher< Stmt, MaterializeTemporaryExpr > materializeTemporaryExpr
Matches nodes where temporaries are materialized.
An expression that sends a message to the given Objective-C object or class.
AST_TYPE_TRAVERSE_MATCHER(hasDeducedType, getDeducedType, AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType))
Matches AutoType nodes where the deduced type is a specific type.
The result type of a method or function.
bool isTemplateInstantiation(TemplateSpecializationKind Kind)
Determine whether this template specialization kind refers to an instantiation of an entity (as oppos...
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNullPtrLiteralExpr > nullPtrLiteralExpr
Matches nullptr literal.
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchCase > switchCase
Matches case and default statements inside switch statements.
AST_MATCHER_P2(DeclStmt, containsDeclaration, unsigned, N, internal::Matcher< Decl >, InnerMatcher)
Matches the n'th declaration of a declaration statement.
const internal::ArgumentAdaptingMatcherFunc< internal::HasAncestorMatcher, internal::TypeList< Decl, Stmt >, internal::TypeList< Decl, Stmt > > LLVM_ATTRIBUTE_UNUSED hasAncestor
Matches AST nodes that have an ancestor that matches the provided matcher.
const internal::VariadicAllOfMatcher< TypeLoc > typeLoc
Matches TypeLocs in the clang AST.
bool isInMainFile(SourceLocation Loc) const
Returns whether the PresumedLoc for a given SourceLocation is in the main file.
Maps string IDs to AST nodes matched by parts of a matcher.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXMethodDecl > methodDecl
Matches method declarations.
A C++ dynamic_cast expression (C++ [expr.dynamic.cast]).
ASTMatchFinder *const Finder
friend class internal::BoundNodesTreeBuilder
const T * getDeclAs(StringRef ID) const
Deprecated. Please use getNodeAs instead.
const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingValueDecl > unresolvedUsingValueDecl
Matches unresolved using value declarations.
AST_MATCHER_FUNCTION_P_OVERLOAD(internal::BindableMatcher< TypeLoc >, loc, internal::Matcher< QualType >, InnerMatcher, 0)
Matches TypeLocs for which the given inner QualType-matcher matches.
const internal::VariadicDynCastAllOfMatcher< Stmt, CharacterLiteral > characterLiteral
Matches character literals (also matches wchar_t).
const internal::VariadicDynCastAllOfMatcher< Stmt, DeclRefExpr > declRefExpr
Matches expressions that refer to declarations.
const char * getName() const
const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitCastExpr > implicitCastExpr
Matches the implicit cast nodes of Clang's AST.
A call to a literal operator (C++11 [over.literal]) written as a user-defined literal (C++11 [lit...
const internal::ArgumentAdaptingMatcherFunc< internal::HasMatcher > LLVM_ATTRIBUTE_UNUSED has
Matches the first method of a class or struct that satisfies InnerMatcher.
TagDecl - Represents the declaration of a struct/union/class/enum.
Represents a dependent using declaration which was not marked with typename.
Cached information about one file (either on disk or in the virtual file system). ...
const internal::VariadicDynCastAllOfMatcher< Decl, CXXDestructorDecl > destructorDecl
Matches explicit C++ destructor declarations.
const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateSpecializationDecl > classTemplateSpecializationDecl
Matches C++ class template specializations.
AST_POLYMORPHIC_MATCHER_P(isExpansionInFileMatching, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc), std::string, RegExp)
Matches AST nodes that were expanded within files whose name is partially matching a given regex...
AST_POLYMORPHIC_MATCHER_P_OVERLOAD(hasType, AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, ValueDecl), internal::Matcher< QualType >, InnerMatcher, 0)
Matches if the expression's or declaration's type matches a type matcher.
Represents a static or instance method of a struct/union/class.
internal::Matcher< Stmt > alignOfExpr(const internal::Matcher< UnaryExprOrTypeTraitExpr > &InnerMatcher)
Same as unaryExprOrTypeTraitExpr, but only matching alignof.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionDecl > functionDecl
Matches function declarations.
Represents a C++ nested name specifier, such as "\::std::vector<int>::".
AST_POLYMORPHIC_MATCHER_P2(hasTemplateArgument, AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl, TemplateSpecializationType), unsigned, N, internal::Matcher< TemplateArgument >, InnerMatcher)
Matches classTemplateSpecializations where the n'th TemplateArgument matches the given InnerMatcher...
const internal::VariadicDynCastAllOfMatcher< Stmt, ExprWithCleanups > exprWithCleanups
Matches expressions that introduce cleanups to be run at the end of the sub-expression's evaluation...
internal::Matcher< TypeLoc > TypeLocMatcher
const IDToNodeMap & getMap() const
Retrieve mapping from binding identifiers to bound nodes.
const internal::VariadicDynCastAllOfMatcher< Decl, AccessSpecDecl > accessSpecDecl
Matches C++ access specifier declarations.
std::string getAsString() const
Derive the full selector name (e.g. "foo:bar:") and return it as an std::string.
#define AST_POLYMORPHIC_SUPPORTED_TYPES(...)
Construct a type-list to be passed to the AST_POLYMORPHIC_MATCHER* macros.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDefaultArgExpr > defaultArgExpr
Matches the value of a default argument at the call site.
Represents a C++11 static_assert declaration.
const internal::VariadicDynCastAllOfMatcher< Stmt, ExplicitCastExpr > explicitCastExpr
Matches explicit cast expressions.
static DynTypedNode create(const T &Node)
Creates a DynTypedNode from Node.
const internal::VariadicDynCastAllOfMatcher< Decl, CXXConstructorDecl > constructorDecl
Matches C++ constructor declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, StringLiteral > stringLiteral
Matches string literals (also matches wide string literals).
AST_TYPELOC_TRAVERSE_MATCHER(hasElementType, getElement, AST_POLYMORPHIC_SUPPORTED_TYPES(ArrayType, ComplexType))
Matches arrays and C99 complex types that have a specific element type.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXUnresolvedConstructExpr > unresolvedConstructExpr
Matches unresolved constructor call expressions.
attr::Kind getKind() const
ast_type_traits::DynTypedNode Node
Represents a template argument.
internal::Matcher< NestedNameSpecifier > NestedNameSpecifierMatcher
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXCatchStmt > catchStmt
Matches catch statements.
const T * getNodeAs(StringRef ID) const
Returns the AST node bound to ID.
const internal::VariadicDynCastAllOfMatcher< Decl, FunctionTemplateDecl > functionTemplateDecl
Matches C++ function template declarations.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXFunctionalCastExpr > functionalCastExpr
Matches functional cast expressions.
const internal::VariadicDynCastAllOfMatcher< Decl, EnumDecl > enumDecl
Matches enum declarations.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDynamicCastExpr > dynamicCastExpr
Matches a dynamic_cast expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBoolLiteralExpr > boolLiteral
Matches bool literals.
A C++ reinterpret_cast expression (C++ [expr.reinterpret.cast]).
const internal::VariadicDynCastAllOfMatcher< Stmt, CUDAKernelCallExpr > CUDAKernelCallExpr
Matches CUDA kernel call expression.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstructExpr > constructExpr
Matches constructor call expressions (including implicit ones).
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXMemberCallExpr > memberCallExpr
Matches member call expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTryStmt > tryStmt
Matches try statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDeleteExpr > deleteExpr
Matches delete expressions.
const internal::VariadicDynCastAllOfMatcher< Stmt, CStyleCastExpr > cStyleCastExpr
Matches a C-style cast expression.
ArraySubscriptExpr - [C99 6.5.2.1] Array Subscripting.
Represents a C++ base or member initializer.
AST_MATCHER_P_OVERLOAD(CXXRecordDecl, isDerivedFrom, std::string, BaseName, 1)
Overloaded method as shortcut for isDerivedFrom(hasName(...)).
const internal::VariadicDynCastAllOfMatcher< Stmt, FloatingLiteral > floatLiteral
Matches float literals of all sizes / encodings, e.g. 1.0, 1.0f, 1.0L and 1e10.
DeclGroupRef::const_iterator const_decl_iterator
const internal::VariadicDynCastAllOfMatcher< Stmt, IfStmt > ifStmt
Matches if statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, CallExpr > callExpr
Matches call expressions.
The template argument is a type.
AST_POLYMORPHIC_MATCHER(isExpansionInMainFile, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc))
Matches AST nodes that were expanded within the main-file.
internal::Matcher< QualType > TypeMatcher
internal::Matcher< BinaryOperator > hasEitherOperand(const internal::Matcher< Expr > &InnerMatcher)
Matches if either the left hand side or the right hand side of a binary operator matches.
Describes an explicit type conversion that uses functional notion but could not be resolved because o...
__PTRDIFF_TYPE__ ptrdiff_t
const internal::VariadicOperatorMatcherFunc< 2, UINT_MAX > anyOf
Matches if any of the given matchers matches.
const internal::VariadicDynCastAllOfMatcher< Stmt, ContinueStmt > continueStmt
Matches continue statements.
const internal::VariadicAllOfMatcher< TemplateArgument > templateArgument
Matches template arguments.
const internal::VariadicDynCastAllOfMatcher< Stmt, CastExpr > castExpr
Matches any cast nodes of Clang's AST.
Represents a C++ struct/union/class.
BoundNodesTreeBuilder *const Builder
Represents an explicit C++ type conversion that uses "functional" notation (C++ [expr.type.conv]).
internal::Matcher< NamedDecl > hasName(const std::string &Name)
Matches NamedDecl nodes that have the specified name.
Declaration of a class template.
const internal::VariadicDynCastAllOfMatcher< Decl, NamespaceDecl > namespaceDecl
Matches a declaration of a namespace.
const internal::VariadicDynCastAllOfMatcher< Stmt, UserDefinedLiteral > userDefinedLiteral
Matches user defined literal operator call.
const internal::VariadicAllOfMatcher< CXXCtorInitializer > ctorInitializer
Matches constructor initializers.
const internal::VariadicDynCastAllOfMatcher< Stmt, SwitchStmt > switchStmt
Matches switch statements.
const internal::VariadicDynCastAllOfMatcher< Stmt, SubstNonTypeTemplateParmExpr > substNonTypeTemplateParmExpr
Matches substitutions of non-type template parameters.
const internal::VariadicDynCastAllOfMatcher< Decl, FieldDecl > fieldDecl
Matches field declarations.
A reference to a declared variable, function, enum, etc. [C99 6.5.1p2].
Represents a type template specialization; the template must be a class template, a type alias templa...
bool matches(const til::SExpr *E1, const til::SExpr *E2)
A boolean literal, per ([C++ lex.bool] Boolean literals).
SourceLocation getExpansionLoc(SourceLocation Loc) const
Given a SourceLocation object Loc, return the expansion location referenced by the ID...
const internal::VariadicDynCastAllOfMatcher< Decl, DeclaratorDecl > declaratorDecl
Matches declarator declarations (field, variable, function and non-type template parameter declaratio...
This class handles loading and caching of source files into memory.
Declaration of a template function.
Attr - This represents one attribute.
Represents a shadow declaration introduced into a scope by a (resolved) using declaration.
AST_TYPE_MATCHER(BuiltinType, builtinType)
Matches builtin Types.
static bool isExternC(const NamedDecl *ND)