Add the isStaticLocal() AST matcher for matching on local static variables.
Patch by Joe Ranieri. llvm-svn: 345502
This commit is contained in:
parent
bb1bd9ed79
commit
31f48c50cd
|
@ -4123,6 +4123,18 @@ varDecl(isExternC())
|
|||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('isStaticLocal0')"><a name="isStaticLocal0Anchor">isStaticLocal</a></td><td></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isStaticLocal0"><pre>Matches a static variable with local scope.
|
||||
|
||||
Example matches y (matcher = varDecl(isStaticLocal()))
|
||||
void f() {
|
||||
int x;
|
||||
static int y;
|
||||
}
|
||||
static int z;
|
||||
</pre></td></tr>
|
||||
|
||||
|
||||
<tr><td>Matcher<<a href="http://clang.llvm.org/doxygen/classclang_1_1VarDecl.html">VarDecl</a>></td><td class="name" onclick="toggle('isStaticStorageClass1')"><a name="isStaticStorageClass1Anchor">isStaticStorageClass</a></td><td></td></tr>
|
||||
<tr><td colspan="4" class="doc" id="isStaticStorageClass1"><pre>Matches variablefunction declarations that have "static" storage
|
||||
class specifier ("static" keyword) written in the source.
|
||||
|
|
|
@ -3300,6 +3300,20 @@ AST_MATCHER_P(
|
|||
InnerMatcher.matches(*Initializer, Finder, Builder));
|
||||
}
|
||||
|
||||
/// \brief Matches a static variable with local scope.
|
||||
///
|
||||
/// Example matches y (matcher = varDecl(isStaticLocal()))
|
||||
/// \code
|
||||
/// void f() {
|
||||
/// int x;
|
||||
/// static int y;
|
||||
/// }
|
||||
/// static int z;
|
||||
/// \endcode
|
||||
AST_MATCHER(VarDecl, isStaticLocal) {
|
||||
return Node.isStaticLocal();
|
||||
}
|
||||
|
||||
/// Matches a variable declaration that has function scope and is a
|
||||
/// non-static local variable.
|
||||
///
|
||||
|
|
|
@ -378,6 +378,7 @@ RegistryMaps::RegistryMaps() {
|
|||
REGISTER_MATCHER(isPure);
|
||||
REGISTER_MATCHER(isScoped);
|
||||
REGISTER_MATCHER(isSignedInteger);
|
||||
REGISTER_MATCHER(isStaticLocal);
|
||||
REGISTER_MATCHER(isStaticStorageClass);
|
||||
REGISTER_MATCHER(isStruct);
|
||||
REGISTER_MATCHER(isTemplateInstantiation);
|
||||
|
|
|
@ -667,6 +667,14 @@ TEST(Matcher, VarDecl_Storage) {
|
|||
EXPECT_TRUE(matches("void f() { static int X; }", M));
|
||||
}
|
||||
|
||||
TEST(Matcher, VarDecl_IsStaticLocal) {
|
||||
auto M = varDecl(isStaticLocal());
|
||||
EXPECT_TRUE(matches("void f() { static int X; }", M));
|
||||
EXPECT_TRUE(notMatches("static int X;", M));
|
||||
EXPECT_TRUE(notMatches("void f() { int X; }", M));
|
||||
EXPECT_TRUE(notMatches("int X;", M));
|
||||
}
|
||||
|
||||
TEST(Matcher, VarDecl_StorageDuration) {
|
||||
std::string T =
|
||||
"void f() { int x; static int y; } int a;static int b;extern int c;";
|
||||
|
|
Loading…
Reference in New Issue