This adds a matcher for C++ in Class initializers. --- include/clang/ASTMatchers/ASTMatchers.h | 14 ++++++++++++++ unittests/ASTMatchers/ASTMatchersTest.cpp | 7 +++++++ 2 files changed, 21 insertions(+)
diff --git a/include/clang/ASTMatchers/ASTMatchers.h b/include/clang/ASTMatchers/ASTMatchers.h index 21a4969..6b0a5d6 100644 --- a/include/clang/ASTMatchers/ASTMatchers.h +++ b/include/clang/ASTMatchers/ASTMatchers.h @@ -2848,6 +2848,20 @@ AST_MATCHER(CXXCtorInitializer, isMemberInitializer) { return Node.isMemberInitializer(); } +/// \brief Matches a C++ inClassInitializer matching the given matcher +/// +/// Given: +/// \code +/// class A { int x = 1; }; +/// \endcode +/// +/// \c hasInClassInitializer(integerLiteral()) matches int x = 1 +AST_MATCHER_P(FieldDecl, hasInClassInitializer, + internal::Matcher<Expr>, InnerMatcher) { + return Node.hasInClassInitializer() + && InnerMatcher.matches(*Node.getInClassInitializer(), Finder, Builder); +} + /// \brief Matches any argument of a call expression or a constructor call /// expression. /// diff --git a/unittests/ASTMatchers/ASTMatchersTest.cpp b/unittests/ASTMatchers/ASTMatchersTest.cpp index 133dc70..15776d7 100644 --- a/unittests/ASTMatchers/ASTMatchersTest.cpp +++ b/unittests/ASTMatchers/ASTMatchersTest.cpp @@ -2402,6 +2402,13 @@ TEST(HasAnyConstructorInitializer, IsBaseInitializer) { hasName("E"))))); } +TEST(Matcher, inClassInitializer) { + EXPECT_TRUE(matches("class A{ int x = 1; };", + fieldDecl(hasInClassInitializer(integerLiteral())))); + EXPECT_FALSE(matches("class A{ int x; void b() { x = 1; } };", + fieldDecl(hasInClassInitializer(integerLiteral())))); +} + TEST(Matcher, NewExpression) { StatementMatcher New = cxxNewExpr();
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits