mirror of
https://github.com/intel/llvm.git
synced 2026-01-16 05:32:28 +08:00
[ASTMatchers] isSignedInteger() and isUnsignedInteger()
Complementary to isInteger(), these match signed and unsigned integers respectively. Review: http://reviews.llvm.org/D21989 llvm-svn: 275157
This commit is contained in:
@@ -2968,6 +2968,30 @@ matches "a(int)", "b(long)", but not "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('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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()))));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user