clang  3.7.0
Namespaces | Classes | Functions | Variables
clang::ast_matchers Namespace Reference

Namespaces

 dynamic
 
 internal
 

Classes

class  BoundNodes
 Maps string IDs to AST nodes matched by parts of a matcher. More...
 
class  MatchFinder
 A class to allow finding matches over the Clang AST. More...
 

Typedefs

typedef internal::Matcher< DeclDeclarationMatcher
 Types of matchers for the top-level classes in the AST class hierarchy. More...
 
typedef internal::Matcher< StmtStatementMatcher
 
typedef internal::Matcher
< QualType
TypeMatcher
 
typedef internal::Matcher
< TypeLoc
TypeLocMatcher
 
typedef internal::Matcher
< NestedNameSpecifier
NestedNameSpecifierMatcher
 
typedef internal::Matcher
< NestedNameSpecifierLoc
NestedNameSpecifierLocMatcher
 

Functions

template<typename T >
internal::Matcher< T > id (StringRef ID, const internal::BindableMatcher< T > &InnerMatcher)
 If the provided matcher matches a node, binds the node to ID. More...
 
internal::TrueMatcher anything ()
 Matches any node. More...
 
 AST_POLYMORPHIC_MATCHER (isExpansionInMainFile, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc))
 Matches AST nodes that were expanded within the main-file. More...
 
 AST_POLYMORPHIC_MATCHER (isExpansionInSystemHeader, AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc))
 Matches AST nodes that were expanded within system-header-files. More...
 
 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. More...
 
 AST_MATCHER (Decl, isPublic)
 Matches public C++ declarations. More...
 
 AST_MATCHER (Decl, isProtected)
 Matches protected C++ declarations. More...
 
 AST_MATCHER (Decl, isPrivate)
 Matches private C++ declarations. More...
 
 AST_MATCHER (Decl, isImplicit)
 Matches a declaration that has been implicitly added by the compiler (eg. implicit default/copy constructors). More...
 
 AST_POLYMORPHIC_MATCHER_P (hasAnyTemplateArgument, AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl, TemplateSpecializationType), internal::Matcher< TemplateArgument >, InnerMatcher)
 Matches classTemplateSpecializations that have at least one TemplateArgument matching the given InnerMatcher. More...
 
 AST_MATCHER_P (Expr, ignoringImpCasts, internal::Matcher< Expr >, InnerMatcher)
 Matches expressions that match InnerMatcher after any implicit casts are stripped off. More...
 
 AST_MATCHER_P (Expr, ignoringParenCasts, internal::Matcher< Expr >, InnerMatcher)
 Matches expressions that match InnerMatcher after parentheses and casts are stripped off. More...
 
 AST_MATCHER_P (Expr, ignoringParenImpCasts, internal::Matcher< Expr >, InnerMatcher)
 Matches expressions that match InnerMatcher after implicit casts and parentheses are stripped off. More...
 
 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. More...
 
 AST_POLYMORPHIC_MATCHER_P (templateArgumentCountIs, AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl, TemplateSpecializationType), unsigned, N)
 Matches if the number of template arguments equals N. More...
 
 AST_MATCHER_P (TemplateArgument, refersToType, internal::Matcher< QualType >, InnerMatcher)
 Matches a TemplateArgument that refers to a certain type. More...
 
 AST_MATCHER_P (TemplateArgument, refersToDeclaration, internal::Matcher< Decl >, InnerMatcher)
 Matches a canonical TemplateArgument that refers to a certain declaration. More...
 
 AST_MATCHER_P (TemplateArgument, isExpr, internal::Matcher< Expr >, InnerMatcher)
 Matches a sugar TemplateArgument that refers to a certain expression. More...
 
 AST_MATCHER (TemplateArgument, isIntegral)
 Matches a TemplateArgument that is an integral value. More...
 
 AST_MATCHER_P (TemplateArgument, refersToIntegralType, internal::Matcher< QualType >, InnerMatcher)
 Matches a TemplateArgument that referes to an integral type. More...
 
 AST_MATCHER_P (TemplateArgument, equalsIntegralValue, std::string, Value)
 Matches a TemplateArgument of integral type with a given value. More...
 
 AST_MATCHER_P (ForStmt, hasIncrement, internal::Matcher< Stmt >, InnerMatcher)
 Matches the increment statement of a for loop. More...
 
 AST_MATCHER_P (ForStmt, hasLoopInit, internal::Matcher< Stmt >, InnerMatcher)
 Matches the initialization statement of a for loop. More...
 
 AST_MATCHER_P (CXXForRangeStmt, hasLoopVariable, internal::Matcher< VarDecl >, InnerMatcher)
 Matches the initialization statement of a for loop. More...
 
 AST_MATCHER_P (CXXForRangeStmt, hasRangeInit, internal::Matcher< Expr >, InnerMatcher)
 Matches the range initialization statement of a for loop. More...
 
 AST_MATCHER_P (UnaryExprOrTypeTraitExpr, hasArgumentOfType, internal::Matcher< QualType >, InnerMatcher)
 Matches unary expressions that have a specific type of argument. More...
 
 AST_MATCHER_P (UnaryExprOrTypeTraitExpr, ofKind, UnaryExprOrTypeTrait, Kind)
 Matches unary expressions of a certain kind. More...
 
internal::Matcher< StmtalignOfExpr (const internal::Matcher< UnaryExprOrTypeTraitExpr > &InnerMatcher)
 Same as unaryExprOrTypeTraitExpr, but only matching alignof. More...
 
internal::Matcher< StmtsizeOfExpr (const internal::Matcher< UnaryExprOrTypeTraitExpr > &InnerMatcher)
 Same as unaryExprOrTypeTraitExpr, but only matching sizeof. More...
 
internal::Matcher< NamedDeclhasName (const std::string &Name)
 Matches NamedDecl nodes that have the specified name. More...
 
 AST_MATCHER_P (NamedDecl, matchesName, std::string, RegExp)
 Matches NamedDecl nodes whose fully qualified names contain a substring matched by the given RegExp. More...
 
internal::PolymorphicMatcherWithParam1
< internal::HasOverloadedOperatorNameMatcher,
StringRef,
AST_POLYMORPHIC_SUPPORTED_TYPES(CXXOperatorCallExpr,
FunctionDecl)> 
hasOverloadedOperatorName (StringRef Name)
 Matches overloaded operator names. More...
 
 AST_MATCHER_P (CXXRecordDecl, isDerivedFrom, internal::Matcher< NamedDecl >, Base)
 Matches C++ classes that are directly or indirectly derived from a class matching Base. More...
 
 AST_MATCHER_P_OVERLOAD (CXXRecordDecl, isDerivedFrom, std::string, BaseName, 1)
 Overloaded method as shortcut for isDerivedFrom(hasName(...)). More...
 
 AST_MATCHER_P_OVERLOAD (CXXRecordDecl, isSameOrDerivedFrom, internal::Matcher< NamedDecl >, Base, 0)
 Similar to isDerivedFrom(), but also matches classes that directly match Base. More...
 
 AST_MATCHER_P_OVERLOAD (CXXRecordDecl, isSameOrDerivedFrom, std::string, BaseName, 1)
 Overloaded method as shortcut for isSameOrDerivedFrom(hasName(...)). More...
 
template<typename T >
internal::Matcher< T > findAll (const internal::Matcher< T > &Matcher)
 Matches if the node or any descendant matches. More...
 
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. More...
 
 AST_MATCHER_P (CXXMemberCallExpr, on, internal::Matcher< Expr >, InnerMatcher)
 Matches on the implicit object argument of a member call expression. More...
 
 AST_MATCHER_P (ObjCMessageExpr, hasReceiverType, internal::Matcher< QualType >, InnerMatcher)
 Matches on the receiver of an ObjectiveC Message expression. More...
 
 AST_MATCHER_P (ObjCMessageExpr, hasSelector, std::string, BaseName)
 Matches when BaseName == Selector.getAsString() More...
 
 AST_MATCHER_P (ObjCMessageExpr, matchesSelector, std::string, RegExp)
 Matches ObjC selectors whose name contains a substring matched by the given RegExp. matcher = objCMessageExpr(matchesSelector("loadHTMLString\:baseURL?")); matches the outer message expr in the code below, but NOT the message invocation for self.bodyView. More...
 
 AST_MATCHER (ObjCMessageExpr, hasNullSelector)
 Matches when the selector is the empty selector. More...
 
 AST_MATCHER (ObjCMessageExpr, hasUnarySelector)
 Matches when the selector is a Unary Selector. More...
 
 AST_MATCHER (ObjCMessageExpr, hasKeywordSelector)
 Matches when the selector is a keyword selector. More...
 
 AST_MATCHER_P (ObjCMessageExpr, numSelectorArgs, unsigned, N)
 Matches when the selector has the specified number of arguments. More...
 
 AST_MATCHER_P (CallExpr, callee, internal::Matcher< Stmt >, InnerMatcher)
 Matches if the call expression's callee expression matches. More...
 
 AST_MATCHER_P_OVERLOAD (CallExpr, callee, internal::Matcher< Decl >, InnerMatcher, 1)
 Matches if the call expression's callee's declaration matches the given matcher. More...
 
 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. More...
 
 AST_POLYMORPHIC_MATCHER_P_OVERLOAD (hasType, AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, ValueDecl), internal::Matcher< Decl >, InnerMatcher, 1)
 Overloaded to match the declaration of the expression's or value declaration's type. More...
 
 AST_MATCHER_P (DeclaratorDecl, hasTypeLoc, internal::Matcher< TypeLoc >, Inner)
 Matches if the type location of the declarator decl's type matches the inner matcher. More...
 
 AST_MATCHER_P (QualType, asString, std::string, Name)
 Matches if the matched type is represented by the given string. More...
 
 AST_MATCHER_P (QualType, pointsTo, internal::Matcher< QualType >, InnerMatcher)
 Matches if the matched type is a pointer type and the pointee type matches the specified matcher. More...
 
 AST_MATCHER_P_OVERLOAD (QualType, pointsTo, internal::Matcher< Decl >, InnerMatcher, 1)
 Overloaded to match the pointee type's declaration. More...
 
 AST_MATCHER_P (QualType, references, internal::Matcher< QualType >, InnerMatcher)
 Matches if the matched type is a reference type and the referenced type matches the specified matcher. More...
 
 AST_MATCHER_P (DeclRefExpr, to, internal::Matcher< Decl >, InnerMatcher)
 Matches QualTypes whose canonical type matches InnerMatcher. More...
 
 AST_MATCHER_P (DeclRefExpr, throughUsingDecl, internal::Matcher< UsingShadowDecl >, InnerMatcher)
 Matches a DeclRefExpr that refers to a declaration through a specific using shadow declaration. More...
 
 AST_MATCHER_P (DeclStmt, hasSingleDecl, internal::Matcher< Decl >, InnerMatcher)
 Matches the Decl of a DeclStmt which has a single declaration. More...
 
 AST_MATCHER_P (VarDecl, hasInitializer, internal::Matcher< Expr >, InnerMatcher)
 Matches a variable declaration that has an initializer expression that matches the given matcher. More...
 
 AST_MATCHER (VarDecl, hasLocalStorage)
 Matches a variable declaration that has function scope and is a non-static local variable. More...
 
 AST_MATCHER (VarDecl, hasGlobalStorage)
 Matches a variable declaration that does not have local storage. More...
 
 AST_POLYMORPHIC_MATCHER_P (argumentCountIs, AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr, CXXConstructExpr, ObjCMessageExpr), unsigned, N)
 Checks that a call expression or a constructor call expression has a specific number of arguments (including absent default arguments). More...
 
 AST_POLYMORPHIC_MATCHER_P2 (hasArgument, AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr, CXXConstructExpr, ObjCMessageExpr), unsigned, N, internal::Matcher< Expr >, InnerMatcher)
 Matches the n'th argument of a call expression or a constructor call expression. More...
 
 AST_MATCHER_P (DeclStmt, declCountIs, unsigned, N)
 Matches declaration statements that contain a specific number of declarations. More...
 
 AST_MATCHER_P2 (DeclStmt, containsDeclaration, unsigned, N, internal::Matcher< Decl >, InnerMatcher)
 Matches the n'th declaration of a declaration statement. More...
 
 AST_MATCHER_P (CXXConstructorDecl, hasAnyConstructorInitializer, internal::Matcher< CXXCtorInitializer >, InnerMatcher)
 Matches a C++ catch statement that has a catch-all handler. More...
 
 AST_MATCHER_P (CXXCtorInitializer, forField, internal::Matcher< FieldDecl >, InnerMatcher)
 Matches the field declaration of a constructor initializer. More...
 
 AST_MATCHER_P (CXXCtorInitializer, withInitializer, internal::Matcher< Expr >, InnerMatcher)
 Matches the initializer expression of a constructor initializer. More...
 
 AST_MATCHER (CXXCtorInitializer, isWritten)
 Matches a constructor initializer if it is explicitly written in code (as opposed to implicitly added by the compiler). More...
 
 AST_POLYMORPHIC_MATCHER_P (hasAnyArgument, AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr, CXXConstructExpr), internal::Matcher< Expr >, InnerMatcher)
 Matches any argument of a call expression or a constructor call expression. More...
 
 AST_MATCHER (CXXConstructExpr, isListInitialization)
 Matches a constructor call expression which uses list initialization. More...
 
 AST_MATCHER_P2 (FunctionDecl, hasParameter, unsigned, N, internal::Matcher< ParmVarDecl >, InnerMatcher)
 Matches the n'th parameter of a function declaration. More...
 
 AST_MATCHER_P (FunctionDecl, hasAnyParameter, internal::Matcher< ParmVarDecl >, InnerMatcher)
 Matches any parameter of a function declaration. More...
 
 AST_MATCHER_P (FunctionDecl, parameterCountIs, unsigned, N)
 Matches FunctionDecls that have a specific parameter count. More...
 
 AST_MATCHER_P (FunctionDecl, returns, internal::Matcher< QualType >, InnerMatcher)
 Matches the return type of a function declaration. More...
 
 AST_MATCHER (FunctionDecl, isExternC)
 Matches extern "C" function declarations. More...
 
 AST_MATCHER (FunctionDecl, isDeleted)
 Matches deleted function declarations. More...
 
 AST_POLYMORPHIC_MATCHER (isConstexpr, AST_POLYMORPHIC_SUPPORTED_TYPES(VarDecl, FunctionDecl))
 Matches constexpr variable and function declarations. More...
 
 AST_POLYMORPHIC_MATCHER_P (hasCondition, AST_POLYMORPHIC_SUPPORTED_TYPES(IfStmt, ForStmt, WhileStmt, DoStmt, ConditionalOperator), internal::Matcher< Expr >, InnerMatcher)
 Matches the condition expression of an if statement, for loop, or conditional operator. More...
 
 AST_MATCHER_P (IfStmt, hasThen, internal::Matcher< Stmt >, InnerMatcher)
 Matches the then-statement of an if statement. More...
 
 AST_MATCHER_P (IfStmt, hasElse, internal::Matcher< Stmt >, InnerMatcher)
 Matches the else-statement of an if statement. More...
 
 AST_POLYMORPHIC_MATCHER_P (equalsBoundNode, AST_POLYMORPHIC_SUPPORTED_TYPES(Stmt, Decl, Type, QualType), std::string, ID)
 Matches if a node equals a previously bound node. More...
 
 AST_MATCHER_P (IfStmt, hasConditionVariableStatement, internal::Matcher< DeclStmt >, InnerMatcher)
 Matches the condition variable statement in an if statement. More...
 
 AST_MATCHER_P (ArraySubscriptExpr, hasIndex, internal::Matcher< Expr >, InnerMatcher)
 Matches the index expression of an array subscript expression. More...
 
 AST_MATCHER_P (ArraySubscriptExpr, hasBase, internal::Matcher< Expr >, InnerMatcher)
 Matches the base expression of an array subscript expression. More...
 
 AST_POLYMORPHIC_MATCHER_P (hasBody, AST_POLYMORPHIC_SUPPORTED_TYPES(DoStmt, ForStmt, WhileStmt, CXXForRangeStmt), internal::Matcher< Stmt >, InnerMatcher)
 Matches a 'for', 'while', or 'do while' statement that has a given body. More...
 
 AST_MATCHER_P (CompoundStmt, hasAnySubstatement, internal::Matcher< Stmt >, InnerMatcher)
 Matches compound statements where at least one substatement matches a given matcher. More...
 
 AST_MATCHER_P (CompoundStmt, statementCountIs, unsigned, N)
 Checks that a compound statement contains a specific number of child statements. More...
 
template<typename ValueT >
internal::PolymorphicMatcherWithParam1
< internal::ValueEqualsMatcher,
ValueT > 
equals (const ValueT &Value)
 Matches literals that are equal to the given value. More...
 
 AST_POLYMORPHIC_MATCHER_P (hasOperatorName, AST_POLYMORPHIC_SUPPORTED_TYPES(BinaryOperator, UnaryOperator), std::string, Name)
 Matches the operator Name of operator expressions (binary or unary). More...
 
 AST_MATCHER_P (BinaryOperator, hasLHS, internal::Matcher< Expr >, InnerMatcher)
 Matches the left hand side of binary operator expressions. More...
 
 AST_MATCHER_P (BinaryOperator, hasRHS, internal::Matcher< Expr >, InnerMatcher)
 Matches the right hand side of binary operator expressions. More...
 
internal::Matcher< BinaryOperatorhasEitherOperand (const internal::Matcher< Expr > &InnerMatcher)
 Matches if either the left hand side or the right hand side of a binary operator matches. More...
 
 AST_MATCHER_P (UnaryOperator, hasUnaryOperand, internal::Matcher< Expr >, InnerMatcher)
 Matches if the operand of a unary operator matches. More...
 
 AST_MATCHER_P (ConditionalOperator, hasTrueExpression, internal::Matcher< Expr >, InnerMatcher)
 Matches if the cast's source expression matches the given matcher. More...
 
 AST_MATCHER_P (ConditionalOperator, hasFalseExpression, internal::Matcher< Expr >, InnerMatcher)
 Matches the false branch expression of a conditional operator. More...
 
 AST_POLYMORPHIC_MATCHER (isDefinition, AST_POLYMORPHIC_SUPPORTED_TYPES(TagDecl, VarDecl, FunctionDecl))
 Matches if a declaration has a body attached. More...
 
 AST_MATCHER_P (CXXMethodDecl, ofClass, internal::Matcher< CXXRecordDecl >, InnerMatcher)
 Matches the class declaration that the given method declaration belongs to. More...
 
 AST_MATCHER (CXXMethodDecl, isVirtual)
 Matches if the given method declaration is virtual. More...
 
 AST_MATCHER (CXXMethodDecl, isPure)
 Matches if the given method declaration is pure. More...
 
 AST_MATCHER (CXXMethodDecl, isConst)
 Matches if the given method declaration is const. More...
 
 AST_MATCHER (CXXMethodDecl, isOverride)
 Matches if the given method declaration overrides another method. More...
 
 AST_MATCHER (MemberExpr, isArrow)
 Matches member expressions that are called with '->' as opposed to '.'. More...
 
 AST_MATCHER (QualType, isInteger)
 Matches QualType nodes that are of integer type. More...
 
 AST_MATCHER (QualType, isConstQualified)
 Matches QualType nodes that are const-qualified, i.e., that include "top-level" const. More...
 
 AST_MATCHER (QualType, hasLocalQualifiers)
 Matches QualType nodes that have local CV-qualifiers attached to the node, not hidden within a typedef. More...
 
 AST_MATCHER_P (MemberExpr, member, internal::Matcher< ValueDecl >, InnerMatcher)
 Matches a member expression where the member is matched by a given matcher. More...
 
 AST_MATCHER_P (MemberExpr, hasObjectExpression, internal::Matcher< Expr >, InnerMatcher)
 Matches a member expression where the object expression is matched by a given matcher. More...
 
 AST_MATCHER_P (UsingDecl, hasAnyUsingShadowDecl, internal::Matcher< UsingShadowDecl >, InnerMatcher)
 Matches any using shadow declaration. More...
 
 AST_MATCHER_P (UsingShadowDecl, hasTargetDecl, internal::Matcher< NamedDecl >, InnerMatcher)
 Matches a using shadow declaration where the target declaration is matched by the given matcher. More...
 
 AST_POLYMORPHIC_MATCHER (isTemplateInstantiation, AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl, VarDecl, CXXRecordDecl))
 Matches template instantiations of function, class, or static member variable template instantiations. More...
 
 AST_MATCHER_FUNCTION (internal::Matcher< Decl >, isInstantiated)
 Matches declarations that are template instantiations or are inside template instantiations. More...
 
 AST_MATCHER_FUNCTION (internal::Matcher< Stmt >, isInTemplateInstantiation)
 Matches statements inside of a template instantiation. More...
 
 AST_POLYMORPHIC_MATCHER (isExplicitTemplateSpecialization, AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl, VarDecl, CXXRecordDecl))
 Matches explicit template specializations of function, class, or static member variable template instantiations. More...
 
 AST_MATCHER_FUNCTION_P_OVERLOAD (internal::BindableMatcher< TypeLoc >, loc, internal::Matcher< QualType >, InnerMatcher, 0)
 Matches TypeLocs for which the given inner QualType-matcher matches. More...
 
 AST_MATCHER (Type, voidType)
 Matches type void. More...
 
 AST_TYPE_MATCHER (BuiltinType, builtinType)
 Matches builtin Types. More...
 
 AST_TYPE_MATCHER (ArrayType, arrayType)
 Matches all kinds of arrays. More...
 
 AST_TYPE_MATCHER (ComplexType, complexType)
 Matches C99 complex types. More...
 
 AST_TYPELOC_TRAVERSE_MATCHER (hasElementType, getElement, AST_POLYMORPHIC_SUPPORTED_TYPES(ArrayType, ComplexType))
 Matches arrays and C99 complex types that have a specific element type. More...
 
 AST_TYPE_MATCHER (ConstantArrayType, constantArrayType)
 Matches C arrays with a specified constant size. More...
 
 AST_MATCHER_P (ConstantArrayType, hasSize, unsigned, N)
 Matches ConstantArrayType nodes that have the specified size. More...
 
 AST_TYPE_MATCHER (DependentSizedArrayType, dependentSizedArrayType)
 Matches C++ arrays whose size is a value-dependent expression. More...
 
 AST_TYPE_MATCHER (IncompleteArrayType, incompleteArrayType)
 Matches C arrays with unspecified size. More...
 
 AST_TYPE_MATCHER (VariableArrayType, variableArrayType)
 Matches C arrays with a specified size that is not an integer-constant-expression. More...
 
 AST_MATCHER_P (VariableArrayType, hasSizeExpr, internal::Matcher< Expr >, InnerMatcher)
 Matches VariableArrayType nodes that have a specific size expression. More...
 
 AST_TYPE_MATCHER (AtomicType, atomicType)
 Matches atomic types. More...
 
 AST_TYPELOC_TRAVERSE_MATCHER (hasValueType, getValue, AST_POLYMORPHIC_SUPPORTED_TYPES(AtomicType))
 Matches atomic types with a specific value type. More...
 
 AST_TYPE_MATCHER (AutoType, autoType)
 Matches types nodes representing C++11 auto types. More...
 
 AST_TYPE_TRAVERSE_MATCHER (hasDeducedType, getDeducedType, AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType))
 Matches AutoType nodes where the deduced type is a specific type. More...
 
 AST_TYPE_MATCHER (FunctionType, functionType)
 Matches FunctionType nodes. More...
 
 AST_TYPE_MATCHER (ParenType, parenType)
 Matches ParenType nodes. More...
 
 AST_TYPE_TRAVERSE_MATCHER (innerType, getInnerType, AST_POLYMORPHIC_SUPPORTED_TYPES(ParenType))
 Matches ParenType nodes where the inner type is a specific type. More...
 
 AST_TYPE_MATCHER (BlockPointerType, blockPointerType)
 Matches block pointer types, i.e. types syntactically represented as "void (^)(int)". More...
 
 AST_TYPE_MATCHER (MemberPointerType, memberPointerType)
 Matches member pointer types. Given. More...
 
 AST_TYPE_MATCHER (PointerType, pointerType)
 Matches pointer types. More...
 
 AST_TYPE_MATCHER (ReferenceType, referenceType)
 Matches both lvalue and rvalue reference types. More...
 
 AST_TYPE_MATCHER (LValueReferenceType, lValueReferenceType)
 Matches lvalue reference types. More...
 
 AST_TYPE_MATCHER (RValueReferenceType, rValueReferenceType)
 Matches rvalue reference types. More...
 
 AST_TYPELOC_TRAVERSE_MATCHER (pointee, getPointee, AST_POLYMORPHIC_SUPPORTED_TYPES(BlockPointerType, MemberPointerType, PointerType, ReferenceType))
 Narrows PointerType (and similar) matchers to those where the pointee matches a given matcher. More...
 
 AST_TYPE_MATCHER (TypedefType, typedefType)
 Matches typedef types. More...
 
 AST_TYPE_MATCHER (UnaryTransformType, unaryTransformType)
 Matches template specialization types. More...
 
 AST_MATCHER_FUNCTION_P_OVERLOAD (internal::BindableMatcher< NestedNameSpecifierLoc >, loc, internal::Matcher< NestedNameSpecifier >, InnerMatcher, 1)
 Matches NestedNameSpecifierLocs for which the given inner NestedNameSpecifier-matcher matches. More...
 
 AST_MATCHER_P (NestedNameSpecifier, specifiesType, internal::Matcher< QualType >, InnerMatcher)
 Matches nested name specifiers that specify a type matching the given QualType matcher without qualifiers. More...
 
 AST_MATCHER_P (NestedNameSpecifierLoc, specifiesTypeLoc, internal::Matcher< TypeLoc >, InnerMatcher)
 Matches nested name specifier locs that specify a type matching the given TypeLoc. More...
 
 AST_MATCHER_P_OVERLOAD (NestedNameSpecifier, hasPrefix, internal::Matcher< NestedNameSpecifier >, InnerMatcher, 0)
 Matches on the prefix of a NestedNameSpecifier. More...
 
 AST_MATCHER_P_OVERLOAD (NestedNameSpecifierLoc, hasPrefix, internal::Matcher< NestedNameSpecifierLoc >, InnerMatcher, 1)
 Matches on the prefix of a NestedNameSpecifierLoc. More...
 
 AST_MATCHER_P (NestedNameSpecifier, specifiesNamespace, internal::Matcher< NamespaceDecl >, InnerMatcher)
 Matches nested name specifiers that specify a namespace matching the given namespace matcher. More...
 
 AST_MATCHER_P (SwitchStmt, forEachSwitchCase, internal::Matcher< SwitchCase >, InnerMatcher)
 Matches each case or default statement belonging to the given switch statement. This matcher may produce multiple matches. More...
 
 AST_MATCHER_P (CXXConstructorDecl, forEachConstructorInitializer, internal::Matcher< CXXCtorInitializer >, InnerMatcher)
 Matches each constructor initializer in a constructor definition. More...
 
 AST_MATCHER_P (CaseStmt, hasCaseConstant, internal::Matcher< Expr >, InnerMatcher)
 If the given case statement does not use the GNU case range extension, matches the constant given in the statement. More...
 
 AST_MATCHER_P (Decl, hasAttr, attr::Kind, AttrKind)
 Matches declaration that has a given attribute. More...
 
template<typename NodeT >
const NodeT * selectFirst (StringRef BoundTo, const SmallVectorImpl< BoundNodes > &Results)
 Returns the first result of type NodeT bound to BoundTo. More...
 
 AST_MATCHER_P_OVERLOAD (Decl, equalsNode, const Decl *, Other, 0)
 Overloads for the equalsNode matcher. FIXME: Implement for other node types. More...
 
 AST_MATCHER_P_OVERLOAD (Stmt, equalsNode, const Stmt *, Other, 1)
 Matches if a node equals another node. More...
 
template<typename MatcherT , typename NodeT >
SmallVector< BoundNodes, 1 > match (MatcherT Matcher, const NodeT &Node, ASTContext &Context)
 Returns the results of matching Matcher on Node. More...
 
template<typename MatcherT >
SmallVector< BoundNodes, 1 > match (MatcherT Matcher, const ast_type_traits::DynTypedNode &Node, ASTContext &Context)
 

Variables

const
internal::VariadicDynCastAllOfMatcher
< Decl, TranslationUnitDecl
translationUnitDecl
 Matches the top declaration context. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, TypedefDecl
typedefDecl
 Matches typedef declarations. More...
 
const
internal::VariadicAllOfMatcher
< Decl
decl
 Matches declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, LinkageSpecDecl
linkageSpecDecl
 Matches a declaration of a linkage specification. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, NamedDecl
namedDecl
 Matches a declaration of anything that could have a name. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, NamespaceDecl
namespaceDecl
 Matches a declaration of a namespace. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, CXXRecordDecl
recordDecl
 Matches C++ class declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, ClassTemplateDecl
classTemplateDecl
 Matches C++ class template declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl,
ClassTemplateSpecializationDecl
classTemplateSpecializationDecl
 Matches C++ class template specializations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, DeclaratorDecl
declaratorDecl
 Matches declarator declarations (field, variable, function and non-type template parameter declarations). More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, ParmVarDecl
parmVarDecl
 Matches parameter variable declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, AccessSpecDecl
accessSpecDecl
 Matches C++ access specifier declarations. More...
 
const
internal::VariadicAllOfMatcher
< CXXCtorInitializer
ctorInitializer
 Matches constructor initializers. More...
 
const
internal::VariadicAllOfMatcher
< TemplateArgument
templateArgument
 Matches template arguments. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, ValueDecl
valueDecl
 Matches any value declaration. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, CXXConstructorDecl
constructorDecl
 Matches C++ constructor declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, CXXDestructorDecl
destructorDecl
 Matches explicit C++ destructor declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, EnumDecl
enumDecl
 Matches enum declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, EnumConstantDecl
enumConstantDecl
 Matches enum constants. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, CXXMethodDecl
methodDecl
 Matches method declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, CXXConversionDecl
conversionDecl
 Matches conversion operator declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, VarDecl
varDecl
 Matches variable declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, FieldDecl
fieldDecl
 Matches field declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, FunctionDecl
functionDecl
 Matches function declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, FunctionTemplateDecl
functionTemplateDecl
 Matches C++ function template declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, FriendDecl
friendDecl
 Matches friend declarations. More...
 
const
internal::VariadicAllOfMatcher
< Stmt
stmt
 Matches statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, DeclStmt
declStmt
 Matches declaration statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, MemberExpr
memberExpr
 Matches member expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CallExpr
callExpr
 Matches call expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, LambdaExpr
lambdaExpr
 Matches lambda expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXMemberCallExpr
memberCallExpr
 Matches member call expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ObjCMessageExpr
objcMessageExpr
 Matches ObjectiveC Message invocation expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ExprWithCleanups
exprWithCleanups
 Matches expressions that introduce cleanups to be run at the end of the sub-expression's evaluation. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, InitListExpr
initListExpr
 Matches init list expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt,
SubstNonTypeTemplateParmExpr
substNonTypeTemplateParmExpr
 Matches substitutions of non-type template parameters. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, UsingDecl
usingDecl
 Matches using declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, UsingDirectiveDecl
usingDirectiveDecl
 Matches using namespace declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl,
UnresolvedUsingValueDecl
unresolvedUsingValueDecl
 Matches unresolved using value declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXConstructExpr
constructExpr
 Matches constructor call expressions (including implicit ones). More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt,
CXXUnresolvedConstructExpr
unresolvedConstructExpr
 Matches unresolved constructor call expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXThisExpr
thisExpr
 Matches implicit and explicit this expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXBindTemporaryExpr
bindTemporaryExpr
 Matches nodes where temporaries are created. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt,
MaterializeTemporaryExpr
materializeTemporaryExpr
 Matches nodes where temporaries are materialized. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXNewExpr
newExpr
 Matches new expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXDeleteExpr
deleteExpr
 Matches delete expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ArraySubscriptExpr
arraySubscriptExpr
 Matches array subscript expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXDefaultArgExpr
defaultArgExpr
 Matches the value of a default argument at the call site. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXOperatorCallExpr
operatorCallExpr
 Matches overloaded operator calls. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, Expr
expr
 Matches expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, DeclRefExpr
declRefExpr
 Matches expressions that refer to declarations. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, IfStmt
ifStmt
 Matches if statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ForStmt
forStmt
 Matches for statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXForRangeStmt
forRangeStmt
 Matches range-based for statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, WhileStmt
whileStmt
 Matches while statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, DoStmt
doStmt
 Matches do statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, BreakStmt
breakStmt
 Matches break statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ContinueStmt
continueStmt
 Matches continue statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ReturnStmt
returnStmt
 Matches return statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, GotoStmt
gotoStmt
 Matches goto statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, LabelStmt
labelStmt
 Matches label statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, SwitchStmt
switchStmt
 Matches switch statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, SwitchCase
switchCase
 Matches case and default statements inside switch statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CaseStmt
caseStmt
 Matches case statements inside switch statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, DefaultStmt
defaultStmt
 Matches default statements inside switch statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CompoundStmt
compoundStmt
 Matches compound statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXCatchStmt
catchStmt
 Matches catch statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXTryStmt
tryStmt
 Matches try statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXThrowExpr
throwExpr
 Matches throw expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, NullStmt
nullStmt
 Matches null statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, AsmStmt
asmStmt
 Matches asm statements. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXBoolLiteralExpr
boolLiteral
 Matches bool literals. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, StringLiteral
stringLiteral
 Matches string literals (also matches wide string literals). More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CharacterLiteral
characterLiteral
 Matches character literals (also matches wchar_t). More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, IntegerLiteral
integerLiteral
 Matches integer literals of all sizes / encodings, e.g. 1, 1L, 0x1 and 1U. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, FloatingLiteral
floatLiteral
 Matches float literals of all sizes / encodings, e.g. 1.0, 1.0f, 1.0L and 1e10. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, UserDefinedLiteral
userDefinedLiteral
 Matches user defined literal operator call. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CompoundLiteralExpr
compoundLiteralExpr
 Matches compound (i.e. non-scalar) literals. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXNullPtrLiteralExpr
nullPtrLiteralExpr
 Matches nullptr literal. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, GNUNullExpr
gnuNullExpr
 Matches GNU __null expression. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, BinaryOperator
binaryOperator
 Matches binary operator expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, UnaryOperator
unaryOperator
 Matches unary operator expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ConditionalOperator
conditionalOperator
 Matches conditional operator expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Decl, StaticAssertDecl
staticAssertDecl
 Matches a C++ static_assert declaration. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXReinterpretCastExpr
reinterpretCastExpr
 Matches a reinterpret_cast expression. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXStaticCastExpr
staticCastExpr
 Matches a C++ static_cast expression. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXDynamicCastExpr
dynamicCastExpr
 Matches a dynamic_cast expression. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXConstCastExpr
constCastExpr
 Matches a const_cast expression. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CStyleCastExpr
cStyleCastExpr
 Matches a C-style cast expression. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ExplicitCastExpr
explicitCastExpr
 Matches explicit cast expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, ImplicitCastExpr
implicitCastExpr
 Matches the implicit cast nodes of Clang's AST. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CastExpr
castExpr
 Matches any cast nodes of Clang's AST. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXFunctionalCastExpr
functionalCastExpr
 Matches functional cast expressions. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CXXTemporaryObjectExpr
temporaryObjectExpr
 Matches functional cast expressions having N != 1 arguments. More...
 
const
internal::VariadicAllOfMatcher
< QualType
qualType
 Matches QualTypes in the clang AST. More...
 
const
internal::VariadicAllOfMatcher
< Type
type
 Matches Types in the clang AST. More...
 
const
internal::VariadicAllOfMatcher
< TypeLoc
typeLoc
 Matches TypeLocs in the clang AST. More...
 
const
internal::VariadicOperatorMatcherFunc
< 2, UINT_MAX
eachOf
 Matches if any of the given matchers matches. More...
 
const
internal::VariadicOperatorMatcherFunc
< 2, UINT_MAX
anyOf
 Matches if any of the given matchers matches. More...
 
const
internal::VariadicOperatorMatcherFunc
< 2, UINT_MAX
allOf
 Matches if all given matchers match. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt,
UnaryExprOrTypeTraitExpr
unaryExprOrTypeTraitExpr
 Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL) More...
 
const
internal::ArgumentAdaptingMatcherFunc
< internal::HasMatcher >
LLVM_ATTRIBUTE_UNUSED 
has = {}
 Matches the first method of a class or struct that satisfies InnerMatcher. More...
 
const
internal::ArgumentAdaptingMatcherFunc
< internal::HasDescendantMatcher >
LLVM_ATTRIBUTE_UNUSED 
hasDescendant = {}
 Matches AST nodes that have descendant AST nodes that match the provided matcher. More...
 
const
internal::ArgumentAdaptingMatcherFunc
< internal::ForEachMatcher >
LLVM_ATTRIBUTE_UNUSED 
forEach = {}
 Matches AST nodes that have child AST nodes that match the provided matcher. More...
 
const
internal::ArgumentAdaptingMatcherFunc
< internal::ForEachDescendantMatcher >
LLVM_ATTRIBUTE_UNUSED 
forEachDescendant = {}
 Matches AST nodes that have descendant AST nodes that match the provided matcher. More...
 
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. More...
 
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. More...
 
const
internal::VariadicOperatorMatcherFunc< 1, 1 > 
unless
 Matches if the provided matcher does not match. More...
 
const
internal::VariadicAllOfMatcher
< NestedNameSpecifier
nestedNameSpecifier
 Matches record types (e.g. structs, classes). More...
 
const
internal::VariadicAllOfMatcher
< NestedNameSpecifierLoc
nestedNameSpecifierLoc
 Same as nestedNameSpecifier but matches NestedNameSpecifierLoc. More...
 
const
internal::VariadicDynCastAllOfMatcher
< Stmt, CUDAKernelCallExpr
CUDAKernelCallExpr
 Matches CUDA kernel call expression. More...
 

Typedef Documentation

Types of matchers for the top-level classes in the AST class hierarchy.

Definition at line 123 of file ASTMatchers.h.

Definition at line 128 of file ASTMatchers.h.

Definition at line 127 of file ASTMatchers.h.

Definition at line 124 of file ASTMatchers.h.

Definition at line 126 of file ASTMatchers.h.

Definition at line 125 of file ASTMatchers.h.

Function Documentation

internal::Matcher<Stmt> clang::ast_matchers::alignOfExpr ( const internal::Matcher< UnaryExprOrTypeTraitExpr > &  InnerMatcher)
inline

Same as unaryExprOrTypeTraitExpr, but only matching alignof.

Definition at line 1723 of file ASTMatchers.h.

References allOf, stmt, clang::UETT_AlignOf, and unaryExprOrTypeTraitExpr.

internal::TrueMatcher clang::ast_matchers::anything ( )
inline

Matches any node.

Useful when another matcher requires a child matcher, but there's no additional constraint. This will often be used with an explicit conversion to an internal::Matcher<> type such as TypeMatcher.

Example: DeclarationMatcher(anything()) matches all declarations, e.g.,

"int* p" and "void f()" in
int* p;
void f();

Usable as: Any Matcher

Definition at line 145 of file ASTMatchers.h.

clang::ast_matchers::AST_MATCHER ( Decl  ,
isPublic   
)

Matches public C++ declarations.

Given

class C {
public: int a;
protected: int b;
private: int c;
};

fieldDecl(isPublic()) matches 'int a;'

Definition at line 401 of file ASTMatchers.h.

References clang::AS_public, and Node.

clang::ast_matchers::AST_MATCHER ( Decl  ,
isProtected   
)

Matches protected C++ declarations.

Given

class C {
public: int a;
protected: int b;
private: int c;
};

fieldDecl(isProtected()) matches 'int b;'

Definition at line 417 of file ASTMatchers.h.

References clang::AS_protected, and Node.

clang::ast_matchers::AST_MATCHER ( Decl  ,
isPrivate   
)

Matches private C++ declarations.

Given

class C {
public: int a;
protected: int b;
private: int c;
};

fieldDecl(isPrivate()) matches 'int c;'

Definition at line 433 of file ASTMatchers.h.

References clang::AS_private, and Node.

clang::ast_matchers::AST_MATCHER ( Decl  ,
isImplicit   
)

Matches a declaration that has been implicitly added by the compiler (eg. implicit default/copy constructors).

Definition at line 439 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( TemplateArgument  ,
isIntegral   
)

Matches a TemplateArgument that is an integral value.

Given

template<int T> struct A {};
C<42> c;

classTemplateSpecializationDecl( hasAnyTemplateArgument(isIntegral())) matches the implicit instantiation of C in C<42> with isIntegral() matching 42.

Definition at line 651 of file ASTMatchers.h.

References clang::TemplateArgument::Integral, and Node.

clang::ast_matchers::AST_MATCHER ( ObjCMessageExpr  ,
hasNullSelector   
)

Matches when the selector is the empty selector.

Matches only when the selector of the objCMessageExpr is NULL. This may represent an error condition in the tree!

Definition at line 2106 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( ObjCMessageExpr  ,
hasUnarySelector   
)

Matches when the selector is a Unary Selector.

matcher = objCMessageExpr(matchesSelector(hasUnarySelector()); matches self.bodyView in the code below, but NOT the outer message invocation of "loadHTMLString:baseURL:".

[self.bodyView loadHTMLString:html baseURL:NULL];

Definition at line 2118 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( ObjCMessageExpr  ,
hasKeywordSelector   
)

Matches when the selector is a keyword selector.

objCMessageExpr(hasKeywordSelector()) matches the generated setFrame message expression in

UIWebView *webView = ...;
CGRect bodyFrame = webView.frame;
bodyFrame.size.height = self.bodyContentHeight;
webView.frame = bodyFrame;
// ^---- matches here

Definition at line 2135 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( VarDecl  ,
hasLocalStorage   
)

Matches a variable declaration that has function scope and is a non-static local variable.

Example matches x (matcher = varDecl(hasLocalStorage())

void f() {
int x;
static int y;
}
int z;

Definition at line 2435 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( VarDecl  ,
hasGlobalStorage   
)

Matches a variable declaration that does not have local storage.

Example matches y and z (matcher = varDecl(hasGlobalStorage())

void f() {
int x;
static int y;
}
int z;

Definition at line 2449 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( CXXCtorInitializer  ,
isWritten   
)

Matches a constructor initializer if it is explicitly written in code (as opposed to implicitly added by the compiler).

Given

struct Foo {
Foo() { }
Foo(int) : foo_("A") { }
string foo_;
};

constructorDecl(hasAnyConstructorInitializer(isWritten())) will match Foo(int), but not Foo()

Definition at line 2618 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( CXXConstructExpr  ,
isListInitialization   
)

Matches a constructor call expression which uses list initialization.

Definition at line 2653 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( FunctionDecl  ,
isExternC   
)

Matches extern "C" function declarations.

Given:

extern "C" void f() {}
extern "C" { void g() {} }
void h() {}

functionDecl(isExternC()) matches the declaration of f and g, but not the declaration h

Definition at line 2729 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( FunctionDecl  ,
isDeleted   
)

Matches deleted function declarations.

Given:

void Func();
void DeletedFunc() = delete;

functionDecl(isDeleted()) matches the declaration of DeletedFunc, but not Func.

Definition at line 2742 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( CXXMethodDecl  ,
isVirtual   
)

Matches if the given method declaration is virtual.

Given

class A {
public:
virtual void x();
};

matches A::x

Definition at line 3131 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( CXXMethodDecl  ,
isPure   
)

Matches if the given method declaration is pure.

Given

class A {
public:
virtual void x() = 0;
};

matches A::x

Definition at line 3145 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( CXXMethodDecl  ,
isConst   
)

Matches if the given method declaration is const.

Given

struct A {
void foo() const;
void bar();
};

methodDecl(isConst()) matches A::foo() but not A::bar()

Definition at line 3160 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( CXXMethodDecl  ,
isOverride   
)

Matches if the given method declaration overrides another method.

Given

class A {
public:
virtual void x();
};
class B : public A {
public:
virtual void x();
};

matches B::x

Definition at line 3178 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( MemberExpr  ,
isArrow   
)

Matches member expressions that are called with '->' as opposed to '.'.

Member calls on the implicit this pointer match as called with '->'.

Given

class Y {
void x() { this->x(); x(); Y y; y.x(); a; this->b; Y::b; }
int a;
static int b;
};

memberExpr(isArrow()) matches this->x, x, y.x, a, this->b

Definition at line 3197 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( QualType  ,
isInteger   
)

Matches QualType nodes that are of integer type.

Given

void a(int);
void b(long);
void c(double);

functionDecl(hasAnyParameter(hasType(isInteger()))) matches "a(int)", "b(long)", but not "c(double)".

Definition at line 3211 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( QualType  ,
isConstQualified   
)

Matches QualType nodes that are const-qualified, i.e., that include "top-level" const.

Given

void a(int);
void b(int const);
void c(const int);
void d(const int*);
void e(int const) {};

functionDecl(hasAnyParameter(hasType(isConstQualified()))) matches "void b(int const)", "void c(const int)" and "void e(int const) {}". It does not match d as there is no top-level const on the parameter type "const int *".

Definition at line 3230 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( QualType  ,
hasLocalQualifiers   
)

Matches QualType nodes that have local CV-qualifiers attached to the node, not hidden within a typedef.

Given

typedef const int const_int;
const_int i;
int *const j;
int *volatile k;
int m;

varDecl(hasType(hasLocalQualifiers())) matches only j and k. i is const-qualified but the qualifier is not local.

Definition at line 3247 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER ( Type  ,
voidType   
)

Matches type void.

Given

struct S { void func(); };

functionDecl(returns(voidType())) matches "void func();"

Definition at line 3419 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_FUNCTION ( internal::Matcher< Decl >  ,
isInstantiated   
)

Matches declarations that are template instantiations or are inside template instantiations.

Given

template<typename T> void A(T t) { T i; }
A(0);
A(0U);

functionDecl(isInstantiated()) matches 'A(int) {...};' and 'A(unsigned) {...}'.

Definition at line 3359 of file ASTMatchers.h.

References anyOf, decl, functionDecl, hasAncestor, clang::isTemplateInstantiation(), and recordDecl.

clang::ast_matchers::AST_MATCHER_FUNCTION ( internal::Matcher< Stmt ,
isInTemplateInstantiation   
)

Matches statements inside of a template instantiation.

Given

int j;
template<typename T> void A(T t) { T i; j += 42;}
A(0);
A(0U);

declStmt(isInTemplateInstantiation()) matches 'int i;' and 'unsigned i'. unless(stmt(isInTemplateInstantiation())) will NOT match j += 42; as it's shared between the template definition and instantiation.

Definition at line 3379 of file ASTMatchers.h.

References anyOf, decl, functionDecl, hasAncestor, clang::isTemplateInstantiation(), recordDecl, and stmt.

clang::ast_matchers::AST_MATCHER_FUNCTION_P_OVERLOAD ( internal::BindableMatcher< TypeLoc >  ,
loc  ,
internal::Matcher< QualType >  ,
InnerMatcher  ,
 
)

Matches TypeLocs for which the given inner QualType-matcher matches.

Definition at line 3405 of file ASTMatchers.h.

References InnerMatcher.

clang::ast_matchers::AST_MATCHER_FUNCTION_P_OVERLOAD ( internal::BindableMatcher< NestedNameSpecifierLoc >  ,
loc  ,
internal::Matcher< NestedNameSpecifier >  ,
InnerMatcher  ,
 
)

Matches NestedNameSpecifierLocs for which the given inner NestedNameSpecifier-matcher matches.

Definition at line 3904 of file ASTMatchers.h.

References InnerMatcher.

clang::ast_matchers::AST_MATCHER_P ( Expr  ,
ignoringImpCasts  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches expressions that match InnerMatcher after any implicit casts are stripped off.

Parentheses and explicit casts are not discarded. Given

int arr[5];
int a = 0;
char b = 0;
const int c = a;
int *d = arr;
long e = (long) 0l;

The matchers

varDecl(hasInitializer(ignoringImpCasts(integerLiteral())))
varDecl(hasInitializer(ignoringImpCasts(declRefExpr())))

would match the declarations for a, b, c, and d, but not e. While

varDecl(hasInitializer(integerLiteral()))
varDecl(hasInitializer(declRefExpr()))

only match the declarations for b, c, and d.

Definition at line 491 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( Expr  ,
ignoringParenCasts  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches expressions that match InnerMatcher after parentheses and casts are stripped off.

Implicit and non-C Style casts are also discarded. Given

int a = 0;
char b = (0);
void* c = reinterpret_cast<char*>(0);
char d = char(0);

The matcher varDecl(hasInitializer(ignoringParenCasts(integerLiteral()))) would match the declarations for a, b, c, and d. while varDecl(hasInitializer(integerLiteral())) only match the declaration for a.

Definition at line 513 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( Expr  ,
ignoringParenImpCasts  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches expressions that match InnerMatcher after implicit casts and parentheses are stripped off.

Explicit casts are not discarded. Given

int arr[5];
int a = 0;
char b = (0);
const int c = a;
int *d = (arr);
long e = ((long) 0l);

The matchers varDecl(hasInitializer(ignoringParenImpCasts(integerLiteral()))) varDecl(hasInitializer(ignoringParenImpCasts(declRefExpr()))) would match the declarations for a, b, c, and d, but not e. while varDecl(hasInitializer(integerLiteral())) varDecl(hasInitializer(declRefExpr())) would only match the declaration for a.

Definition at line 538 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( TemplateArgument  ,
refersToType  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches a TemplateArgument that refers to a certain type.

Given

struct X {};
template<typename T> struct A {};
A<X> a;

classTemplateSpecializationDecl(hasAnyTemplateArgument( refersToType(class(hasName("X"))))) matches the specialization A<X>

Definition at line 595 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, Node, and clang::TemplateArgument::Type.

clang::ast_matchers::AST_MATCHER_P ( TemplateArgument  ,
refersToDeclaration  ,
internal::Matcher< Decl >  ,
InnerMatcher   
)

Matches a canonical TemplateArgument that refers to a certain declaration.

Given

template<typename T> struct A {};
struct B { B* next; };
A<&B::next> a;

classTemplateSpecializationDecl(hasAnyTemplateArgument( refersToDeclaration(fieldDecl(hasName("next")))) matches the specialization A<&B::next> with fieldDecl(...) matching B::next

Definition at line 615 of file ASTMatchers.h.

References Builder, clang::TemplateArgument::Declaration, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( TemplateArgument  ,
isExpr  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches a sugar TemplateArgument that refers to a certain expression.

Given

template<typename T> struct A {};
struct B { B* next; };
A<&B::next> a;

templateSpecializationType(hasAnyTemplateArgument( isExpr(hasDescendant(declRefExpr(to(fieldDecl(hasName("next")))))))) matches the specialization A<&B::next> with fieldDecl(...) matching B::next

Definition at line 634 of file ASTMatchers.h.

References Builder, clang::TemplateArgument::Expression, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( TemplateArgument  ,
refersToIntegralType  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches a TemplateArgument that referes to an integral type.

Given

template<int T> struct A {};
C<42> c;

classTemplateSpecializationDecl( hasAnyTemplateArgument(refersToIntegralType(asString("int")))) matches the implicit instantiation of C in C<42>.

Definition at line 665 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, clang::TemplateArgument::Integral, and Node.

clang::ast_matchers::AST_MATCHER_P ( TemplateArgument  ,
equalsIntegralValue  ,
std::string  ,
Value   
)

Matches a TemplateArgument of integral type with a given value.

Note that 'Value' is a string as the template argument's value is an arbitrary precision integer. 'Value' must be euqal to the canonical representation of that integral value in base 10.

Given

template<int T> struct A {};
C<42> c;

classTemplateSpecializationDecl( hasAnyTemplateArgument(equalsIntegralValue("42"))) matches the implicit instantiation of C in C<42>.

Definition at line 686 of file ASTMatchers.h.

References clang::TemplateArgument::Integral, and Node.

clang::ast_matchers::AST_MATCHER_P ( ForStmt  ,
hasIncrement  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches the increment statement of a for loop.

Example: forStmt(hasIncrement(unaryOperator(hasOperatorName("++")))) matches '++x' in

for (x; x < N; ++x) { }

Definition at line 1146 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ForStmt  ,
hasLoopInit  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches the initialization statement of a for loop.

Example: forStmt(hasLoopInit(declStmt())) matches 'int x = 0' in

for (int x = 0; x < N; ++x) { }

Definition at line 1161 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CXXForRangeStmt  ,
hasLoopVariable  ,
internal::Matcher< VarDecl >  ,
InnerMatcher   
)

Matches the initialization statement of a for loop.

Example: forStmt(hasLoopVariable(anything())) matches 'int x' in

for (int x : a) { }

Definition at line 1184 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CXXForRangeStmt  ,
hasRangeInit  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the range initialization statement of a for loop.

Example: forStmt(hasRangeInit(anything())) matches 'a' in

for (int x : a) { }

Definition at line 1198 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( UnaryExprOrTypeTraitExpr  ,
hasArgumentOfType  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches unary expressions that have a specific type of argument.

Given

int a, c; float b; int s = sizeof(a) + sizeof(b) + alignof(c);

unaryExprOrTypeTraitExpr(hasArgumentOfType(asString("int")) matches sizeof(a) and alignof(c)

Definition at line 1702 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( UnaryExprOrTypeTraitExpr  ,
ofKind  ,
UnaryExprOrTypeTrait  ,
Kind   
)

Matches unary expressions of a certain kind.

Given

int x;
int s = sizeof(x) + alignof(x)

unaryExprOrTypeTraitExpr(ofKind(UETT_SizeOf)) matches sizeof(x)

Definition at line 1717 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( NamedDecl  ,
matchesName  ,
std::string  ,
RegExp   
)

Matches NamedDecl nodes whose fully qualified names contain a substring matched by the given RegExp.

Supports specifying enclosing namespaces or classes by prefixing the name with '<enclosing>::'. Does not match typedefs of an underlying type with the given name.

Example matches X (regexp == "::X")

class X;

Example matches X (regexp is one of "::X", "^foo::.*X", among others)

namespace foo { namespace bar { class X; } }

Definition at line 1772 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( CXXRecordDecl  ,
isDerivedFrom  ,
internal::Matcher< NamedDecl >  ,
Base   
)

Matches C++ classes that are directly or indirectly derived from a class matching Base.

Note that a class is not considered to be derived from itself.

Example matches Y, Z, C (Base == hasName("X"))

class X;
class Y : public X {}; // directly derived
class Z : public Y {}; // indirectly derived
typedef X A;
typedef A B;
class C : public B {}; // derived from a typedef of X

In the following example, Bar matches isDerivedFrom(hasName("X")):

class Foo;
typedef Foo X;
class Bar : public Foo {}; // derived from a type that X is a typedef of

Definition at line 1827 of file ASTMatchers.h.

References Builder, Finder, and Node.

clang::ast_matchers::AST_MATCHER_P ( CXXMemberCallExpr  ,
on  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches on the implicit object argument of a member call expression.

Example matches y.x() (matcher = callExpr(on(hasType(recordDecl(hasName("Y"))))))

class Y { public: void x(); };
void z() { Y y; y.x(); }",

FIXME: Overload to allow directly matching types?

Definition at line 2048 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ObjCMessageExpr  ,
hasReceiverType  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches on the receiver of an ObjectiveC Message expression.

Example matcher = objCMessageExpr(hasRecieverType(asString("UIWebView *"))); matches the [webView ...] message invocation.

NSString *webViewJavaScript = ...
UIWebView *webView = ...
[webView stringByEvaluatingJavaScriptFromString:webViewJavascript];

Definition at line 2067 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ObjCMessageExpr  ,
hasSelector  ,
std::string  ,
BaseName   
)

Matches when BaseName == Selector.getAsString()

matcher = objCMessageExpr(hasSelector("loadHTMLString:baseURL:")); matches the outer message expr in the code below, but NOT the message invocation for self.bodyView.

[self.bodyView loadHTMLString:html baseURL:NULL];

Definition at line 2081 of file ASTMatchers.h.

References clang::Selector::getAsString(), and Node.

clang::ast_matchers::AST_MATCHER_P ( ObjCMessageExpr  ,
matchesSelector  ,
std::string  ,
RegExp   
)

Matches ObjC selectors whose name contains a substring matched by the given RegExp. matcher = objCMessageExpr(matchesSelector("loadHTMLString\:baseURL?")); matches the outer message expr in the code below, but NOT the message invocation for self.bodyView.

[self.bodyView loadHTMLString:html baseURL:NULL];

Definition at line 2095 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( ObjCMessageExpr  ,
numSelectorArgs  ,
unsigned  ,
 
)

Matches when the selector has the specified number of arguments.

matcher = objCMessageExpr(numSelectorArgs(1)); matches self.bodyView in the code below

matcher = objCMessageExpr(numSelectorArgs(2)); matches the invocation of "loadHTMLString:baseURL:" but not that of self.bodyView

[self.bodyView loadHTMLString:html baseURL:NULL];

Definition at line 2150 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( CallExpr  ,
callee  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches if the call expression's callee expression matches.

Given

class Y { void x() { this->x(); x(); Y y; y.x(); } };
void f() { f(); }

callExpr(callee(expr())) matches this->x(), x(), y.x(), f() with callee(...) matching this->x, x, y.x, f respectively

Note: Callee cannot take the more general internal::Matcher<Expr> because this introduces ambiguous overloads with calls to Callee taking a internal::Matcher<Decl>, as the matcher hierarchy is purely implemented in terms of implicit casts.

Definition at line 2170 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( DeclaratorDecl  ,
hasTypeLoc  ,
internal::Matcher< TypeLoc >  ,
Inner   
)

Matches if the type location of the declarator decl's type matches the inner matcher.

Given

int x;

declaratorDecl(hasTypeLoc(loc(asString("int")))) matches int x

Definition at line 2239 of file ASTMatchers.h.

References Builder, Finder, and Node.

clang::ast_matchers::AST_MATCHER_P ( QualType  ,
asString  ,
std::string  ,
Name   
)

Matches if the matched type is represented by the given string.

Given

class Y { public: void x(); };
void z() { Y* y; y->x(); }

callExpr(on(hasType(asString("class Y *")))) matches y->x()

Definition at line 2255 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( QualType  ,
pointsTo  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches if the matched type is a pointer type and the pointee type matches the specified matcher.

Example matches y->x() (matcher = callExpr(on(hasType(pointsTo(recordDecl(hasName("Y")))))))

class Y { public: void x(); };
void z() { Y *y; y->x(); }

Definition at line 2268 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( QualType  ,
references  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches if the matched type is a reference type and the referenced type matches the specified matcher.

Example matches X &x and const X &y (matcher = varDecl(hasType(references(recordDecl(hasName("X"))))))

class X {
void a(X b) {
X &x = b;
const X &y = b;
}
};

Definition at line 2295 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( DeclRefExpr  ,
to  ,
internal::Matcher< Decl >  ,
InnerMatcher   
)

Matches QualTypes whose canonical type matches InnerMatcher.

Given:

typedef int &int_ref;
int a;
int_ref b = a;
\code
\c varDecl(hasType(qualType(referenceType()))))) will not match the
declaration of b but \c
varDecl(hasType(qualType(hasCanonicalType(referenceType())))))) does.
AST_MATCHER_P(QualType, hasCanonicalType, internal::Matcher<QualType>,
if (Node.isNull())
return false;
return InnerMatcher.matches(Node.getCanonicalType(), Finder, Builder);
}
\brief Overloaded to match the referenced type's declaration.
AST_MATCHER_P_OVERLOAD(QualType, references, internal::Matcher<Decl>,
InnerMatcher, 1) {
return references(qualType(hasDeclaration(InnerMatcher)))
.matches(Node, Finder, Builder);
}
AST_MATCHER_P(CXXMemberCallExpr, onImplicitObjectArgument,
internal::Matcher<Expr>, InnerMatcher) {
const Expr *ExprNode = Node.getImplicitObjectArgument();
return (ExprNode != nullptr &&
InnerMatcher.matches(*ExprNode, Finder, Builder));
}
\brief Matches if the expression's type either matches the specified
matcher, or is a pointer to a type that matches the InnerMatcher.
AST_MATCHER_P_OVERLOAD(CXXMemberCallExpr, thisPointerType,
internal::Matcher<QualType>, InnerMatcher, 0) {
return onImplicitObjectArgument(
anyOf(hasType(InnerMatcher), hasType(pointsTo(InnerMatcher))))
.matches(Node, Finder, Builder);
}
\brief Overloaded to match the type's declaration.
AST_MATCHER_P_OVERLOAD(CXXMemberCallExpr, thisPointerType,
internal::Matcher<Decl>, InnerMatcher, 1) {
return onImplicitObjectArgument(
anyOf(hasType(InnerMatcher), hasType(pointsTo(InnerMatcher))))
.matches(Node, Finder, Builder);
}
\brief Matches a DeclRefExpr that refers to a declaration that matches the
specified matcher.
Example matches x in if(x)
(matcher = declRefExpr(to(varDecl(hasName("x")))))
\code
bool x;
if (x) {}

Definition at line 2360 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( DeclRefExpr  ,
throughUsingDecl  ,
internal::Matcher< UsingShadowDecl >  ,
InnerMatcher   
)

Matches a DeclRefExpr that refers to a declaration through a specific using shadow declaration.

FIXME: This currently only works for functions. Fix.

Given

namespace a { void f() {} }
using a::f;
void g() {
f(); // Matches this ..
a::f(); // .. but not this.
}

declRefExpr(throughUsingDeclaration(anything())) matches f()

Definition at line 2383 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( DeclStmt  ,
hasSingleDecl  ,
internal::Matcher< Decl >  ,
InnerMatcher   
)

Matches the Decl of a DeclStmt which has a single declaration.

Given

int a, b;
int c;

declStmt(hasSingleDecl(anything())) matches 'int c;' but not 'int a, b;'.

Definition at line 2400 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( VarDecl  ,
hasInitializer  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches a variable declaration that has an initializer expression that matches the given matcher.

Example matches x (matcher = varDecl(hasInitializer(callExpr())))

bool y() { return true; }
bool x = y();

Definition at line 2416 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( DeclStmt  ,
declCountIs  ,
unsigned  ,
 
)

Matches declaration statements that contain a specific number of declarations.

Example: Given

int a, b;
int c;
int d = 2, e;

declCountIs(2) matches 'int a, b;' and 'int d = 2, e;', but not 'int c;'.

Definition at line 2498 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( CXXConstructorDecl  ,
hasAnyConstructorInitializer  ,
internal::Matcher< CXXCtorInitializer >  ,
InnerMatcher   
)

Matches a C++ catch statement that has a catch-all handler.

Given

try {
// ...
} catch (int) {
// ...
} catch (...) {
// ...
}
/endcode
catchStmt(isCatchAll()) matches catch(...) but not catch(int).
AST_MATCHER(CXXCatchStmt, isCatchAll) {
return Node.getExceptionDecl() == nullptr;
}
\brief Matches a constructor initializer.
Given
\code
struct Foo {
Foo() : foo_(1) { }
int foo_;
};

recordDecl(has(constructorDecl(hasAnyConstructorInitializer(anything())))) record matches Foo, hasAnyConstructorInitializer matches foo_(1)

Definition at line 2559 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CXXCtorInitializer  ,
forField  ,
internal::Matcher< FieldDecl >  ,
InnerMatcher   
)

Matches the field declaration of a constructor initializer.

Given

struct Foo {
Foo() : foo_(1) { }
int foo_;
};

recordDecl(has(constructorDecl(hasAnyConstructorInitializer( forField(hasName("foo_")))))) matches Foo with forField matching foo_

Definition at line 2578 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CXXCtorInitializer  ,
withInitializer  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the initializer expression of a constructor initializer.

Given

struct Foo {
Foo() : foo_(1) { }
int foo_;
};

recordDecl(has(constructorDecl(hasAnyConstructorInitializer( withInitializer(integerLiteral(equals(1))))))) matches Foo with withInitializer matching (1)

Definition at line 2598 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( FunctionDecl  ,
hasAnyParameter  ,
internal::Matcher< ParmVarDecl >  ,
InnerMatcher   
)

Matches any parameter of a function declaration.

Does not match the 'this' parameter of a method.

Given

class X { void f(int x, int y, int z) {} };

methodDecl(hasAnyParameter(hasName("y"))) matches f(int x, int y, int z) {} with hasAnyParameter(...) matching int y

Definition at line 2687 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( FunctionDecl  ,
parameterCountIs  ,
unsigned  ,
 
)

Matches FunctionDecls that have a specific parameter count.

Given

void f(int i) {}
void g(int i, int j) {}

functionDecl(parameterCountIs(2)) matches g(int i, int j) {}

Definition at line 2702 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( FunctionDecl  ,
returns  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches the return type of a function declaration.

Given:

class X { int f() { return 1; } };

methodDecl(returns(asString("int"))) matches int f() { return 1; }

Definition at line 2714 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( IfStmt  ,
hasThen  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches the then-statement of an if statement.

Examples matches the if statement (matcher = ifStmt(hasThen(boolLiteral(equals(true)))))

if (false) true; else false;

Definition at line 2787 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( IfStmt  ,
hasElse  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches the else-statement of an if statement.

Examples matches the if statement (matcher = ifStmt(hasElse(boolLiteral(equals(true)))))

if (false) false; else true;

Definition at line 2799 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( IfStmt  ,
hasConditionVariableStatement  ,
internal::Matcher< DeclStmt >  ,
InnerMatcher   
)

Matches the condition variable statement in an if statement.

Given

if (A* a = GetAPointer()) {}

hasConditionVariableStatement(...) matches 'A* a = GetAPointer()'.

Definition at line 2849 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ArraySubscriptExpr  ,
hasIndex  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the index expression of an array subscript expression.

Given

int i[5];
void f() { i[1] = 42; }

arraySubscriptExpression(hasIndex(integerLiteral())) matches i[1] with the integerLiteral() matching 1

Definition at line 2866 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ArraySubscriptExpr  ,
hasBase  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the base expression of an array subscript expression.

Given

int i[5];
void f() { i[1] = 42; }

arraySubscriptExpression(hasBase(implicitCastExpr( hasSourceExpression(declRefExpr())))) matches i[1] with the declRefExpr() matching i

Definition at line 2883 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CompoundStmt  ,
hasAnySubstatement  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches compound statements where at least one substatement matches a given matcher.

Given

{ {}; 1+2; }

hasAnySubstatement(compoundStmt()) matches '{ {}; 1+2; }' with compoundStmt() matching '{}'

Definition at line 2922 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CompoundStmt  ,
statementCountIs  ,
unsigned  ,
 
)

Checks that a compound statement contains a specific number of child statements.

Example: Given

{ for (;;) {} }

compoundStmt(statementCountIs(0))) matches '{}' but does not match the outer compound statement.

Definition at line 2938 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( BinaryOperator  ,
hasLHS  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the left hand side of binary operator expressions.

Example matches a (matcher = binaryOperator(hasLHS()))

a || b

Definition at line 2979 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( BinaryOperator  ,
hasRHS  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the right hand side of binary operator expressions.

Example matches b (matcher = binaryOperator(hasRHS()))

a || b

Definition at line 2992 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( UnaryOperator  ,
hasUnaryOperand  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches if the operand of a unary operator matches.

Example matches true (matcher = hasUnaryOperand(boolLiteral(equals(true))))

!true

Definition at line 3012 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ConditionalOperator  ,
hasTrueExpression  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches if the cast's source expression matches the given matcher.

Example: matches "a string" (matcher = hasSourceExpression(constructExpr()))

class URL { URL(string); };
URL url = "a string";
AST_MATCHER_P(CastExpr, hasSourceExpression,
internal::Matcher<Expr>, InnerMatcher) {
const Expr* const SubExpression = Node.getSubExpr();
return (SubExpression != nullptr &&
InnerMatcher.matches(*SubExpression, Finder, Builder));
}
\brief Matches casts whose destination type matches a given matcher.
(Note: Clang's AST refers to other conversions as "casts" too, and calls
actual casts "explicit" casts.)
AST_MATCHER_P(ExplicitCastExpr, hasDestinationType,
internal::Matcher<QualType>, InnerMatcher) {
const QualType NodeType = Node.getTypeAsWritten();
return InnerMatcher.matches(NodeType, Finder, Builder);
}
\brief Matches implicit casts whose destination type matches a given
matcher.
FIXME: Unit test this matcher
AST_MATCHER_P(ImplicitCastExpr, hasImplicitDestinationType,
internal::Matcher<QualType>, InnerMatcher) {
return InnerMatcher.matches(Node.getType(), Finder, Builder);
}
\brief Matches the true branch expression of a conditional operator.
Example matches a
\code
condition ? a : b

Definition at line 3058 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ConditionalOperator  ,
hasFalseExpression  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the false branch expression of a conditional operator.

Example matches b

condition ? a : b

Definition at line 3071 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( CXXMethodDecl  ,
ofClass  ,
internal::Matcher< CXXRecordDecl >  ,
InnerMatcher   
)

Matches the class declaration that the given method declaration belongs to.

FIXME: Generalize this for other kinds of declarations. FIXME: What other kind of declarations would we need to generalize this to?

Example matches A() in the last line (matcher = constructExpr(hasDeclaration(methodDecl( ofClass(hasName("A"))))))

class A {
public:
A();
};
A a = A();

Definition at line 3114 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( MemberExpr  ,
member  ,
internal::Matcher< ValueDecl >  ,
InnerMatcher   
)

Matches a member expression where the member is matched by a given matcher.

Given

struct { int first, second; } first, second;
int i(second.first);
int j(first.second);

memberExpr(member(hasName("first"))) matches second.first but not first.second (because the member name there is "second").

Definition at line 3263 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( MemberExpr  ,
hasObjectExpression  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches a member expression where the object expression is matched by a given matcher.

Given

struct X { int m; };
void f(X x) { x.m; m; }

memberExpr(hasObjectExpression(hasType(recordDecl(hasName("X"))))))) matches "x.m" and "m" with hasObjectExpression(...) matching "x" and the implicit object expression of "m" which has type X*.

Definition at line 3280 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( UsingDecl  ,
hasAnyUsingShadowDecl  ,
internal::Matcher< UsingShadowDecl >  ,
InnerMatcher   
)

Matches any using shadow declaration.

Given

namespace X { void b(); }
using X::b;

usingDecl(hasAnyUsingShadowDecl(hasName("b")))) matches

using X::b

Definition at line 3294 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( UsingShadowDecl  ,
hasTargetDecl  ,
internal::Matcher< NamedDecl >  ,
InnerMatcher   
)

Matches a using shadow declaration where the target declaration is matched by the given matcher.

Given

namespace X { int a; void b(); }
using X::a;
using X::b;

usingDecl(hasAnyUsingShadowDecl(hasTargetDecl(functionDecl()))) matches

using X::b

but not

using X::a

Definition at line 3312 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( ConstantArrayType  ,
hasSize  ,
unsigned  ,
 
)

Matches ConstantArrayType nodes that have the specified size.

Given

int a[42];
int b[2 * 21];
int c[41], d[43];

constantArrayType(hasSize(42)) matches "int a[42]" and "int b[2 * 21]"

Definition at line 3500 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P ( VariableArrayType  ,
hasSizeExpr  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches VariableArrayType nodes that have a specific size expression.

Given

void f(int b) {
int a[b];
}

variableArrayType(hasSizeExpr(ignoringImpCasts(declRefExpr(to( varDecl(hasName("b"))))))) matches "int a[b]"

Definition at line 3556 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( NestedNameSpecifier  ,
specifiesType  ,
internal::Matcher< QualType >  ,
InnerMatcher   
)

Matches nested name specifiers that specify a type matching the given QualType matcher without qualifiers.

Given

struct A { struct B { struct C {}; }; };

nestedNameSpecifier(specifiesType(hasDeclaration(recordDecl(hasName("A"))))) matches "A::"

Definition at line 3922 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( NestedNameSpecifierLoc  ,
specifiesTypeLoc  ,
internal::Matcher< TypeLoc >  ,
InnerMatcher   
)

Matches nested name specifier locs that specify a type matching the given TypeLoc.

Given

struct A { struct B { struct C {}; }; };

nestedNameSpecifierLoc(specifiesTypeLoc(loc(type( hasDeclaration(recordDecl(hasName("A"))))))) matches "A::"

Definition at line 3940 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( NestedNameSpecifier  ,
specifiesNamespace  ,
internal::Matcher< NamespaceDecl >  ,
InnerMatcher   
)

Matches nested name specifiers that specify a namespace matching the given namespace matcher.

Given

namespace ns { struct A {}; }
ns::A a;

nestedNameSpecifier(specifiesNamespace(hasName("ns"))) matches "ns::"

Definition at line 3991 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( SwitchStmt  ,
forEachSwitchCase  ,
internal::Matcher< SwitchCase >  ,
InnerMatcher   
)

Matches each case or default statement belonging to the given switch statement. This matcher may produce multiple matches.

Given

switch (1) { case 1: case 2: default: switch (2) { case 3: case 4: ; } }

switchStmt(forEachSwitchCase(caseStmt().bind("c"))).bind("s") matches four times, with "c" binding each of "case 1:", "case 2:", "case 3:" and "case 4:", and "s" respectively binding "switch (1)", "switch (1)", "switch (2)" and "switch (2)".

Definition at line 4029 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, Node, and clang::Result.

clang::ast_matchers::AST_MATCHER_P ( CXXConstructorDecl  ,
forEachConstructorInitializer  ,
internal::Matcher< CXXCtorInitializer >  ,
InnerMatcher   
)

Matches each constructor initializer in a constructor definition.

Given

class A { A() : i(42), j(42) {} int i; int j; };

constructorDecl(forEachConstructorInitializer(forField(decl().bind("x")))) will trigger two matches, binding for 'i' and 'j' respectively.

Definition at line 4058 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, Node, and clang::Result.

clang::ast_matchers::AST_MATCHER_P ( CaseStmt  ,
hasCaseConstant  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

If the given case statement does not use the GNU case range extension, matches the constant given in the statement.

Given

switch (1) { case 1: case 1+1: case 3 ... 4: ; }

caseStmt(hasCaseConstant(integerLiteral())) matches "case 1:"

Definition at line 4082 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P ( Decl  ,
hasAttr  ,
attr::Kind  ,
AttrKind   
)

Matches declaration that has a given attribute.

Given

__attribute__((device)) void f() { ... }

decl(hasAttr(clang::attr::CUDADevice)) matches the function declaration of f.

Definition at line 4098 of file ASTMatchers.h.

References clang::Attr::getKind(), and Node.

clang::ast_matchers::AST_MATCHER_P2 ( DeclStmt  ,
containsDeclaration  ,
unsigned  ,
,
internal::Matcher< Decl >  ,
InnerMatcher   
)

Matches the n'th declaration of a declaration statement.

Note that this does not work for global declarations because the AST breaks up multiple-declaration DeclStmt's into multiple single-declaration DeclStmt's. Example: Given non-global declarations

int a, b = 0;
int c;
int d = 2, e;

declStmt(containsDeclaration( 0, varDecl(hasInitializer(anything())))) matches only 'int d = 2, e;', and declStmt(containsDeclaration(1, varDecl()))

matches 'int a, b = 0' as well as 'int d = 2, e;'
but 'int c;' is not matched.

Definition at line 2521 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P2 ( FunctionDecl  ,
hasParameter  ,
unsigned  ,
,
internal::Matcher< ParmVarDecl >  ,
InnerMatcher   
)

Matches the n'th parameter of a function declaration.

Given

class X { void f(int x) {} };

methodDecl(hasParameter(0, hasType(varDecl()))) matches f(int x) {} with hasParameter(...) matching int x

Definition at line 2667 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( CXXRecordDecl  ,
isDerivedFrom  ,
std::string  ,
BaseName  ,
 
)

Overloaded method as shortcut for isDerivedFrom(hasName(...)).

Definition at line 1833 of file ASTMatchers.h.

References Builder, Finder, hasName(), and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( CXXRecordDecl  ,
isSameOrDerivedFrom  ,
internal::Matcher< NamedDecl >  ,
Base  ,
 
)

Similar to isDerivedFrom(), but also matches classes that directly match Base.

Definition at line 1840 of file ASTMatchers.h.

References anyOf, Builder, Finder, clang::threadSafety::sx::matches(), and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( CXXRecordDecl  ,
isSameOrDerivedFrom  ,
std::string  ,
BaseName  ,
 
)

Overloaded method as shortcut for isSameOrDerivedFrom(hasName(...)).

Definition at line 1848 of file ASTMatchers.h.

References Builder, Finder, hasName(), and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( CallExpr  ,
callee  ,
internal::Matcher< Decl >  ,
InnerMatcher  ,
 
)

Matches if the call expression's callee's declaration matches the given matcher.

Example matches y.x() (matcher = callExpr(callee(methodDecl(hasName("x")))))

class Y { public: void x(); };
void z() { Y y; y.x(); }

Definition at line 2185 of file ASTMatchers.h.

References Builder, callExpr, Finder, hasDeclaration(), InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( QualType  ,
pointsTo  ,
internal::Matcher< Decl >  ,
InnerMatcher  ,
 
)

Overloaded to match the pointee type's declaration.

Definition at line 2276 of file ASTMatchers.h.

References Builder, Finder, hasDeclaration(), InnerMatcher, Node, and qualType.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( NestedNameSpecifier  ,
hasPrefix  ,
internal::Matcher< NestedNameSpecifier >  ,
InnerMatcher  ,
 
)

Matches on the prefix of a NestedNameSpecifier.

Given

struct A { struct B { struct C {}; }; };

nestedNameSpecifier(hasPrefix(specifiesType(asString("struct A")))) and matches "A::"

Definition at line 3954 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( NestedNameSpecifierLoc  ,
hasPrefix  ,
internal::Matcher< NestedNameSpecifierLoc >  ,
InnerMatcher  ,
 
)

Matches on the prefix of a NestedNameSpecifierLoc.

Given

struct A { struct B { struct C {}; }; };

nestedNameSpecifierLoc(hasPrefix(loc(specifiesType(asString("struct A"))))) matches "A::"

Definition at line 3972 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( Decl  ,
equalsNode  ,
const Decl *  ,
Other  ,
 
)

Overloads for the equalsNode matcher. FIXME: Implement for other node types.

Matches if a node equals another node.

Decl has pointer identity in the AST.

Definition at line 4005 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_MATCHER_P_OVERLOAD ( Stmt  ,
equalsNode  ,
const Stmt ,
Other  ,
 
)

Matches if a node equals another node.

Stmt has pointer identity in the AST.

Definition at line 4012 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER ( isExpansionInMainFile  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc)   
)

Matches AST nodes that were expanded within the main-file.

Example matches X but not Y (matcher = recordDecl(isExpansionInMainFile())

#include <Y.h>
class X {};

Y.h:

class Y {};

Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>

Definition at line 184 of file ASTMatchers.h.

References Finder, clang::SourceManager::getExpansionLoc(), clang::SourceManager::isInMainFile(), and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER ( isExpansionInSystemHeader  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(Decl, Stmt, TypeLoc)   
)

Matches AST nodes that were expanded within system-header-files.

Example matches Y but not X (matcher = recordDecl(isExpansionInSystemHeader())

#include <SystemHeader.h>
class X {};

SystemHeader.h:

class Y {};

Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>

Definition at line 205 of file ASTMatchers.h.

References Finder, clang::SourceManager::getExpansionLoc(), clang::SourceManager::isInSystemHeader(), and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER ( isConstexpr  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(VarDecl,FunctionDecl)   
)

Matches constexpr variable and function declarations.

Given:

constexpr int foo = 42;
constexpr int bar();

varDecl(isConstexpr()) matches the declaration of foo. functionDecl(isConstexpr()) matches the declaration of bar.

Definition at line 2757 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER ( isDefinition  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(TagDecl, VarDecl,FunctionDecl)   
)

Matches if a declaration has a body attached.

Example matches A, va, fa

class A {};
class B; // Doesn't match, as it has no body.
int va;
extern int vb; // Doesn't match, as it doesn't define the variable.
void fa() {}
void fb(); // Doesn't match, as it has no body.

Usable as: Matcher<TagDecl>, Matcher<VarDecl>, Matcher<FunctionDecl>

Definition at line 3091 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER ( isTemplateInstantiation  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl, VarDecl,CXXRecordDecl)   
)

Matches template instantiations of function, class, or static member variable template instantiations.

Given

template <typename T> class X {}; class A {}; X<A> x;

or

template <typename T> class X {}; class A {}; template class X<A>;

recordDecl(hasName("::X"), isTemplateInstantiation()) matches the template instantiation of X.

But given

template <typename T> class X {}; class A {};
template <> class X<A> {}; X<A> x;

recordDecl(hasName("::X"), isTemplateInstantiation()) does not match, as X is an explicit template specialization.

Usable as: Matcher<FunctionDecl>, Matcher<VarDecl>, Matcher<CXXRecordDecl>

Definition at line 3340 of file ASTMatchers.h.

References Node, clang::TSK_ExplicitInstantiationDefinition, and clang::TSK_ImplicitInstantiation.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER ( isExplicitTemplateSpecialization  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl, VarDecl,CXXRecordDecl)   
)

Matches explicit template specializations of function, class, or static member variable template instantiations.

Given

template<typename T> void A(T t) { }
template<> void A(int N) { }

functionDecl(isExplicitTemplateSpecialization()) matches the specialization A<int>().

Usable as: Matcher<FunctionDecl>, Matcher<VarDecl>, Matcher<CXXRecordDecl>

Definition at line 3397 of file ASTMatchers.h.

References Node, and clang::TSK_ExplicitSpecialization.

clang::ast_matchers::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.

Example matches Y but not X (matcher = recordDecl(isExpansionInFileMatching("AST.*"))

#include "ASTMatcher.h"
class X {};

ASTMatcher.h:

class Y {};

Usable as: Matcher<Decl>, Matcher<Stmt>, Matcher<TypeLoc>

Definition at line 230 of file ASTMatchers.h.

References Finder, clang::SourceManager::getExpansionLoc(), clang::SourceManager::getFileEntryForID(), clang::SourceManager::getFileID(), clang::FileEntry::getName(), and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( hasAnyTemplateArgument  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl,TemplateSpecializationType)  ,
internal::Matcher< TemplateArgument >  ,
InnerMatcher   
)

Matches classTemplateSpecializations that have at least one TemplateArgument matching the given InnerMatcher.

Given

template<typename T> class A {};
template<> class A<double> {};
A<int> a;

classTemplateSpecializationDecl(hasAnyTemplateArgument( refersToType(asString("int")))) matches the specialization A<int>

Definition at line 455 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( templateArgumentCountIs  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl,TemplateSpecializationType)  ,
unsigned  ,
 
)

Matches if the number of template arguments equals N.

Given

template<typename T> struct C {};
C<int> c;

classTemplateSpecializationDecl(templateArgumentCountIs(1)) matches C<int>.

Definition at line 576 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( argumentCountIs  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr,CXXConstructExpr,ObjCMessageExpr)  ,
unsigned  ,
 
)

Checks that a call expression or a constructor call expression has a specific number of arguments (including absent default arguments).

Example matches f(0, 0) (matcher = callExpr(argumentCountIs(2)))

void f(int x, int y);
f(0, 0);

Definition at line 2461 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( hasAnyArgument  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr,CXXConstructExpr)  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches any argument of a call expression or a constructor call expression.

Given

void x(int, int, int) { int y; x(1, y, 42); }

callExpr(hasAnyArgument(declRefExpr())) matches x(1, y, 42) with hasAnyArgument(...) matching y

FIXME: Currently this will ignore parentheses and implicit casts on the argument before applying the inner matcher. We'll want to remove this to allow for greater control by the user once ignoreImplicit() has been implemented.

Definition at line 2638 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, Node, and clang::Result.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( hasCondition  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(IfStmt, ForStmt,WhileStmt, DoStmt,ConditionalOperator)  ,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the condition expression of an if statement, for loop, or conditional operator.

Example matches true (matcher = hasCondition(boolLiteral(equals(true))))

if (true) {}

Definition at line 2770 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( equalsBoundNode  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(Stmt, Decl, Type,QualType)  ,
std::string  ,
ID   
)

Matches if a node equals a previously bound node.

Matches a node if it equals the node previously bound to ID.

Given

class X { int a; int b; };

recordDecl( has(fieldDecl(hasName("a"), hasType(type().bind("t")))), has(fieldDecl(hasName("b"), hasType(type(equalsBoundNode("t")))))) matches the class X, as a and b have the same type.

Note that when multiple matches are involved via forEach* matchers, equalsBoundNodes acts as a filter. For example: compoundStmt( forEachDescendant(varDecl().bind("d")), forEachDescendant(declRefExpr(to(decl(equalsBoundNode("d")))))) will trigger a match for each combination of variable declaration and reference to that variable declaration within a compound statement.

Definition at line 2825 of file ASTMatchers.h.

References Builder, clang::ast_type_traits::DynTypedNode::create(), and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( hasBody  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(DoStmt, ForStmt,WhileStmt,CXXForRangeStmt)  ,
internal::Matcher< Stmt ,
InnerMatcher   
)

Matches a 'for', 'while', or 'do while' statement that has a given body.

Given

for (;;) {}

hasBody(compoundStmt()) matches 'for (;;) {}' with compoundStmt() matching '{}'

Definition at line 2901 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P ( hasOperatorName  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(BinaryOperator,UnaryOperator)  ,
std::string  ,
Name   
)

Matches the operator Name of operator expressions (binary or unary).

Example matches a || b (matcher = binaryOperator(hasOperatorName("||")))

!(a || b)

Definition at line 2966 of file ASTMatchers.h.

References Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P2 ( hasTemplateArgument  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(ClassTemplateSpecializationDecl,TemplateSpecializationType)  ,
unsigned  ,
,
internal::Matcher< TemplateArgument >  ,
InnerMatcher   
)

Matches classTemplateSpecializations where the n'th TemplateArgument matches the given InnerMatcher.

Given

template<typename T, typename U> class A {};
A<bool, int> b;
A<int, bool> c;

classTemplateSpecializationDecl(hasTemplateArgument( 1, refersToType(asString("int")))) matches the specialization A<bool, int>

Definition at line 555 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P2 ( hasArgument  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(CallExpr,CXXConstructExpr,ObjCMessageExpr)  ,
unsigned  ,
,
internal::Matcher< Expr >  ,
InnerMatcher   
)

Matches the n'th argument of a call expression or a constructor call expression.

Example matches y in x(y) (matcher = callExpr(hasArgument(0, declRefExpr())))

void x(int) { int y; x(y); }

Definition at line 2477 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P_OVERLOAD ( hasType  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(Expr, ValueDecl)  ,
internal::Matcher< QualType >  ,
InnerMatcher  ,
 
)

Matches if the expression's or declaration's type matches a type matcher.

Example matches x (matcher = expr(hasType(recordDecl(hasName("X"))))) and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))

class X {};
void y(X &x) { x; X z; }

Definition at line 2199 of file ASTMatchers.h.

References Builder, Finder, InnerMatcher, and Node.

clang::ast_matchers::AST_POLYMORPHIC_MATCHER_P_OVERLOAD ( hasType  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(Expr,ValueDecl)  ,
internal::Matcher< Decl >  ,
InnerMatcher  ,
 
)

Overloaded to match the declaration of the expression's or value declaration's type.

In case of a value declaration (for example a variable declaration), this resolves one layer of indirection. For example, in the value declaration "X x;", recordDecl(hasName("X")) matches the declaration of X, while varDecl(hasType(recordDecl(hasName("X")))) matches the declaration of x."

Example matches x (matcher = expr(hasType(recordDecl(hasName("X"))))) and z (matcher = varDecl(hasType(recordDecl(hasName("X")))))

class X {};
void y(X &x) { x; X z; }

Usable as: Matcher<Expr>, Matcher<ValueDecl>

Definition at line 2222 of file ASTMatchers.h.

References Builder, Finder, hasDeclaration(), InnerMatcher, Node, and qualType.

clang::ast_matchers::AST_TYPE_MATCHER ( BuiltinType  ,
builtinType   
)

Matches builtin Types.

Given

struct A {};
A a;
int b;
float c;
bool d;

builtinType() matches "int b", "float c" and "bool d"

clang::ast_matchers::AST_TYPE_MATCHER ( ArrayType  ,
arrayType   
)

Matches all kinds of arrays.

Given

int a[] = { 2, 3 };
int b[4];
void f() { int c[a[0]]; }

arrayType() matches "int a[]", "int b[4]" and "int c[a[0]]";

clang::ast_matchers::AST_TYPE_MATCHER ( ComplexType  ,
complexType   
)

Matches C99 complex types.

Given

_Complex float f;

complexType() matches "_Complex float f"

clang::ast_matchers::AST_TYPE_MATCHER ( ConstantArrayType  ,
constantArrayType   
)

Matches C arrays with a specified constant size.

Given

void() {
int a[2];
int b[] = { 2, 3 };
int c[b[0]];
}

constantArrayType() matches "int a[2]"

clang::ast_matchers::AST_TYPE_MATCHER ( DependentSizedArrayType  ,
dependentSizedArrayType   
)

Matches C++ arrays whose size is a value-dependent expression.

Given

template<typename T, int Size>
class array {
T data[Size];
};

dependentSizedArrayType matches "T data[Size]"

clang::ast_matchers::AST_TYPE_MATCHER ( IncompleteArrayType  ,
incompleteArrayType   
)

Matches C arrays with unspecified size.

Given

int a[] = { 2, 3 };
int b[42];
void f(int c[]) { int d[a[0]]; };

incompleteArrayType() matches "int a[]" and "int c[]"

clang::ast_matchers::AST_TYPE_MATCHER ( VariableArrayType  ,
variableArrayType   
)

Matches C arrays with a specified size that is not an integer-constant-expression.

Given

void f() {
int a[] = { 2, 3 }
int b[42];
int c[a[0]];
}

variableArrayType() matches "int c[a[0]]"

clang::ast_matchers::AST_TYPE_MATCHER ( AtomicType  ,
atomicType   
)

Matches atomic types.

Given

_Atomic(int) i;

atomicType() matches "_Atomic(int) i"

clang::ast_matchers::AST_TYPE_MATCHER ( AutoType  ,
autoType   
)

Matches types nodes representing C++11 auto types.

Given:

auto n = 4;
int v[] = { 2, 3 }
for (auto i : v) { }

autoType() matches "auto n" and "auto i"

clang::ast_matchers::AST_TYPE_MATCHER ( FunctionType  ,
functionType   
)

Matches FunctionType nodes.

Given

int (*f)(int);
void g();

functionType() matches "int (*f)(int)" and the type of "g".

clang::ast_matchers::AST_TYPE_MATCHER ( ParenType  ,
parenType   
)

Matches ParenType nodes.

Given

int (*ptr_to_array)[4];
int *array_of_ptrs[4];

varDecl(hasType(pointsTo(parenType()))) matches ptr_to_array but not array_of_ptrs.

clang::ast_matchers::AST_TYPE_MATCHER ( BlockPointerType  ,
blockPointerType   
)

Matches block pointer types, i.e. types syntactically represented as "void (^)(int)".

The pointee is always required to be a FunctionType.

clang::ast_matchers::AST_TYPE_MATCHER ( MemberPointerType  ,
memberPointerType   
)

Matches member pointer types. Given.

struct A { int i; }
A::* ptr = A::i;

memberPointerType() matches "A::* ptr"

clang::ast_matchers::AST_TYPE_MATCHER ( PointerType  ,
pointerType   
)

Matches pointer types.

Given

int *a;
int &b = *a;
int c = 5;

pointerType() matches "int *a"

clang::ast_matchers::AST_TYPE_MATCHER ( ReferenceType  ,
referenceType   
)

Matches both lvalue and rvalue reference types.

Given

int *a;
int &b = *a;
int &&c = 1;
auto &d = b;
auto &&e = c;
auto &&f = 2;
int g = 5;

referenceType() matches the types of b, c, d, e, and f.

clang::ast_matchers::AST_TYPE_MATCHER ( LValueReferenceType  ,
lValueReferenceType   
)

Matches lvalue reference types.

Given:

int *a;
int &b = *a;
int &&c = 1;
auto &d = b;
auto &&e = c;
auto &&f = 2;
int g = 5;

lValueReferenceType() matches the types of b, d, and e. e is matched since the type is deduced as int& by reference collapsing rules.

clang::ast_matchers::AST_TYPE_MATCHER ( RValueReferenceType  ,
rValueReferenceType   
)

Matches rvalue reference types.

Given:

int *a;
int &b = *a;
int &&c = 1;
auto &d = b;
auto &&e = c;
auto &&f = 2;
int g = 5;

rValueReferenceType() matches the types of c and f. e is not matched as it is deduced to int& by reference collapsing rules.

clang::ast_matchers::AST_TYPE_MATCHER ( TypedefType  ,
typedefType   
)

Matches typedef types.

Given

typedef int X;

typedefType() matches "typedef int X"

clang::ast_matchers::AST_TYPE_MATCHER ( UnaryTransformType  ,
unaryTransformType   
)

Matches template specialization types.

Given

template <typename T>
class C { };
template class C<int>; // A
C<char> var; // B
\code
\c templateSpecializationType() matches the type of the explicit
instantiation in \c A and the type of the variable declaration in \c B.
AST_TYPE_MATCHER(TemplateSpecializationType, templateSpecializationType);
\brief Matches types nodes representing unary type transformations.
Given:
\code
typedef __underlying_type(T) type;

unaryTransformType() matches "__underlying_type(T)"

clang::ast_matchers::AST_TYPE_TRAVERSE_MATCHER ( hasDeducedType  ,
getDeducedType  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(AutoType)   
)

Matches AutoType nodes where the deduced type is a specific type.

Note: There is no TypeLoc for the deduced type and thus no getDeducedLoc() matcher.

Given

auto a = 1;
auto b = 2.0;

autoType(hasDeducedType(isInteger())) matches "auto a"

Usable as: Matcher<AutoType>

clang::ast_matchers::AST_TYPE_TRAVERSE_MATCHER ( innerType  ,
getInnerType  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(ParenType)   
)

Matches ParenType nodes where the inner type is a specific type.

Given

int (*ptr_to_array)[4];
int (*ptr_to_func)(int);

varDecl(hasType(pointsTo(parenType(innerType(functionType()))))) matches ptr_to_func but not ptr_to_array.

Usable as: Matcher<ParenType>

clang::ast_matchers::AST_TYPELOC_TRAVERSE_MATCHER ( hasElementType  ,
getElement  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(ArrayType, ComplexType)   
)

Matches arrays and C99 complex types that have a specific element type.

Given

struct A {};
A a[7];
int b[7];

arrayType(hasElementType(builtinType())) matches "int b[7]"

Usable as: Matcher<ArrayType>, Matcher<ComplexType>

clang::ast_matchers::AST_TYPELOC_TRAVERSE_MATCHER ( hasValueType  ,
getValue  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(AtomicType)   
)

Matches atomic types with a specific value type.

Given

_Atomic(int) i;
_Atomic(float) f;

atomicType(hasValueType(isInteger())) matches "_Atomic(int) i"

Usable as: Matcher<AtomicType>

clang::ast_matchers::AST_TYPELOC_TRAVERSE_MATCHER ( pointee  ,
getPointee  ,
AST_POLYMORPHIC_SUPPORTED_TYPES(BlockPointerType, MemberPointerType, PointerType, ReferenceType)   
)

Narrows PointerType (and similar) matchers to those where the pointee matches a given matcher.

Given

int *a;
int const *b;
float const *f;

pointerType(pointee(isConstQualified(), isInteger())) matches "int const *b"

Usable as: Matcher<BlockPointerType>, Matcher<MemberPointerType>, Matcher<PointerType>, Matcher<ReferenceType>

template<typename ValueT >
internal::PolymorphicMatcherWithParam1<internal::ValueEqualsMatcher, ValueT> clang::ast_matchers::equals ( const ValueT &  Value)

Matches literals that are equal to the given value.

Example matches true (matcher = boolLiteral(equals(true)))

true

Usable as: Matcher<CharacterLiteral>, Matcher<CXXBoolLiteral>, Matcher<FloatingLiteral>, Matcher<IntegerLiteral>

Definition at line 2953 of file ASTMatchers.h.

template<typename T >
internal::Matcher<T> clang::ast_matchers::findAll ( const internal::Matcher< T > &  Matcher)

Matches if the node or any descendant matches.

Generates results for each match.

For example, in:

class A { class B {}; class C {}; };

The matcher:

recordDecl(hasName("::A"), findAll(recordDecl(isDefinition()).bind("m")))

will generate results for A, B and C.

Usable as: Any Matcher

Definition at line 1966 of file ASTMatchers.h.

References eachOf, and forEachDescendant.

internal::PolymorphicMatcherWithParam1< internal::HasDeclarationMatcher, internal::Matcher<Decl>, void(internal::HasDeclarationSupportedTypes)> clang::ast_matchers::hasDeclaration ( const internal::Matcher< Decl > &  InnerMatcher)
inline

Matches a node if the declaration associated with that node matches the given matcher.

The associated declaration is:

  • for type nodes, the declaration of the underlying type
  • for CallExpr, the declaration of the callee
  • for MemberExpr, the declaration of the referenced member
  • for CXXConstructExpr, the declaration of the constructor

Also usable as Matcher<T> for any T supporting the getDecl() member function. e.g. various subtypes of clang::Type and various expressions.

Usable as: Matcher<CallExpr>, Matcher<CXXConstructExpr>, Matcher<DeclRefExpr>, Matcher<EnumType>, Matcher<InjectedClassNameType>, Matcher<LabelStmt>, Matcher<MemberExpr>, Matcher<QualType>, Matcher<RecordType>, Matcher<TagType>, Matcher<TemplateSpecializationType>, Matcher<TemplateTypeParmType>, Matcher<TypedefType>, Matcher<UnresolvedUsingType>

Definition at line 2033 of file ASTMatchers.h.

References InnerMatcher.

Referenced by AST_MATCHER_P_OVERLOAD(), and AST_POLYMORPHIC_MATCHER_P_OVERLOAD().

internal::Matcher<BinaryOperator> clang::ast_matchers::hasEitherOperand ( const internal::Matcher< Expr > &  InnerMatcher)
inline

Matches if either the left hand side or the right hand side of a binary operator matches.

Definition at line 3001 of file ASTMatchers.h.

References anyOf.

internal::Matcher<NamedDecl> clang::ast_matchers::hasName ( const std::string &  Name)
inline

Matches NamedDecl nodes that have the specified name.

Supports specifying enclosing namespaces or classes by prefixing the name with '<enclosing>::'. Does not match typedefs of an underlying type with the given name.

Example matches X (Name == "X")

class X;

Example matches X (Name is one of "::a::b::X", "a::b::X", "b::X", "X")

namespace a { namespace b { class X; } }

Definition at line 1752 of file ASTMatchers.h.

Referenced by AST_MATCHER_P_OVERLOAD().

internal::PolymorphicMatcherWithParam1< internal::HasOverloadedOperatorNameMatcher, StringRef, AST_POLYMORPHIC_SUPPORTED_TYPES(CXXOperatorCallExpr, FunctionDecl)> clang::ast_matchers::hasOverloadedOperatorName ( StringRef  Name)
inline

Matches overloaded operator names.

Matches overloaded operator names specified in strings without the "operator" prefix: e.g. "<<".

Given:

class A { int operator*(); };
const A &operator<<(const A &a, const A &b);
A a;
a << a; // <-- This matches

operatorCallExpr(hasOverloadedOperatorName("<<"))) matches the specified line and recordDecl(hasMethod(hasOverloadedOperatorName("*"))) matches the declaration of A.

Usable as: Matcher<CXXOperatorCallExpr>, Matcher<FunctionDecl>

Definition at line 1800 of file ASTMatchers.h.

References AST_POLYMORPHIC_SUPPORTED_TYPES.

template<typename T >
internal::Matcher<T> clang::ast_matchers::id ( StringRef  ID,
const internal::BindableMatcher< T > &  InnerMatcher 
)

If the provided matcher matches a node, binds the node to ID.

FIXME: Do we want to support this now that we have bind()?

Definition at line 115 of file ASTMatchers.h.

Referenced by buildByrefHelpers(), clang::Sema::CodeCompleteObjCSuperMessage(), clang::ASTContext::getAttributedType(), clang::MicrosoftVTableContext::getVFTableLayout(), and HandleExtVectorTypeAttr().

template<typename MatcherT , typename NodeT >
SmallVector< BoundNodes, 1 > clang::ast_matchers::match ( MatcherT  Matcher,
const NodeT &  Node,
ASTContext &  Context 
)

Returns the results of matching Matcher on Node.

Collects the BoundNodes of all callback invocations when matching Matcher on Node and returns the collected results.

Multiple results occur when using matchers like forEachDescendant, which generate a result for each sub-match.

See Also
selectFirst

Definition at line 286 of file ASTMatchFinder.h.

References clang::ast_type_traits::DynTypedNode::create().

Referenced by clang::Sema::ActOnAtEnd(), clang::Sema::ActOnCXXDelete(), AttributesMatch(), ClassImplementsAllMethodsAndProperties(), MatchTwoAttributeLists(), clang::ASTContext::ObjCQualifiedClassTypesAreCompatible(), clang::ASTContext::ObjCQualifiedIdTypesAreCompatible(), and clang::Sema::WarnExactTypedMethods().

template<typename MatcherT >
SmallVector< BoundNodes, 1 > clang::ast_matchers::match ( MatcherT  Matcher,
const ast_type_traits::DynTypedNode &  Node,
ASTContext &  Context 
)
template<typename NodeT >
const NodeT* clang::ast_matchers::selectFirst ( StringRef  BoundTo,
const SmallVectorImpl< BoundNodes > &  Results 
)

Returns the first result of type NodeT bound to BoundTo.

Returns NULL if there is no match, or if the matching node cannot be casted to NodeT.

This is useful in combanation with match():

const Decl *D = selectFirst<Decl>("id", match(Matcher.bind("id"),

Definition at line 255 of file ASTMatchFinder.h.

References Node.

internal::Matcher<Stmt> clang::ast_matchers::sizeOfExpr ( const internal::Matcher< UnaryExprOrTypeTraitExpr > &  InnerMatcher)
inline

Same as unaryExprOrTypeTraitExpr, but only matching sizeof.

Definition at line 1731 of file ASTMatchers.h.

References allOf, stmt, clang::UETT_SizeOf, and unaryExprOrTypeTraitExpr.

Variable Documentation

const internal::VariadicDynCastAllOfMatcher< Decl, AccessSpecDecl> clang::ast_matchers::accessSpecDecl

Matches C++ access specifier declarations.

Given

class C {
public:
int a;
};

accessSpecDecl() matches 'public:'

Definition at line 365 of file ASTMatchers.h.

const internal::VariadicOperatorMatcherFunc<2, UINT_MAX> clang::ast_matchers::allOf
Initial value:
= {
internal::DynTypedMatcher::VO_AllOf
}

Matches if all given matchers match.

Usable as: Any Matcher

Definition at line 1677 of file ASTMatchers.h.

Referenced by alignOfExpr(), and sizeOfExpr().

const internal::VariadicOperatorMatcherFunc<2, UINT_MAX> clang::ast_matchers::anyOf
Initial value:
= {
internal::DynTypedMatcher::VO_AnyOf
}

Matches if any of the given matchers matches.

Usable as: Any Matcher

Definition at line 1670 of file ASTMatchers.h.

Referenced by AST_MATCHER_FUNCTION(), AST_MATCHER_P_OVERLOAD(), and hasEitherOperand().

const internal::VariadicDynCastAllOfMatcher< Stmt, ArraySubscriptExpr> clang::ast_matchers::arraySubscriptExpr

Matches array subscript expressions.

Given

int i = a[1];

arraySubscriptExpr() matches "a[1]"

Definition at line 1071 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, AsmStmt> clang::ast_matchers::asmStmt

Matches asm statements.

int i = 100;
__asm("mov al, 2");

asmStmt() matches '__asm("mov al, 2")'

Definition at line 1368 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, BinaryOperator> clang::ast_matchers::binaryOperator

Matches binary operator expressions.

Example matches a || b

!(a || b)

Definition at line 1457 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBindTemporaryExpr> clang::ast_matchers::bindTemporaryExpr

Matches nodes where temporaries are created.

Example matches FunctionTakesString(GetStringByValue()) (matcher = bindTemporaryExpr())

FunctionTakesString(GetStringByValue());
FunctionTakesStringByPointer(GetStringPointer());

Definition at line 1017 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXBoolLiteralExpr> clang::ast_matchers::boolLiteral

Matches bool literals.

Example matches true

true

Definition at line 1378 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, BreakStmt> clang::ast_matchers::breakStmt

Matches break statements.

Given

while (true) { break; }

breakStmt() matches 'break'

Definition at line 1232 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CallExpr> clang::ast_matchers::callExpr

Matches call expressions.

Example matches x.y() and y()

X x;
x.y();
y();

Definition at line 861 of file ASTMatchers.h.

Referenced by clang::Sema::ActOnPropertyImplDecl(), and AST_MATCHER_P_OVERLOAD().

const internal::VariadicDynCastAllOfMatcher<Stmt, CaseStmt> clang::ast_matchers::caseStmt

Matches case statements inside switch statements.

Given

switch(a) { case 42: break; default: break; }

caseStmt() matches 'case 42: break;'.

Definition at line 1304 of file ASTMatchers.h.

Referenced by clang::Sema::ActOnCaseStmtBody().

const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr> clang::ast_matchers::castExpr

Matches any cast nodes of Clang's AST.

Example: castExpr() matches each of the following:

(int) 3;
const_cast<Expr *>(SubExpr);
char c = 0;

but does not match

int i = (0);
int k = 0;

Definition at line 1611 of file ASTMatchers.h.

Referenced by addFixitForObjCARCConversion(), clang::Sema::CheckObjCARCConversion(), clang::Sema::CheckObjCBridgeRelatedCast(), clang::Sema::CheckTollFreeBridgeCast(), and clang::Sema::diagnoseARCUnbridgedCast().

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXCatchStmt> clang::ast_matchers::catchStmt

Matches catch statements.

try {} catch(int i) {}

catchStmt() matches 'catch(int i)'

Definition at line 1331 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CharacterLiteral> clang::ast_matchers::characterLiteral

Matches character literals (also matches wchar_t).

Not matching Hex-encoded chars (e.g. 0x1234, which is a IntegerLiteral), though.

Example matches 'a', L'a'

char ch = 'a'; wchar_t chw = L'a';

Definition at line 1401 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateDecl> clang::ast_matchers::classTemplateDecl

Matches C++ class template declarations.

Example matches Z

template<class T> class Z {};

Definition at line 314 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Decl, ClassTemplateSpecializationDecl> clang::ast_matchers::classTemplateSpecializationDecl

Matches C++ class template specializations.

Given

template<typename T> class A {};
template<> class A<double> {};
A<int> a;

classTemplateSpecializationDecl() matches the specializations A<int> and A<double>

Definition at line 328 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CompoundLiteralExpr> clang::ast_matchers::compoundLiteralExpr

Matches compound (i.e. non-scalar) literals.

Example match: {1}, (1, 2)

int array[4] = {1}; vector int myvec = (vector int)(1, 2);

Definition at line 1437 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CompoundStmt> clang::ast_matchers::compoundStmt

Matches compound statements.

Example matches '{}' and '{{}}'in 'for (;;) {{}}'

for (;;) {{}}

Definition at line 1322 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, ConditionalOperator> clang::ast_matchers::conditionalOperator

Matches conditional operator expressions.

Example matches a ? b : c

(a ? b : c) + 42

Definition at line 1477 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstCastExpr> clang::ast_matchers::constCastExpr

Matches a const_cast expression.

Example: Matches const_cast<int*>(&r) in

int n = 42;
const int &r(n);
int* p = const_cast<int*>(&r);

Definition at line 1553 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXConstructExpr> clang::ast_matchers::constructExpr

Matches constructor call expressions (including implicit ones).

Example matches string(ptr, n) and ptr within arguments of f (matcher = constructExpr())

void f(const string &a, const string &b);
char *ptr;
int n;
f(string(ptr, n), ptr);

Definition at line 981 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Decl, CXXConstructorDecl> clang::ast_matchers::constructorDecl

Matches C++ constructor declarations.

Example matches Foo::Foo() and Foo::Foo(int)

class Foo {
public:
Foo();
Foo(int);
int DoSomething();
};

Definition at line 715 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, ContinueStmt> clang::ast_matchers::continueStmt

Matches continue statements.

Given

while (true) { continue; }

continueStmt() matches 'continue'

Definition at line 1242 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, CXXConversionDecl> clang::ast_matchers::conversionDecl

Matches conversion operator declarations.

Example matches the operator.

class X { operator int() const; };

Definition at line 767 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CStyleCastExpr> clang::ast_matchers::cStyleCastExpr

Matches a C-style cast expression.

Example: Matches (int*) 2.2f in

int i = (int) 2.2f;

Definition at line 1563 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher<CXXCtorInitializer> clang::ast_matchers::ctorInitializer

Matches constructor initializers.

Examples matches i(42).

class C {
C() : i(42) {}
int i;
};

Definition at line 376 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CUDAKernelCallExpr> clang::ast_matchers::CUDAKernelCallExpr

Matches CUDA kernel call expression.

Example matches,

kernel<<<i,j>>>();

Definition at line 4113 of file ASTMatchers.h.

Referenced by clang::Sema::ActOnCallExpr(), and clang::Sema::BuildResolvedCallExpr().

const internal::VariadicAllOfMatcher<Decl> clang::ast_matchers::decl
const internal::VariadicDynCastAllOfMatcher<Decl, DeclaratorDecl> clang::ast_matchers::declaratorDecl

Matches declarator declarations (field, variable, function and non-type template parameter declarations).

Given

class X { int y; };

declaratorDecl() matches int y.

Definition at line 340 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, DeclRefExpr> clang::ast_matchers::declRefExpr

Matches expressions that refer to declarations.

Example matches x in if (x)

bool x;
if (x) {}

Definition at line 1119 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, DeclStmt> clang::ast_matchers::declStmt

Matches declaration statements.

Given

int a;

declStmt() matches 'int a'.

Definition at line 838 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDefaultArgExpr> clang::ast_matchers::defaultArgExpr

Matches the value of a default argument at the call site.

Example matches the CXXDefaultArgExpr placeholder inserted for the default value of the second parameter in the call expression f(42) (matcher = defaultArgExpr())

void f(int x, int y = 0);
f(42);

Definition at line 1084 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, DefaultStmt> clang::ast_matchers::defaultStmt

Matches default statements inside switch statements.

Given

switch(a) { case 42: break; default: break; }

defaultStmt() matches 'default: break;'.

Definition at line 1314 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXDeleteExpr> clang::ast_matchers::deleteExpr

Matches delete expressions.

Given

delete X;

deleteExpr() matches 'delete X'.

Definition at line 1059 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Decl, CXXDestructorDecl> clang::ast_matchers::destructorDecl

Matches explicit C++ destructor declarations.

Example matches Foo::~Foo()

class Foo {
public:
virtual ~Foo();
};

Definition at line 728 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, DoStmt> clang::ast_matchers::doStmt

Matches do statements.

Given

do {} while (true);

doStmt() matches 'do {} while(true)'

Definition at line 1222 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXDynamicCastExpr> clang::ast_matchers::dynamicCastExpr

Matches a dynamic_cast expression.

Example: dynamicCastExpr() matches dynamic_cast<D*>(&b); in

struct B { virtual ~B() {} }; struct D : B {};
B b;
D* p = dynamic_cast<D*>(&b);

Definition at line 1541 of file ASTMatchers.h.

const internal::VariadicOperatorMatcherFunc<2, UINT_MAX> clang::ast_matchers::eachOf
Initial value:
= {
internal::DynTypedMatcher::VO_EachOf
}

Matches if any of the given matchers matches.

Unlike anyOf, eachOf will generate a match result for each matching submatcher.

For example, in:

class A { int a; int b; };

The matcher:

has(fieldDecl(hasName("b")).bind("v"))))

will generate two results binding "v", the first of which binds the field declaration of a, the second the field declaration of b.

Usable as: Any Matcher

Definition at line 1663 of file ASTMatchers.h.

Referenced by findAll().

const internal::VariadicDynCastAllOfMatcher< Decl, EnumConstantDecl> clang::ast_matchers::enumConstantDecl

Matches enum constants.

Example matches A, B, C

enum X {
A, B, C
};

Definition at line 750 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, EnumDecl> clang::ast_matchers::enumDecl

Matches enum declarations.

Example matches X

enum X {
A, B, C
};

Definition at line 738 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, ExplicitCastExpr> clang::ast_matchers::explicitCastExpr

Matches explicit cast expressions.

Matches any cast expression written in user code, whether it be a C-style cast, a functional-style cast, or a keyword cast.

Does not match implicit conversions.

Note: the name "explicitCast" is chosen to match Clang's terminology, as Clang uses the term "cast" to apply to implicit conversions as well as to actual cast expressions.

See Also
hasDestinationType.

Example: matches all five of the casts in

int((int)(reinterpret_cast<int>(static_cast<int>(const_cast<int>(42)))))

but does not match the implicit conversion in

long ell = 42;

Definition at line 1588 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, Expr> clang::ast_matchers::expr

Matches expressions.

Example matches x()

void f() { x(); }

Definition at line 1110 of file ASTMatchers.h.

Referenced by clang::Sema::ActOnFileScopeAsmDecl(), clang::Sema::ActOnParenListExpr(), emitPointerArithmetic(), implies(), and clang::InitListExpr::setInit().

const internal::VariadicDynCastAllOfMatcher<Stmt, ExprWithCleanups> clang::ast_matchers::exprWithCleanups

Matches expressions that introduce cleanups to be run at the end of the sub-expression's evaluation.

Example matches std::string()

const std::string str = std::string();

Definition at line 904 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, FieldDecl> clang::ast_matchers::fieldDecl

Matches field declarations.

Given

class X { int m; };

fieldDecl() matches 'm'.

Definition at line 788 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, FloatingLiteral> clang::ast_matchers::floatLiteral

Matches float literals of all sizes / encodings, e.g. 1.0, 1.0f, 1.0L and 1e10.

Does not match implicit conversions such as

float a = 10;

Definition at line 1420 of file ASTMatchers.h.

const internal::ArgumentAdaptingMatcherFunc<internal::ForEachMatcher> LLVM_ATTRIBUTE_UNUSED clang::ast_matchers::forEach = {}

Matches AST nodes that have child AST nodes that match the provided matcher.

Example matches X, Y (matcher = recordDecl(forEach(recordDecl(hasName("X")))

class X {}; // Matches X, because X::X is a class of name X inside X.
class Y { class X {}; };
class Z { class Y { class X {}; }; }; // Does not match Z.

ChildT must be an AST base type.

As opposed to 'has', 'forEach' will cause a match for each result that matches instead of only on the first one.

Usable as: Any Matcher

Definition at line 1921 of file ASTMatchers.h.

const internal::ArgumentAdaptingMatcherFunc<internal::ForEachDescendantMatcher> LLVM_ATTRIBUTE_UNUSED clang::ast_matchers::forEachDescendant = {}

Matches AST nodes that have descendant AST nodes that match the provided matcher.

Example matches X, A, B, C (matcher = recordDecl(forEachDescendant(recordDecl(hasName("X")))))

class X {}; // Matches X, because X::X is a class of name X inside X.
class A { class X {}; };
class B { class C { class X {}; }; };

DescendantT must be an AST base type.

As opposed to 'hasDescendant', 'forEachDescendant' will cause a match for each result that matches instead of only on the first one.

Note: Recursively combined ForEachDescendant can cause many matches: recordDecl(forEachDescendant(recordDecl(forEachDescendant(recordDecl())))) will match 10 times (plus injected class name matches) on:

class A { class B { class C { class D { class E {}; }; }; }; };

Usable as: Any Matcher

Definition at line 1948 of file ASTMatchers.h.

Referenced by findAll().

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXForRangeStmt> clang::ast_matchers::forRangeStmt

Matches range-based for statements.

forRangeStmt() matches 'for (auto a : i)'

int i[] = {1, 2, 3}; for (auto a : i);
for(int j = 0; j < 5; ++j);

Definition at line 1174 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, ForStmt> clang::ast_matchers::forStmt

Matches for statements.

Example matches 'for (;;) {}'

for (;;) {}
int i[] = {1, 2, 3}; for (auto a : i);

Definition at line 1136 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, FriendDecl> clang::ast_matchers::friendDecl

Matches friend declarations.

Given

class X { friend void foo(); };

friendDecl() matches 'friend void foo()'.

Definition at line 816 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXFunctionalCastExpr> clang::ast_matchers::functionalCastExpr

Matches functional cast expressions.

Example: Matches Foo(bar);

Foo f = bar;
Foo g = (Foo) bar;
Foo h = Foo(bar);

Definition at line 1623 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, FunctionDecl> clang::ast_matchers::functionDecl

Matches function declarations.

Example matches f

void f();

Definition at line 796 of file ASTMatchers.h.

Referenced by AST_MATCHER_FUNCTION().

const internal::VariadicDynCastAllOfMatcher< Decl, FunctionTemplateDecl> clang::ast_matchers::functionTemplateDecl

Matches C++ function template declarations.

Example matches f

template<class T> void f(T t) {}

Definition at line 806 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, GNUNullExpr> clang::ast_matchers::gnuNullExpr

Matches GNU __null expression.

Definition at line 1447 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, GotoStmt> clang::ast_matchers::gotoStmt

Matches goto statements.

Given

goto FOO;
FOO: bar();

gotoStmt() matches 'goto FOO'

Definition at line 1263 of file ASTMatchers.h.

const internal::ArgumentAdaptingMatcherFunc<internal::HasMatcher> LLVM_ATTRIBUTE_UNUSED clang::ast_matchers::has = {}

Matches the first method of a class or struct that satisfies InnerMatcher.

Given:

class A { void func(); };
class B { void member(); };
\code
\c recordDecl(hasMethod(hasName("func"))) matches the declaration of \c A
but not \c B.
AST_MATCHER_P(CXXRecordDecl, hasMethod, internal::Matcher<CXXMethodDecl>,
return matchesFirstInPointerRange(InnerMatcher, Node.method_begin(),
Node.method_end(), Finder, Builder);
}
\brief Matches AST nodes that have child AST nodes that match the
provided matcher.
Example matches X, Y (matcher = recordDecl(has(recordDecl(hasName("X")))
\code
class X {}; // Matches X, because X::X is a class of name X inside X.
class Y { class X {}; };
class Z { class Y { class X {}; }; }; // Does not match Z.

ChildT must be an AST base type.

Usable as: Any Matcher

Definition at line 1885 of file ASTMatchers.h.

Referenced by getLiteralInfo().

const internal::ArgumentAdaptingMatcherFunc< internal::HasAncestorMatcher, internal::TypeList<Decl, Stmt>, internal::TypeList<Decl, Stmt> > LLVM_ATTRIBUTE_UNUSED clang::ast_matchers::hasAncestor = {}

Matches AST nodes that have an ancestor that matches the provided matcher.

Given

void f() { if (true) { int x = 42; } }
void g() { for (;;) { int x = 43; } }

expr(integerLiteral(hasAncestor(ifStmt()))) matches 42, but not 43.

Usable as: Any Matcher

Definition at line 1997 of file ASTMatchers.h.

Referenced by AST_MATCHER_FUNCTION().

const internal::ArgumentAdaptingMatcherFunc<internal::HasDescendantMatcher> LLVM_ATTRIBUTE_UNUSED clang::ast_matchers::hasDescendant = {}

Matches AST nodes that have descendant AST nodes that match the provided matcher.

Example matches X, Y, Z (matcher = recordDecl(hasDescendant(recordDecl(hasName("X")))))

class X {}; // Matches X, because X::X is a class of name X inside X.
class Y { class X {}; };
class Z { class Y { class X {}; }; };

DescendantT must be an AST base type.

Usable as: Any Matcher

Definition at line 1902 of file ASTMatchers.h.

const internal::ArgumentAdaptingMatcherFunc< internal::HasParentMatcher, internal::TypeList<Decl, Stmt>, internal::TypeList<Decl, Stmt> > LLVM_ATTRIBUTE_UNUSED clang::ast_matchers::hasParent = {}

Matches AST nodes that have a parent that matches the provided matcher.

Given

void f() { for (;;) { int x = 42; if (true) { int x = 43; } } }

compoundStmt(hasParent(ifStmt())) matches "{ int x = 43; }".

Usable as: Any Matcher

Definition at line 1982 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, IfStmt> clang::ast_matchers::ifStmt

Matches if statements.

Example matches 'if (x) {}'

if (x) {}

Definition at line 1127 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, ImplicitCastExpr> clang::ast_matchers::implicitCastExpr

Matches the implicit cast nodes of Clang's AST.

This matches many different places, including function call return value eliding, as well as any type conversions.

Definition at line 1596 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, InitListExpr> clang::ast_matchers::initListExpr

Matches init list expressions.

Given

int a[] = { 1, 2 };
struct B { int x, y; };
B b = { 5, 6 };

initListExpr() matches "{ 1, 2 }" and "{ 5, 6 }"

Definition at line 916 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, IntegerLiteral> clang::ast_matchers::integerLiteral

Matches integer literals of all sizes / encodings, e.g. 1, 1L, 0x1 and 1U.

Does not match character-encoded integers such as L'a'.

Definition at line 1409 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, LabelStmt> clang::ast_matchers::labelStmt

Matches label statements.

Given

goto FOO;
FOO: bar();

labelStmt() matches 'FOO:'

Definition at line 1274 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, LambdaExpr> clang::ast_matchers::lambdaExpr

Matches lambda expressions.

Example matches [&](){return 5;}

[&](){return 5;}

Definition at line 869 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, LinkageSpecDecl> clang::ast_matchers::linkageSpecDecl

Matches a declaration of a linkage specification.

Given

extern "C" {}

linkageSpecDecl() matches "extern "C" {}"

Definition at line 269 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, MaterializeTemporaryExpr> clang::ast_matchers::materializeTemporaryExpr

Matches nodes where temporaries are materialized.

Example: Given

struct T {void func()};
T f();
void g(T);

materializeTemporaryExpr() matches 'f()' in these statements

T u(f());
g(f());

but does not match

f();
f().func();

Definition at line 1039 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXMemberCallExpr> clang::ast_matchers::memberCallExpr

Matches member call expressions.

Example matches x.y()

X x;
x.y();

Definition at line 880 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, MemberExpr> clang::ast_matchers::memberExpr

Matches member expressions.

Given

class Y {
void x() { this->x(); x(); Y y; y.x(); a; this->b; Y::b; }
int a; static int b;
};

memberExpr() matches this->x, x, y.x, a, this->b

Definition at line 851 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, CXXMethodDecl> clang::ast_matchers::methodDecl

Matches method declarations.

Example matches y

class X { void y(); };

Definition at line 758 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, NamedDecl> clang::ast_matchers::namedDecl

Matches a declaration of anything that could have a name.

Example matches X, S, the anonymous union type, i, and U;

typedef int X;
struct S {
union {
int i;
} U;
};

Definition at line 282 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, NamespaceDecl> clang::ast_matchers::namespaceDecl

Matches a declaration of a namespace.

Given

namespace {}
namespace test {}

namespaceDecl() matches "namespace {}" and "namespace test {}"

Definition at line 293 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher<NestedNameSpecifier> clang::ast_matchers::nestedNameSpecifier

Matches record types (e.g. structs, classes).

Given

class C {};
struct S {};
C c;
S s;
\code
\c recordType() matches the type of the variable declarations of both \c c
and \c s.
AST_TYPE_MATCHER(RecordType, recordType);
\brief Matches types specified with an elaborated type keyword or with a
qualified name.
Given
\code
namespace N {
namespace M {
class D {};
}
}
class C {};
class C c;
N::M::D d;
\code
\c elaboratedType() matches the type of the variable declarations of both
\c c and \c d.
AST_TYPE_MATCHER(ElaboratedType, elaboratedType);
\brief Matches ElaboratedTypes whose qualifier, a NestedNameSpecifier,
matches \c InnerMatcher if the qualifier exists.
Given
\code
namespace N {
namespace M {
class D {};
}
}
N::M::D d;
\code
\c elaboratedType(hasQualifier(hasPrefix(specifiesNamespace(hasName("N"))))
matches the type of the variable declaration of \c d.
AST_MATCHER_P(ElaboratedType, hasQualifier,
internal::Matcher<NestedNameSpecifier>, InnerMatcher) {
if (const NestedNameSpecifier *Qualifier = Node.getQualifier())
return InnerMatcher.matches(*Qualifier, Finder, Builder);
return false;
}
\brief Matches ElaboratedTypes whose named type matches \c InnerMatcher.
Given
\code
namespace N {
namespace M {
class D {};
}
}
N::M::D d;
\code
\c elaboratedType(namesType(recordType(
hasDeclaration(namedDecl(hasName("D")))))) matches the type of the variable
declaration of \c d.
AST_MATCHER_P(ElaboratedType, namesType, internal::Matcher<QualType>,
InnerMatcher) {
return InnerMatcher.matches(Node.getNamedType(), Finder, Builder);
}
\brief Matches declarations whose declaration context, interpreted as a
Decl, matches \c InnerMatcher.
Given
\code
namespace N {
namespace M {
class D {};
}
}
\code
\c recordDecl(hasDeclContext(namedDecl(hasName("M")))) matches the
declaration of \c class \c D.
AST_MATCHER_P(Decl, hasDeclContext, internal::Matcher<Decl>, InnerMatcher) {
const DeclContext *DC = Node.getDeclContext();
if (!DC) return false;
return InnerMatcher.matches(*Decl::castFromDeclContext(DC), Finder, Builder);
}
\brief Matches nested name specifiers.
Given
\code
namespace ns {
struct A { static void f(); };
void A::f() {}
void g() { A::f(); }
}
ns::A a;

nestedNameSpecifier() matches "ns::" and both "A::"

Definition at line 3896 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher< NestedNameSpecifierLoc> clang::ast_matchers::nestedNameSpecifierLoc

Same as nestedNameSpecifier but matches NestedNameSpecifierLoc.

Definition at line 3900 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXNewExpr> clang::ast_matchers::newExpr

Matches new expressions.

Given

new X;

newExpr() matches 'new X'.

Definition at line 1049 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXNullPtrLiteralExpr> clang::ast_matchers::nullPtrLiteralExpr

Matches nullptr literal.

Definition at line 1442 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, NullStmt> clang::ast_matchers::nullStmt

Matches null statements.

foo();;

nullStmt() matches the second ';'

Definition at line 1358 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, ObjCMessageExpr> clang::ast_matchers::objcMessageExpr

Matches ObjectiveC Message invocation expressions.

The innermost message send invokes the "alloc" class method on the NSString class, while the outermost message send invokes the "initWithString" instance method on the object returned from NSString's "alloc". This matcher should match both message sends.

[[NSString alloc] initWithString:@"Hello"]

Definition at line 893 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXOperatorCallExpr> clang::ast_matchers::operatorCallExpr

Matches overloaded operator calls.

Note that if an operator isn't overloaded, it won't match. Instead, use binaryOperator matcher. Currently it does not match operators such as new delete. FIXME: figure out why these do not match?

Example matches both operator<<((o << b), c) and operator<<(o, b) (matcher = operatorCallExpr())

ostream &operator<< (ostream &out, int i) { };
ostream &o; int b = 1, c = 1;
o << b << c;

Definition at line 1102 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, ParmVarDecl> clang::ast_matchers::parmVarDecl

Matches parameter variable declarations.

Given

void f(int x);

parmVarDecl() matches int x.

Definition at line 350 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher<QualType> clang::ast_matchers::qualType

Matches QualTypes in the clang AST.

Definition at line 1636 of file ASTMatchers.h.

Referenced by AST_MATCHER_P_OVERLOAD(), and AST_POLYMORPHIC_MATCHER_P_OVERLOAD().

const internal::VariadicDynCastAllOfMatcher< Decl, CXXRecordDecl> clang::ast_matchers::recordDecl

Matches C++ class declarations.

Example matches X, Z

class X;
template<class T> class Z {};

Definition at line 304 of file ASTMatchers.h.

Referenced by AST_MATCHER_FUNCTION(), and classifyPointerDeclarator().

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXReinterpretCastExpr> clang::ast_matchers::reinterpretCastExpr

Matches a reinterpret_cast expression.

Either the source expression or the destination type can be matched using has(), but hasDestinationType() is more specific and can be more readable.

Example matches reinterpret_cast<char*>(&p) in

void* p = reinterpret_cast<char*>(&p);

Definition at line 1508 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, ReturnStmt> clang::ast_matchers::returnStmt

Matches return statements.

Given

return 1;

returnStmt() matches 'return 1'

Definition at line 1252 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Decl, StaticAssertDecl> clang::ast_matchers::staticAssertDecl

Matches a C++ static_assert declaration.

Example: staticAssertExpr() matches static_assert(sizeof(S) == sizeof(int)) in

struct S {
int x;
};
static_assert(sizeof(S) == sizeof(int));

Definition at line 1494 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXStaticCastExpr> clang::ast_matchers::staticCastExpr

Matches a C++ static_cast expression.

See Also
hasDestinationType
reinterpretCast

Example: staticCastExpr() matches static_cast<long>(8) in

long eight(static_cast<long>(8));

Definition at line 1525 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher<Stmt> clang::ast_matchers::stmt

Matches statements.

Given

{ ++a; }

stmt() matches both the compound statement '{ ++a; }' and '++a'.

Definition at line 826 of file ASTMatchers.h.

Referenced by alignOfExpr(), AST_MATCHER_FUNCTION(), GenerateExtensivePathDiagnostic(), clang::AnalysisDeclContext::registerForcedBlockExpression(), sizeOfExpr(), and clang::CFG::VisitBlockStmts().

const internal::VariadicDynCastAllOfMatcher< Stmt, StringLiteral> clang::ast_matchers::stringLiteral

Matches string literals (also matches wide string literals).

Example matches "abcd", L"abcd"

char *s = "abcd"; wchar_t *ws = L"abcd"

Definition at line 1388 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, SubstNonTypeTemplateParmExpr> clang::ast_matchers::substNonTypeTemplateParmExpr

Matches substitutions of non-type template parameters.

Given

template <int N>
struct A { static const int n = N; };
struct B : public A<42> {};

substNonTypeTemplateParmExpr() matches "N" in the right-hand side of "static const int n = N;"

Definition at line 929 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchCase> clang::ast_matchers::switchCase

Matches case and default statements inside switch statements.

Given

switch(a) { case 42: break; default: break; }

switchCase() matches 'case 42: break;' and 'default: break;'.

Definition at line 1294 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, SwitchStmt> clang::ast_matchers::switchStmt

Matches switch statements.

Given

switch(a) { case 42: break; default: break; }

switchStmt() matches 'switch(a)'.

Definition at line 1284 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher<TemplateArgument> clang::ast_matchers::templateArgument

Matches template arguments.

Given

template <typename T> struct C {};
C<int> c;

templateArgument() matches 'int' in C<int>.

Definition at line 387 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXTemporaryObjectExpr> clang::ast_matchers::temporaryObjectExpr

Matches functional cast expressions having N != 1 arguments.

Example: Matches Foo(bar, bar)

Foo h = Foo(bar, bar);

Definition at line 1633 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThisExpr> clang::ast_matchers::thisExpr

Matches implicit and explicit this expressions.

Example matches the implicit this expression in "return i". (matcher = thisExpr())

struct foo {
int i;
int f() { return i; }
};

Definition at line 1005 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXThrowExpr> clang::ast_matchers::throwExpr

Matches throw expressions.

try { throw 5; } catch(int i) {}

throwExpr() matches 'throw 5'

Definition at line 1349 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, TranslationUnitDecl> clang::ast_matchers::translationUnitDecl

Matches the top declaration context.

Given

int X;
namespace NS {
int Y;
} // namespace NS

decl(hasDeclContext(translationUnitDecl())) matches "int X", but not "int Y".

Definition at line 159 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Stmt, CXXTryStmt> clang::ast_matchers::tryStmt

Matches try statements.

try {} catch(int i) {}

tryStmt() matches 'try {}'

Definition at line 1340 of file ASTMatchers.h.

const internal::VariadicAllOfMatcher<Type> clang::ast_matchers::type

Matches Types in the clang AST.

Definition at line 1639 of file ASTMatchers.h.

Referenced by clang::Sema::ActOnForEachDeclStmt(), clang::Sema::ActOnObjCAtSynchronizedOperand(), clang::Sema::actOnObjCTypeArgsOrProtocolQualifiers(), clang::InitializationSequence::AddPassByIndirectCopyRestoreStep(), clang::Sema::AddPushedVisibilityAttribute(), applyObjCTypeArgs(), breakDownVectorType(), clang::Sema::BuildDeclarationNameExpr(), clang::Sema::BuildMemberReferenceExpr(), clang::Sema::BuildObjCBoxedExpr(), clang::arcmt::trans::canApplyWeak(), clang::Sema::CheckCompleteVariableDeclaration(), CheckNonNullArguments(), clang::Sema::checkNullabilityTypeSpecifier(), clang::Sema::checkObjCKindOfType(), clang::Sema::CodeCompleteCase(), clang::PseudoObjectExpr::Create(), diagnoseBadTypeAttribute(), clang::Sema::DiagnoseSentinelCalls(), distributeFunctionTypeAttr(), distributeObjCPointerTypeAttr(), clang::CodeGen::CodeGenFunction::EmitARCRetainAutoreleasedReturnValue(), clang::CodeGen::CodeGenFunction::EmitARCStoreStrong(), clang::CodeGen::CodeGenFunction::EmitAutoVarInit(), clang::CodeGen::CodeGenFunction::emitAutoVarTypeCleanup(), clang::CodeGen::CodeGenFunction::EmitBlockLiteral(), clang::CodeGen::CodeGenFunction::EmitCallArg(), clang::CodeGen::CodeGenFunction::EmitCXXAggrConstructorCall(), emitCXXDestructMethod(), EmitCXXNewAllocSize(), clang::CodeGen::CGDebugInfo::EmitDeclareOfBlockLiteralArgVariable(), EmitDeclDestroy(), EmitDeclInit(), clang::CodeGen::CodeGenFunction::EmitDelegateCallArg(), clang::CodeGen::CodeGenFunction::EmitExprAsInit(), clang::CodeGen::CodeGenFunction::EmitExtVectorElementExpr(), clang::CodeGen::CodeGenFunction::EmitLValueForField(), clang::CodeGen::CodeGenFunction::EnterDtorCleanups(), clang::Expr::findBoundMemberType(), clang::Sema::FixOverloadedFunctionReference(), clang::CodeGen::CodeGenFunction::GenerateCopyHelperFunction(), clang::CodeGen::CodeGenFunction::GenerateDestroyHelperFunction(), clang::ASTContext::getAttributedType(), clang::Type::getBaseElementTypeUnsafe(), getBaseMessageSendResultType(), getComplexType(), clang::CodeGen::CodeGenFunction::getEvaluationKind(), getLVForTemplateParameterList(), clang::CodeGen::CodeGenModule::getMemberPointerConstant(), clang::Type::getNullability(), getNullForVariable(), clang::ASTContext::getObjCObjectType(), clang::ASTContext::getVariableArrayDecayedType(), handleBlocksAttr(), handleObjCGCTypeAttr(), handleObjCOwnershipTypeAttr(), handleObjCPreciseLifetimeAttr(), handleVisibilityAttr(), inferARCLifetimeForPointee(), clang::Sema::inferObjCARCLifetime(), isPlaceholderToRemoveAsArg(), mergeTypeNullabilityForRedecl(), clang::operator&(), clang::operator<<(), clang::operator|(), clang::operator~(), clang::Sema::PrepareCastToObjCObjectPointer(), clang::CodeGen::CodeGenFunction::pushDestroy(), clang::CodeGen::CodeGenFunction::pushLifetimeExtendedDestroy(), clang::Sema::RequireCompleteDeclContext(), clang::QualType::stripObjCKindOfType(), clang::QualType::substObjCTypeArgs(), tryCaptureAsConstant(), and tryEmitARCRetainLoadOfScalar().

const internal::VariadicDynCastAllOfMatcher<Decl, TypedefDecl> clang::ast_matchers::typedefDecl

Matches typedef declarations.

Given

typedef int X;

typedefDecl() matches "typedef int X"

Definition at line 169 of file ASTMatchers.h.

Referenced by clang::Sema::checkNullabilityTypeSpecifier().

const internal::VariadicAllOfMatcher<TypeLoc> clang::ast_matchers::typeLoc

Matches TypeLocs in the clang AST.

Definition at line 1642 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryExprOrTypeTraitExpr> clang::ast_matchers::unaryExprOrTypeTraitExpr

Matches sizeof (C99), alignof (C++11) and vec_step (OpenCL)

Given

Foo x = bar;
int y = sizeof(x) + alignof(x);

unaryExprOrTypeTraitExpr() matches sizeof(x) and alignof(x)

Definition at line 1692 of file ASTMatchers.h.

Referenced by alignOfExpr(), and sizeOfExpr().

const internal::VariadicDynCastAllOfMatcher< Stmt, UnaryOperator> clang::ast_matchers::unaryOperator

Matches unary operator expressions.

Example matches !a

!a || b

Definition at line 1467 of file ASTMatchers.h.

const internal::VariadicOperatorMatcherFunc<1, 1> clang::ast_matchers::unless
Initial value:
= {
internal::DynTypedMatcher::VO_UnaryNot
}

Matches if the provided matcher does not match.

Example matches Y (matcher = recordDecl(unless(hasName("X"))))

class X {};
class Y {};

Usable as: Any Matcher

Definition at line 2008 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, CXXUnresolvedConstructExpr> clang::ast_matchers::unresolvedConstructExpr

Matches unresolved constructor call expressions.

Example matches T(t) in return statement of f (matcher = unresolvedConstructExpr())

template <typename T>
void f(const T& t) { return T(t); }

Definition at line 993 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Decl, UnresolvedUsingValueDecl> clang::ast_matchers::unresolvedUsingValueDecl

Matches unresolved using value declarations.

Given

template<typename X>
class C : private X {
using X::x;
};

unresolvedUsingValueDecl() matches

using X::x

Definition at line 967 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher< Stmt, UserDefinedLiteral> clang::ast_matchers::userDefinedLiteral

Matches user defined literal operator call.

Example match: "foo"_suffix

Definition at line 1427 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, UsingDecl> clang::ast_matchers::usingDecl

Matches using declarations.

Given

namespace X { int x; }
using X::x;

usingDecl() matches

using X::x

Definition at line 940 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, UsingDirectiveDecl> clang::ast_matchers::usingDirectiveDecl

Matches using namespace declarations.

Given

namespace X { int x; }
using namespace X;

usingDirectiveDecl() matches

using namespace X

Definition at line 952 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, ValueDecl> clang::ast_matchers::valueDecl

Matches any value declaration.

Example matches A, B, C and F

enum X { A, B, C };
void F();

Definition at line 700 of file ASTMatchers.h.

const internal::VariadicDynCastAllOfMatcher<Decl, VarDecl> clang::ast_matchers::varDecl

Matches variable declarations.

Note: this does not match declarations of member variables, which are "field" declarations in Clang parlance.

Example matches a

int a;

Definition at line 778 of file ASTMatchers.h.

Referenced by clang::ento::ExprEngine::ProcessAutomaticObjDtor().

const internal::VariadicDynCastAllOfMatcher<Stmt, WhileStmt> clang::ast_matchers::whileStmt

Matches while statements.

Given

while (true) {}

whileStmt() matches 'while (true) {}'.

Definition at line 1212 of file ASTMatchers.h.