Author: courbet Date: Tue Jul 12 01:36:00 2016 New Revision: 275157 URL: http://llvm.org/viewvc/llvm-project?rev=275157&view=rev Log: [ASTMatchers] isSignedInteger() and isUnsignedInteger()
Complementary to isInteger(), these match signed and unsigned integers respectively. Review: http://reviews.llvm.org/D21989 Modified: cfe/trunk/docs/LibASTMatchersReference.html cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Modified: cfe/trunk/docs/LibASTMatchersReference.html URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/LibASTMatchersReference.html?rev=275157&r1=275156&r2=275157&view=diff ============================================================================== --- cfe/trunk/docs/LibASTMatchersReference.html (original) +++ cfe/trunk/docs/LibASTMatchersReference.html Tue Jul 12 01:36:00 2016 @@ -2968,6 +2968,30 @@ matches "a(int)", "b(long)", but not "c( </pre></td></tr> +<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('isSignedInteger0')"><a name="isSignedInteger0Anchor">isSignedInteger</a></td><td></td></tr> +<tr><td colspan="4" class="doc" id="isSignedInteger0"><pre>Matches QualType nodes that are of signed integer type. + +Given + void a(int); + void b(unsigned long); + void c(double); +functionDecl(hasAnyParameter(hasType(isInteger()))) +matches "a(int)", but not "b(unsigned long)" and "c(double)". +</pre></td></tr> + + +<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('isUnsignedInteger0')"><a name="isUnsignedInteger0Anchor">isUnsignedInteger</a></td><td></td></tr> +<tr><td colspan="4" class="doc" id="isUnsignedInteger0"><pre>Matches QualType nodes that are of unsigned integer type. + +Given + void a(int); + void b(unsigned long); + void c(double); +functionDecl(hasAnyParameter(hasType(isInteger()))) +matches "b(unsigned long)", but not "a(int)" and "c(double)". +</pre></td></tr> + + <tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1QualType.html">QualType</a>></td><td class="name" onclick="toggle('isVolatileQualified0')"><a name="isVolatileQualified0Anchor">isVolatileQualified</a></td><td></td></tr> <tr><td colspan="4" class="doc" id="isVolatileQualified0"><pre>Matches QualType nodes that are volatile-qualified, i.e., that include "top-level" volatile. @@ -3849,8 +3873,11 @@ Given void f(int i); int y; f(y); -callExpr(declRefExpr(to(varDecl(hasName("y")))), -parmVarDecl(hasType(isInteger()))) +callExpr( + forEachArgumentWithParam( + declRefExpr(to(varDecl(hasName("y")))), + parmVarDecl(hasType(isInteger())) +)) matches f(y); with declRefExpr(...) matching int y @@ -4139,8 +4166,11 @@ Given void f(int i); int y; f(y); -callExpr(declRefExpr(to(varDecl(hasName("y")))), -parmVarDecl(hasType(isInteger()))) +callExpr( + forEachArgumentWithParam( + declRefExpr(to(varDecl(hasName("y")))), + parmVarDecl(hasType(isInteger())) +)) matches f(y); with declRefExpr(...) matching int y Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=275157&r1=275156&r2=275157&view=diff ============================================================================== --- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original) +++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Tue Jul 12 01:36:00 2016 @@ -4067,6 +4067,34 @@ AST_MATCHER(QualType, isInteger) { return Node->isIntegerType(); } +/// \brief Matches QualType nodes that are of unsigned integer type. +/// +/// Given +/// \code +/// void a(int); +/// void b(unsigned long); +/// void c(double); +/// \endcode +/// functionDecl(hasAnyParameter(hasType(isInteger()))) +/// matches "b(unsigned long)", but not "a(int)" and "c(double)". +AST_MATCHER(QualType, isUnsignedInteger) { + return Node->isUnsignedIntegerType(); +} + +/// \brief Matches QualType nodes that are of signed integer type. +/// +/// Given +/// \code +/// void a(int); +/// void b(unsigned long); +/// void c(double); +/// \endcode +/// functionDecl(hasAnyParameter(hasType(isInteger()))) +/// matches "a(int)", but not "b(unsigned long)" and "c(double)". +AST_MATCHER(QualType, isSignedInteger) { + return Node->isSignedIntegerType(); +} + /// \brief Matches QualType nodes that are of character type. /// /// Given Modified: cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp?rev=275157&r1=275156&r2=275157&view=diff ============================================================================== --- cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp (original) +++ cfe/trunk/lib/ASTMatchers/Dynamic/Registry.cpp Tue Jul 12 01:36:00 2016 @@ -321,9 +321,11 @@ RegistryMaps::RegistryMaps() { REGISTER_MATCHER(isProtected); REGISTER_MATCHER(isPublic); REGISTER_MATCHER(isPure); + REGISTER_MATCHER(isSignedInteger); REGISTER_MATCHER(isStruct); REGISTER_MATCHER(isTemplateInstantiation); REGISTER_MATCHER(isUnion); + REGISTER_MATCHER(isUnsignedInteger); REGISTER_MATCHER(isVariadic); REGISTER_MATCHER(isVirtual); REGISTER_MATCHER(isVirtualAsWritten); Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp?rev=275157&r1=275156&r2=275157&view=diff ============================================================================== --- cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp (original) +++ cfe/trunk/unittests/ASTMatchers/ASTMatchersNarrowingTest.cpp Tue Jul 12 01:36:00 2016 @@ -723,6 +723,18 @@ TEST(IsInteger, ReportsNoFalsePositives) to(varDecl(hasType(isInteger())))))))); } +TEST(IsSignedInteger, MatchesSignedIntegers) { + EXPECT_TRUE(matches("int i = 0;", varDecl(hasType(isSignedInteger())))); + EXPECT_TRUE(notMatches("unsigned i = 0;", + varDecl(hasType(isSignedInteger())))); +} + +TEST(IsUnsignedInteger, MatchesUnsignedIntegers) { + EXPECT_TRUE(notMatches("int i = 0;", varDecl(hasType(isUnsignedInteger())))); + EXPECT_TRUE(matches("unsigned i = 0;", + varDecl(hasType(isUnsignedInteger())))); +} + TEST(IsAnyPointer, MatchesPointers) { EXPECT_TRUE(matches("int* i = nullptr;", varDecl(hasType(isAnyPointer())))); } _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits