Add hasInClassInitializer matcher

Richard Smith via cfe-commits cfe-commits at lists.llvm.org
Wed Mar 2 12:23:33 PST 2016


On Wed, Mar 2, 2016 at 12:06 PM, Aaron Ballman via cfe-commits
<cfe-commits at lists.llvm.org> wrote:
> On Wed, Mar 2, 2016 at 2:01 PM, Julian Bangert via cfe-commits
> <cfe-commits at 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 at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
>>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


More information about the cfe-commits mailing list