From: Samuel Benzaquen Date: Wed, 17 Jul 2013 15:11:30 +0000 (+0000) Subject: Add TemplateArgument related matchers to the registry. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=671840a66f63f55705175e51fb44f77a55e0e3b6;p=clang Add TemplateArgument related matchers to the registry. Summary: Continue adding more matchers to the dynamic registry. This time, we add TemplateArgument matchers. Reviewers: klimek CC: cfe-commits, revane Differential Revision: http://llvm-reviews.chandlerc.com/D1166 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@186514 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/ASTMatchers/Dynamic/Registry.cpp b/lib/ASTMatchers/Dynamic/Registry.cpp index 4b43b4bf68..f523cc4abb 100644 --- a/lib/ASTMatchers/Dynamic/Registry.cpp +++ b/lib/ASTMatchers/Dynamic/Registry.cpp @@ -56,10 +56,6 @@ void RegistryMaps::registerMatcher(StringRef MatcherName, RegistryMaps::RegistryMaps() { // TODO: Here is the list of the missing matchers, grouped by reason. // - // Need DynTypedNode fixes: - // hasAnyTemplateArgument - // hasTemplateArgument - // // Need Variant/Parser fixes: // ofKind // @@ -155,6 +151,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(hasAnyConstructorInitializer); REGISTER_MATCHER(hasAnyParameter); REGISTER_MATCHER(hasAnySubstatement); + REGISTER_MATCHER(hasAnyTemplateArgument); REGISTER_MATCHER(hasAnyUsingShadowDecl); REGISTER_MATCHER(hasArgument); REGISTER_MATCHER(hasArgumentOfType); @@ -189,6 +186,7 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(hasSizeExpr); REGISTER_MATCHER(hasSourceExpression); REGISTER_MATCHER(hasTargetDecl); + REGISTER_MATCHER(hasTemplateArgument); REGISTER_MATCHER(hasTrueExpression); REGISTER_MATCHER(hasUnaryOperand); REGISTER_MATCHER(hasValueType); diff --git a/unittests/ASTMatchers/Dynamic/RegistryTest.cpp b/unittests/ASTMatchers/Dynamic/RegistryTest.cpp index d0d42740ab..d546fe59ff 100644 --- a/unittests/ASTMatchers/Dynamic/RegistryTest.cpp +++ b/unittests/ASTMatchers/Dynamic/RegistryTest.cpp @@ -157,6 +157,20 @@ TEST_F(RegistryTest, PolymorphicMatchers) { #endif } +TEST_F(RegistryTest, TemplateArgument) { + Matcher HasTemplateArgument = constructMatcher( + "classTemplateSpecializationDecl", + constructMatcher( + "hasAnyTemplateArgument", + constructMatcher("refersToType", + constructMatcher("asString", std::string("int"))))) + .getTypedMatcher(); + EXPECT_TRUE(matches("template class A {}; A a;", + HasTemplateArgument)); + EXPECT_FALSE(matches("template class A {}; A a;", + HasTemplateArgument)); +} + TEST_F(RegistryTest, TypeTraversal) { Matcher M = constructMatcher( "pointerType",