Add hasInClassInitializer matcher

Julian Bangert via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 2 11:01:51 PST 2016


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();
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160302/97c8ca8a/attachment-0001.html>


More information about the cfe-commits mailing list