]> granicus.if.org Git - clang/commitdiff
[ASTMatchers] Add booleanType() matcher.
authorSamuel Benzaquen <sbenza@google.com>
Tue, 22 Dec 2015 20:06:40 +0000 (20:06 +0000)
committerSamuel Benzaquen <sbenza@google.com>
Tue, 22 Dec 2015 20:06:40 +0000 (20:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@256278 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/ASTMatchers/ASTMatchers.h
lib/ASTMatchers/Dynamic/Registry.cpp
unittests/ASTMatchers/ASTMatchersTest.cpp

index 6fcae748d8225abd9849182bf687411b121e3042..7eebe4e411ac9fdd0bbbb8466f70b9a998222ed2 100644 (file)
@@ -3762,6 +3762,18 @@ AST_MATCHER_FUNCTION_P_OVERLOAD(internal::BindableMatcher<TypeLoc>, loc,
       new internal::TypeLocTypeMatcher(InnerMatcher));
 }
 
+/// \brief Matches type \c bool.
+///
+/// Given
+/// \code
+///  struct S { bool func(); };
+/// \endcode
+/// functionDecl(returns(boolType()))
+///   matches "bool func();"
+AST_MATCHER(Type, booleanType) {
+  return Node.isBooleanType();
+}
+
 /// \brief Matches type \c void.
 ///
 /// Given
index 762be25e9145e066cfcc359daafcf31b57b8cdaa..5b1c5529aa470ea174b5e5687a985bb2384a1984 100644 (file)
@@ -108,6 +108,7 @@ RegistryMaps::RegistryMaps() {
   REGISTER_MATCHER(autoType);
   REGISTER_MATCHER(binaryOperator);
   REGISTER_MATCHER(blockPointerType);
+  REGISTER_MATCHER(booleanType);
   REGISTER_MATCHER(breakStmt);
   REGISTER_MATCHER(builtinType);
   REGISTER_MATCHER(callExpr);
index 80f234338a3e0555aec2366d36b54a1de3fac11f..cd18df8410b73d2f3cd1f909101de450304de5bb 100644 (file)
@@ -4146,6 +4146,13 @@ TEST(TypeMatching, MatchesTypes) {
   EXPECT_TRUE(matches("struct S {};", qualType().bind("loc")));
 }
 
+TEST(TypeMatching, MatchesBool) {
+  EXPECT_TRUE(matches("struct S { bool func(); };",
+                      cxxMethodDecl(returns(booleanType()))));
+  EXPECT_TRUE(notMatches("struct S { void func(); };",
+                         cxxMethodDecl(returns(booleanType()))));
+}
+
 TEST(TypeMatching, MatchesVoid) {
   EXPECT_TRUE(matches("struct S { void func(); };",
                       cxxMethodDecl(returns(voidType()))));