From: Samuel Benzaquen Date: Wed, 17 Jul 2013 14:28:00 +0000 (+0000) Subject: Add CXXCtorInitializer related matchers to the dynamic matcher registry. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=86e4d744eaa44f7e674e41074913d8ed61f1d433;p=clang Add CXXCtorInitializer related matchers to the dynamic matcher registry. Summary: Now that CXXCtorInitializer is already supported in ASTNodeKind, add CXXCtorInitializer matchers to the dynamic matcher registry. Reviewers: klimek CC: cfe-commits, revane Differential Revision: http://llvm-reviews.chandlerc.com/D1158 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186508 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ASTMatchers/Dynamic/Registry.cpp b/lib/ASTMatchers/Dynamic/Registry.cpp index 9e8898e95d..4b43b4bf68 100644 --- a/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/lib/ASTMatchers/Dynamic/Registry.cpp @@ -63,12 +63,6 @@ RegistryMaps::RegistryMaps() { // Need Variant/Parser fixes: // ofKind // - // CXXCtorInitializer support: - // hasAnyConstructorInitializer - // forField - // withInitializer - // isWritten - // // Function overloaded by args: // hasType // callee @@ -149,6 +143,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(explicitCastExpr); REGISTER_MATCHER(expr); REGISTER_MATCHER(fieldDecl); + REGISTER_MATCHER(forField); REGISTER_MATCHER(forRangeStmt); REGISTER_MATCHER(forStmt); REGISTER_MATCHER(functionDecl); @@ -157,6 +152,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(functionalCastExpr); REGISTER_MATCHER(gotoStmt); REGISTER_MATCHER(hasAnyArgument); + REGISTER_MATCHER(hasAnyConstructorInitializer); REGISTER_MATCHER(hasAnyParameter); REGISTER_MATCHER(hasAnySubstatement); REGISTER_MATCHER(hasAnyUsingShadowDecl); @@ -218,6 +214,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(isPublic); REGISTER_MATCHER(isTemplateInstantiation); REGISTER_MATCHER(isVirtual); + REGISTER_MATCHER(isWritten); REGISTER_MATCHER(lValueReferenceType); REGISTER_MATCHER(labelStmt); REGISTER_MATCHER(lambdaExpr); @@ -280,6 +277,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(varDecl); REGISTER_MATCHER(variableArrayType); REGISTER_MATCHER(whileStmt); + REGISTER_MATCHER(withInitializer); } RegistryMaps::~RegistryMaps() { diff --git a/unittests/ASTMatchers/Dynamic/RegistryTest.cpp b/unittests/ASTMatchers/Dynamic/RegistryTest.cpp index b7e29ed0cb..d0d42740ab 100644 --- a/unittests/ASTMatchers/Dynamic/RegistryTest.cpp +++ b/unittests/ASTMatchers/Dynamic/RegistryTest.cpp @@ -173,6 +173,17 @@ TEST_F(RegistryTest, TypeTraversal) { EXPECT_TRUE(matches("int b[7];", M)); } +TEST_F(RegistryTest, CXXCtorInitializer) { + Matcher CtorDecl = constructMatcher( + "constructorDecl", + constructMatcher("hasAnyConstructorInitializer", + constructMatcher("forField", hasName("foo")))) + .getTypedMatcher(); + EXPECT_TRUE(matches("struct Foo { Foo() : foo(1) {} int foo; };", CtorDecl)); + EXPECT_FALSE(matches("struct Foo { Foo() {} int foo; };", CtorDecl)); + EXPECT_FALSE(matches("struct Foo { Foo() : bar(1) {} int bar; };", CtorDecl)); +} + TEST_F(RegistryTest, Errors) { // Incorrect argument count. OwningPtr Error(new Diagnostics());