diff options
Diffstat (limited to 'lib/ASTMatchers/Dynamic')
| -rw-r--r-- | lib/ASTMatchers/Dynamic/Marshallers.h | 50 | ||||
| -rw-r--r-- | lib/ASTMatchers/Dynamic/Parser.cpp | 30 | ||||
| -rw-r--r-- | lib/ASTMatchers/Dynamic/Registry.cpp | 16 | ||||
| -rw-r--r-- | lib/ASTMatchers/Dynamic/VariantValue.cpp | 2 |
4 files changed, 55 insertions, 43 deletions
diff --git a/lib/ASTMatchers/Dynamic/Marshallers.h b/lib/ASTMatchers/Dynamic/Marshallers.h index af90e2c7eca1d..c6c89351afd3c 100644 --- a/lib/ASTMatchers/Dynamic/Marshallers.h +++ b/lib/ASTMatchers/Dynamic/Marshallers.h @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// // /// \file -/// \brief Functions templates and classes to wrap matcher construct functions. +/// Functions templates and classes to wrap matcher construct functions. /// /// A collection of template function and classes that provide a generic /// marshalling layer on top of matcher construct functions. @@ -47,7 +47,7 @@ namespace ast_matchers { namespace dynamic { namespace internal { -/// \brief Helper template class to just from argument type to the right is/get +/// Helper template class to just from argument type to the right is/get /// functions in VariantValue. /// Used to verify and extract the matcher arguments below. template <class T> struct ArgTypeTraits; @@ -166,7 +166,7 @@ public: } }; -/// \brief Matcher descriptor interface. +/// Matcher descriptor interface. /// /// Provides a \c create() method that constructs the matcher from the provided /// arguments, and various other methods for type introspection. @@ -222,7 +222,7 @@ inline bool isRetKindConvertibleTo( return false; } -/// \brief Simple callback implementation. Marshaller and function are provided. +/// Simple callback implementation. Marshaller and function are provided. /// /// This class wraps a function of arbitrary signature and a marshaller /// function into a MatcherDescriptor. @@ -279,7 +279,7 @@ private: const std::vector<ArgKind> ArgKinds; }; -/// \brief Helper methods to extract and merge all possible typed matchers +/// Helper methods to extract and merge all possible typed matchers /// out of the polymorphic object. template <class PolyMatcher> static void mergePolyMatchers(const PolyMatcher &Poly, @@ -293,7 +293,7 @@ static void mergePolyMatchers(const PolyMatcher &Poly, mergePolyMatchers(Poly, Out, typename TypeList::tail()); } -/// \brief Convert the return values of the functions into a VariantMatcher. +/// Convert the return values of the functions into a VariantMatcher. /// /// There are 2 cases right now: The return value is a Matcher<T> or is a /// polymorphic matcher. For the former, we just construct the VariantMatcher. @@ -347,7 +347,7 @@ struct BuildReturnTypeVector<ast_matchers::internal::BindableMatcher<T>> { } }; -/// \brief Variadic marshaller function. +/// Variadic marshaller function. template <typename ResultT, typename ArgT, ResultT (*Func)(ArrayRef<const ArgT *>)> VariantMatcher @@ -383,7 +383,7 @@ variadicMatcherDescriptor(StringRef MatcherName, SourceRange NameRange, return Out; } -/// \brief Matcher descriptor for variadic functions. +/// Matcher descriptor for variadic functions. /// /// This class simply wraps a VariadicFunction with the right signature to export /// it as a MatcherDescriptor. @@ -436,7 +436,7 @@ private: const ArgKind ArgsKind; }; -/// \brief Return CK_Trivial when appropriate for VariadicDynCastAllOfMatchers. +/// Return CK_Trivial when appropriate for VariadicDynCastAllOfMatchers. class DynCastAllOfMatcherDescriptor : public VariadicFuncMatcherDescriptor { public: template <typename BaseT, typename DerivedT> @@ -470,7 +470,7 @@ private: const ast_type_traits::ASTNodeKind DerivedKind; }; -/// \brief Helper macros to check the arguments on all marshaller functions. +/// Helper macros to check the arguments on all marshaller functions. #define CHECK_ARG_COUNT(count) \ if (Args.size() != count) { \ Error->addError(NameRange, Error->ET_RegistryWrongArgCount) \ @@ -486,7 +486,7 @@ private: return VariantMatcher(); \ } -/// \brief 0-arg marshaller function. +/// 0-arg marshaller function. template <typename ReturnType> static VariantMatcher matcherMarshall0(void (*Func)(), StringRef MatcherName, SourceRange NameRange, @@ -497,7 +497,7 @@ static VariantMatcher matcherMarshall0(void (*Func)(), StringRef MatcherName, return outvalueToVariantMatcher(reinterpret_cast<FuncType>(Func)()); } -/// \brief 1-arg marshaller function. +/// 1-arg marshaller function. template <typename ReturnType, typename ArgType1> static VariantMatcher matcherMarshall1(void (*Func)(), StringRef MatcherName, SourceRange NameRange, @@ -510,7 +510,7 @@ static VariantMatcher matcherMarshall1(void (*Func)(), StringRef MatcherName, ArgTypeTraits<ArgType1>::get(Args[0].Value))); } -/// \brief 2-arg marshaller function. +/// 2-arg marshaller function. template <typename ReturnType, typename ArgType1, typename ArgType2> static VariantMatcher matcherMarshall2(void (*Func)(), StringRef MatcherName, SourceRange NameRange, @@ -528,7 +528,7 @@ static VariantMatcher matcherMarshall2(void (*Func)(), StringRef MatcherName, #undef CHECK_ARG_COUNT #undef CHECK_ARG_TYPE -/// \brief Helper class used to collect all the possible overloads of an +/// Helper class used to collect all the possible overloads of an /// argument adaptative matcher function. template <template <typename ToArg, typename FromArg> class ArgumentAdapterT, typename FromTypes, typename ToTypes> @@ -544,10 +544,10 @@ private: using AdaptativeFunc = ast_matchers::internal::ArgumentAdaptingMatcherFunc< ArgumentAdapterT, FromTypes, ToTypes>; - /// \brief End case for the recursion + /// End case for the recursion static void collect(ast_matchers::internal::EmptyTypeList) {} - /// \brief Recursive case. Get the overload for the head of the list, and + /// Recursive case. Get the overload for the head of the list, and /// recurse to the tail. template <typename FromTypeList> inline void collect(FromTypeList); @@ -556,7 +556,7 @@ private: std::vector<std::unique_ptr<MatcherDescriptor>> &Out; }; -/// \brief MatcherDescriptor that wraps multiple "overloads" of the same +/// MatcherDescriptor that wraps multiple "overloads" of the same /// matcher. /// /// It will try every overload and generate appropriate errors for when none or @@ -635,7 +635,7 @@ private: std::vector<std::unique_ptr<MatcherDescriptor>> Overloads; }; -/// \brief Variadic operator marshaller function. +/// Variadic operator marshaller function. class VariadicOperatorMatcherDescriptor : public MatcherDescriptor { public: using VarOp = DynTypedMatcher::VariadicOperator; @@ -701,7 +701,7 @@ private: /// Helper functions to select the appropriate marshaller functions. /// They detect the number of arguments, arguments types and return type. -/// \brief 0-arg overload +/// 0-arg overload template <typename ReturnType> std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall(ReturnType (*Func)(), StringRef MatcherName) { @@ -712,7 +712,7 @@ makeMatcherAutoMarshall(ReturnType (*Func)(), StringRef MatcherName) { MatcherName, RetTypes, None); } -/// \brief 1-arg overload +/// 1-arg overload template <typename ReturnType, typename ArgType1> std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1), StringRef MatcherName) { @@ -724,7 +724,7 @@ makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1), StringRef MatcherName) { reinterpret_cast<void (*)()>(Func), MatcherName, RetTypes, AK); } -/// \brief 2-arg overload +/// 2-arg overload template <typename ReturnType, typename ArgType1, typename ArgType2> std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2), @@ -738,7 +738,7 @@ makeMatcherAutoMarshall(ReturnType (*Func)(ArgType1, ArgType2), reinterpret_cast<void (*)()>(Func), MatcherName, RetTypes, AKs); } -/// \brief Variadic overload. +/// Variadic overload. template <typename ResultT, typename ArgT, ResultT (*Func)(ArrayRef<const ArgT *>)> std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( @@ -747,7 +747,7 @@ std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( return llvm::make_unique<VariadicFuncMatcherDescriptor>(VarFunc, MatcherName); } -/// \brief Overload for VariadicDynCastAllOfMatchers. +/// Overload for VariadicDynCastAllOfMatchers. /// /// Not strictly necessary, but DynCastAllOfMatcherDescriptor gives us better /// completion results for that type of matcher. @@ -759,7 +759,7 @@ std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( return llvm::make_unique<DynCastAllOfMatcherDescriptor>(VarFunc, MatcherName); } -/// \brief Argument adaptative overload. +/// Argument adaptative overload. template <template <typename ToArg, typename FromArg> class ArgumentAdapterT, typename FromTypes, typename ToTypes> std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( @@ -782,7 +782,7 @@ inline void AdaptativeOverloadCollector<ArgumentAdapterT, FromTypes, collect(typename FromTypeList::tail()); } -/// \brief Variadic operator overload. +/// Variadic operator overload. template <unsigned MinCount, unsigned MaxCount> std::unique_ptr<MatcherDescriptor> makeMatcherAutoMarshall( ast_matchers::internal::VariadicOperatorMatcherFunc<MinCount, MaxCount> diff --git a/lib/ASTMatchers/Dynamic/Parser.cpp b/lib/ASTMatchers/Dynamic/Parser.cpp index 89e1a2695860c..da8df907ba7fa 100644 --- a/lib/ASTMatchers/Dynamic/Parser.cpp +++ b/lib/ASTMatchers/Dynamic/Parser.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief Recursive parser implementation for the matcher expression grammar. +/// Recursive parser implementation for the matcher expression grammar. /// //===----------------------------------------------------------------------===// @@ -34,9 +34,9 @@ namespace clang { namespace ast_matchers { namespace dynamic { -/// \brief Simple structure to hold information for one token from the parser. +/// Simple structure to hold information for one token from the parser. struct Parser::TokenInfo { - /// \brief Different possible tokens. + /// Different possible tokens. enum TokenKind { TK_Eof, TK_OpenParen, @@ -50,7 +50,7 @@ struct Parser::TokenInfo { TK_CodeCompletion }; - /// \brief Some known identifiers. + /// Some known identifiers. static const char* const ID_Bind; TokenInfo() = default; @@ -63,7 +63,7 @@ struct Parser::TokenInfo { const char* const Parser::TokenInfo::ID_Bind = "bind"; -/// \brief Simple tokenizer for the parser. +/// Simple tokenizer for the parser. class Parser::CodeTokenizer { public: explicit CodeTokenizer(StringRef MatcherCode, Diagnostics *Error) @@ -78,10 +78,10 @@ public: NextToken = getNextToken(); } - /// \brief Returns but doesn't consume the next token. + /// Returns but doesn't consume the next token. const TokenInfo &peekNextToken() const { return NextToken; } - /// \brief Consumes and returns the next token. + /// Consumes and returns the next token. TokenInfo consumeNextToken() { TokenInfo ThisToken = NextToken; NextToken = getNextToken(); @@ -185,7 +185,7 @@ private: return Result; } - /// \brief Consume an unsigned and float literal. + /// Consume an unsigned and float literal. void consumeNumberLiteral(TokenInfo *Result) { bool isFloatingLiteral = false; unsigned Length = 1; @@ -238,7 +238,7 @@ private: Result->Kind = TokenInfo::TK_Error; } - /// \brief Consume a string literal. + /// Consume a string literal. /// /// \c Code must be positioned at the start of the literal (the opening /// quote). Consumed until it finds the same closing quote character. @@ -272,7 +272,7 @@ private: Result->Kind = TokenInfo::TK_Error; } - /// \brief Consume all leading whitespace from \c Code. + /// Consume all leading whitespace from \c Code. void consumeWhitespace() { while (!Code.empty() && isWhitespace(Code[0])) { if (Code[0] == '\n') { @@ -326,7 +326,7 @@ struct Parser::ScopedContextEntry { } }; -/// \brief Parse expressions that start with an identifier. +/// Parse expressions that start with an identifier. /// /// This function can parse named values and matchers. /// In case of failure it will try to determine the user's intent to give @@ -359,7 +359,7 @@ bool Parser::parseIdentifierPrefixImpl(VariantValue *Value) { return parseMatcherExpressionImpl(NameToken, Value); } -/// \brief Parse and validate a matcher expression. +/// Parse and validate a matcher expression. /// \return \c true on success, in which case \c Value has the matcher parsed. /// If the input is malformed, or some argument has an error, it /// returns \c false. @@ -524,7 +524,7 @@ void Parser::addExpressionCompletions() { } } -/// \brief Parse an <Expresssion> +/// Parse an <Expression> bool Parser::parseExpressionImpl(VariantValue *Value) { switch (Tokenizer->nextTokenKind()) { case TokenInfo::TK_Literal: @@ -619,8 +619,8 @@ Parser::completeExpression(StringRef Code, unsigned CompletionOffset, Sema *S, P.parseExpressionImpl(&Dummy); // Sort by specificity, then by name. - std::sort(P.Completions.begin(), P.Completions.end(), - [](const MatcherCompletion &A, const MatcherCompletion &B) { + llvm::sort(P.Completions.begin(), P.Completions.end(), + [](const MatcherCompletion &A, const MatcherCompletion &B) { if (A.Specificity != B.Specificity) return A.Specificity > B.Specificity; return A.TypedText < B.TypedText; diff --git a/lib/ASTMatchers/Dynamic/Registry.cpp b/lib/ASTMatchers/Dynamic/Registry.cpp index 2b7bb7a2120d1..4d2d76f6a75bf 100644 --- a/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/lib/ASTMatchers/Dynamic/Registry.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// // /// \file -/// \brief Registry map populated at static initialization time. +/// Registry map populated at static initialization time. // //===----------------------------------------------------------------------===// @@ -90,7 +90,7 @@ void RegistryMaps::registerMatcher( REGISTER_MATCHER_OVERLOAD(name); \ } while (false) -/// \brief Generate a registry map with all the known matchers. +/// Generate a registry map with all the known matchers. RegistryMaps::RegistryMaps() { // TODO: Here is the list of the missing matchers, grouped by reason. // @@ -134,8 +134,10 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(atomicExpr); REGISTER_MATCHER(atomicType); REGISTER_MATCHER(autoType); + REGISTER_MATCHER(autoreleasePoolStmt) REGISTER_MATCHER(binaryOperator); REGISTER_MATCHER(binaryConditionalOperator); + REGISTER_MATCHER(blockDecl); REGISTER_MATCHER(blockPointerType); REGISTER_MATCHER(booleanType); REGISTER_MATCHER(breakStmt); @@ -186,6 +188,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(decayedType); REGISTER_MATCHER(decl); REGISTER_MATCHER(declaratorDecl); + REGISTER_MATCHER(decltypeType); REGISTER_MATCHER(declCountIs); REGISTER_MATCHER(declRefExpr); REGISTER_MATCHER(declStmt); @@ -281,11 +284,13 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(hasParent); REGISTER_MATCHER(hasQualifier); REGISTER_MATCHER(hasRangeInit); + REGISTER_MATCHER(hasReceiver); REGISTER_MATCHER(hasReceiverType); REGISTER_MATCHER(hasReplacementType); REGISTER_MATCHER(hasReturnValue); REGISTER_MATCHER(hasRHS); REGISTER_MATCHER(hasSelector); + REGISTER_MATCHER(hasAnySelector); REGISTER_MATCHER(hasSingleDecl); REGISTER_MATCHER(hasSize); REGISTER_MATCHER(hasSizeExpr); @@ -296,6 +301,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(hasTemplateArgument); REGISTER_MATCHER(hasThen); REGISTER_MATCHER(hasThreadStorageDuration); + REGISTER_MATCHER(hasTrailingReturn); REGISTER_MATCHER(hasTrueExpression); REGISTER_MATCHER(hasTypeLoc); REGISTER_MATCHER(hasUnaryOperand); @@ -321,6 +327,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(isAnyPointer); REGISTER_MATCHER(isArray); REGISTER_MATCHER(isArrow); + REGISTER_MATCHER(isAssignmentOperator); REGISTER_MATCHER(isBaseInitializer); REGISTER_MATCHER(isBitField); REGISTER_MATCHER(isCatchAll); @@ -344,6 +351,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(isImplicit); REGISTER_MATCHER(isExpansionInFileMatching); REGISTER_MATCHER(isExpansionInMainFile); + REGISTER_MATCHER(isInstanceMessage); REGISTER_MATCHER(isInstantiated); REGISTER_MATCHER(isExpansionInSystemHeader); REGISTER_MATCHER(isInteger); @@ -351,15 +359,18 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(isInTemplateInstantiation); REGISTER_MATCHER(isLambda); REGISTER_MATCHER(isListInitialization); + REGISTER_MATCHER(isMain); REGISTER_MATCHER(isMemberInitializer); REGISTER_MATCHER(isMoveAssignmentOperator); REGISTER_MATCHER(isMoveConstructor); + REGISTER_MATCHER(isNoReturn); REGISTER_MATCHER(isNoThrow); REGISTER_MATCHER(isOverride); REGISTER_MATCHER(isPrivate); REGISTER_MATCHER(isProtected); REGISTER_MATCHER(isPublic); REGISTER_MATCHER(isPure); + REGISTER_MATCHER(isScoped); REGISTER_MATCHER(isSignedInteger); REGISTER_MATCHER(isStaticStorageClass); REGISTER_MATCHER(isStruct); @@ -399,6 +410,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(objcImplementationDecl); REGISTER_MATCHER(objcInterfaceDecl); REGISTER_MATCHER(objcIvarDecl); + REGISTER_MATCHER(objcIvarRefExpr); REGISTER_MATCHER(objcMessageExpr); REGISTER_MATCHER(objcMethodDecl); REGISTER_MATCHER(objcObjectPointerType); diff --git a/lib/ASTMatchers/Dynamic/VariantValue.cpp b/lib/ASTMatchers/Dynamic/VariantValue.cpp index 57858d00acb45..06d95eaa7563e 100644 --- a/lib/ASTMatchers/Dynamic/VariantValue.cpp +++ b/lib/ASTMatchers/Dynamic/VariantValue.cpp @@ -8,7 +8,7 @@ //===----------------------------------------------------------------------===// /// /// \file -/// \brief Polymorphic value type. +/// Polymorphic value type. /// //===----------------------------------------------------------------------===// |
