On Wed, Mar 2, 2016 at 12:06 PM, Aaron Ballman via cfe-commits <cfe-commits@lists.llvm.org> wrote: > On Wed, Mar 2, 2016 at 2:01 PM, Julian Bangert via cfe-commits > <cfe-commits@lists.llvm.org> wrote: >> 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 > > Please also generate the AST matcher documentation by running > dump-ast-matchers.py and register the function in Registry.cpp. Also, > if you can provide an svn patch instead of a git patch, it would be > appreciated (especially if you need someone to commit on your behalf).
Please also name this "hasDefaultMemberInitializer" to match the C++ standard's (fairly new) name for this feature. We'll rename Clang's internals to match at some point soon. >> 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; } };", > > This should use EXPECT_TRUE and notMatches. > > ~Aaron > >> + >> 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 >> > _______________________________________________ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits