[cfe-commits] r164121 - in /cfe/trunk: include/clang/ASTMatchers/ASTMatchers.h unittests/ASTMatchers/ASTMatchersTest.cpp

Daniel Jasper djasper at google.com
Tue Sep 18 06:09:13 PDT 2012


Author: djasper
Date: Tue Sep 18 08:09:13 2012
New Revision: 164121

URL: http://llvm.org/viewvc/llvm-project?rev=164121&view=rev
Log:
Make all VariadicDynCast-Expr-matchers StatementMatchers

Having Expr-subclass-matchers being VariadicDynCast-Expr-matchers does
not provide additional type safety and just makes using them harder. In
the clang AST, expressions are always statements and an expression
matcher can be used anywhere, a statement matcher is expected. Any given
matcher definition still has at least one noun.

Modified:
    cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
    cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp

Modified: cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h?rev=164121&r1=164120&r2=164121&view=diff
==============================================================================
--- cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h (original)
+++ cfe/trunk/include/clang/ASTMatchers/ASTMatchers.h Tue Sep 18 08:09:13 2012
@@ -741,7 +741,7 @@
 ///   true
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CXXBoolLiteralExpr> boolLiteral;
 
 /// \brief Matches string literals (also matches wide string literals).
@@ -751,7 +751,7 @@
 ///   char *s = "abcd"; wchar_t *ws = L"abcd"
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   StringLiteral> stringLiteral;
 
 /// \brief Matches character literals (also matches wchar_t).
@@ -764,7 +764,7 @@
 ///   char ch = 'a'; wchar_t chw = L'a';
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CharacterLiteral> characterLiteral;
 
 /// \brief Matches integer literals of all sizes / encodings.
@@ -773,7 +773,7 @@
 ///
 /// Example matches 1, 1L, 0x1, 1U
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   IntegerLiteral> integerLiteral;
 
 /// \brief Matches binary operator expressions.
@@ -817,7 +817,7 @@
 ///   void* p = reinterpret_cast<char*>(&p);
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CXXReinterpretCastExpr> reinterpretCastExpr;
 
 /// \brief Matches a C++ static_cast expression.
@@ -834,7 +834,7 @@
 ///   long eight(static_cast<long>(8));
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CXXStaticCastExpr> staticCastExpr;
 
 /// \brief Matches a dynamic_cast expression.
@@ -850,7 +850,7 @@
 ///   D* p = dynamic_cast<D*>(&b);
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CXXDynamicCastExpr> dynamicCastExpr;
 
 /// \brief Matches a const_cast expression.
@@ -862,7 +862,7 @@
 ///   int* p = const_cast<int*>(&r);
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CXXConstCastExpr> constCastExpr;
 
 /// \brief Matches explicit cast expressions.
@@ -887,7 +887,7 @@
 ///   long ell = 42;
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   ExplicitCastExpr> explicitCastExpr;
 
 /// \brief Matches the implicit cast nodes of Clang's AST.
@@ -895,7 +895,7 @@
 /// This matches many different places, including function call return value
 /// eliding, as well as any type conversions.
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   ImplicitCastExpr> implicitCastExpr;
 
 /// \brief Matches any cast nodes of Clang's AST.
@@ -911,7 +911,7 @@
 ///   int i = (0);
 ///   int k = 0;
 /// \endcode
-const internal::VariadicDynCastAllOfMatcher<Expr, CastExpr> castExpr;
+const internal::VariadicDynCastAllOfMatcher<Stmt, CastExpr> castExpr;
 
 /// \brief Matches functional cast expressions
 ///
@@ -922,7 +922,7 @@
 ///   Foo h = Foo(bar);
 /// \endcode
 const internal::VariadicDynCastAllOfMatcher<
-  Expr,
+  Stmt,
   CXXFunctionalCastExpr> functionalCastExpr;
 
 /// \brief Various overloads for the anyOf matcher.

Modified: cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp?rev=164121&r1=164120&r2=164121&view=diff
==============================================================================
--- cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp (original)
+++ cfe/trunk/unittests/ASTMatchers/ASTMatchersTest.cpp Tue Sep 18 08:09:13 2012
@@ -910,8 +910,8 @@
 }
 
 TEST(Matcher, CalledVariable) {
-  StatementMatcher CallOnVariableY = expr(
-      memberCallExpr(on(declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher CallOnVariableY =
+      memberCallExpr(on(declRefExpr(to(varDecl(hasName("y"))))));
 
   EXPECT_TRUE(matches(
       "class Y { public: void x() { Y y; y.x(); } };", CallOnVariableY));
@@ -1083,29 +1083,29 @@
 }
 
 TEST(Matcher, Argument) {
-  StatementMatcher CallArgumentY = expr(callExpr(
-      hasArgument(0, declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher CallArgumentY = callExpr(
+      hasArgument(0, declRefExpr(to(varDecl(hasName("y"))))));
 
   EXPECT_TRUE(matches("void x(int) { int y; x(y); }", CallArgumentY));
   EXPECT_TRUE(
       matches("class X { void x(int) { int y; x(y); } };", CallArgumentY));
   EXPECT_TRUE(notMatches("void x(int) { int z; x(z); }", CallArgumentY));
 
-  StatementMatcher WrongIndex = expr(callExpr(
-      hasArgument(42, declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher WrongIndex = callExpr(
+      hasArgument(42, declRefExpr(to(varDecl(hasName("y"))))));
   EXPECT_TRUE(notMatches("void x(int) { int y; x(y); }", WrongIndex));
 }
 
 TEST(Matcher, AnyArgument) {
-  StatementMatcher CallArgumentY = expr(callExpr(
-      hasAnyArgument(declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher CallArgumentY = callExpr(
+      hasAnyArgument(declRefExpr(to(varDecl(hasName("y"))))));
   EXPECT_TRUE(matches("void x(int, int) { int y; x(1, y); }", CallArgumentY));
   EXPECT_TRUE(matches("void x(int, int) { int y; x(y, 42); }", CallArgumentY));
   EXPECT_TRUE(notMatches("void x(int, int) { x(1, 2); }", CallArgumentY));
 }
 
 TEST(Matcher, ArgumentCount) {
-  StatementMatcher Call1Arg = expr(callExpr(argumentCountIs(1)));
+  StatementMatcher Call1Arg = callExpr(argumentCountIs(1));
 
   EXPECT_TRUE(matches("void x(int) { x(0); }", Call1Arg));
   EXPECT_TRUE(matches("class X { void x(int) { x(0); } };", Call1Arg));
@@ -1233,7 +1233,7 @@
 }
 
 TEST(Matcher, ConstructorCall) {
-  StatementMatcher Constructor = expr(constructExpr());
+  StatementMatcher Constructor = constructExpr();
 
   EXPECT_TRUE(
       matches("class X { public: X(); }; void x() { X x; }", Constructor));
@@ -1247,8 +1247,8 @@
 }
 
 TEST(Matcher, ConstructorArgument) {
-  StatementMatcher Constructor = expr(constructExpr(
-      hasArgument(0, declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher Constructor = constructExpr(
+      hasArgument(0, declRefExpr(to(varDecl(hasName("y"))))));
 
   EXPECT_TRUE(
       matches("class X { public: X(int); }; void x() { int y; X x(y); }",
@@ -1263,16 +1263,15 @@
       notMatches("class X { public: X(int); }; void x() { int z; X x(z); }",
                  Constructor));
 
-  StatementMatcher WrongIndex = expr(constructExpr(
-      hasArgument(42, declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher WrongIndex = constructExpr(
+      hasArgument(42, declRefExpr(to(varDecl(hasName("y"))))));
   EXPECT_TRUE(
       notMatches("class X { public: X(int); }; void x() { int y; X x(y); }",
                  WrongIndex));
 }
 
 TEST(Matcher, ConstructorArgumentCount) {
-  StatementMatcher Constructor1Arg =
-      expr(constructExpr(argumentCountIs(1)));
+  StatementMatcher Constructor1Arg = constructExpr(argumentCountIs(1));
 
   EXPECT_TRUE(
       matches("class X { public: X(int); }; void x() { X x(0); }",
@@ -1289,7 +1288,7 @@
 }
 
 TEST(Matcher, BindTemporaryExpression) {
-  StatementMatcher TempExpression = expr(bindTemporaryExpr());
+  StatementMatcher TempExpression = bindTemporaryExpr();
 
   std::string ClassString = "class string { public: string(); ~string(); }; ";
 
@@ -1440,7 +1439,7 @@
 }
 
 TEST(Matcher, NewExpression) {
-  StatementMatcher New = expr(newExpr());
+  StatementMatcher New = newExpr();
 
   EXPECT_TRUE(matches("class X { public: X(); }; void x() { new X; }", New));
   EXPECT_TRUE(
@@ -1451,8 +1450,8 @@
 }
 
 TEST(Matcher, NewExpressionArgument) {
-  StatementMatcher New = expr(constructExpr(
-      hasArgument(0, declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher New = constructExpr(
+      hasArgument(0, declRefExpr(to(varDecl(hasName("y"))))));
 
   EXPECT_TRUE(
       matches("class X { public: X(int); }; void x() { int y; new X(y); }",
@@ -1464,8 +1463,8 @@
       notMatches("class X { public: X(int); }; void x() { int z; new X(z); }",
                  New));
 
-  StatementMatcher WrongIndex = expr(constructExpr(
-      hasArgument(42, declRefExpr(to(varDecl(hasName("y")))))));
+  StatementMatcher WrongIndex = constructExpr(
+      hasArgument(42, declRefExpr(to(varDecl(hasName("y"))))));
   EXPECT_TRUE(
       notMatches("class X { public: X(int); }; void x() { int y; new X(y); }",
                  WrongIndex));
@@ -1496,7 +1495,7 @@
 }
 
 TEST(Matcher, StringLiterals) {
-  StatementMatcher Literal = expr(stringLiteral());
+  StatementMatcher Literal = stringLiteral();
   EXPECT_TRUE(matches("const char *s = \"string\";", Literal));
   // wide string
   EXPECT_TRUE(matches("const wchar_t *s = L\"string\";", Literal));
@@ -1507,7 +1506,7 @@
 }
 
 TEST(Matcher, CharacterLiterals) {
-  StatementMatcher CharLiteral = expr(characterLiteral());
+  StatementMatcher CharLiteral = characterLiteral();
   EXPECT_TRUE(matches("const char c = 'c';", CharLiteral));
   // wide character
   EXPECT_TRUE(matches("const char c = L'c';", CharLiteral));
@@ -1517,7 +1516,7 @@
 }
 
 TEST(Matcher, IntegerLiterals) {
-  StatementMatcher HasIntLiteral = expr(integerLiteral());
+  StatementMatcher HasIntLiteral = integerLiteral();
   EXPECT_TRUE(matches("int i = 10;", HasIntLiteral));
   EXPECT_TRUE(matches("int i = 0x1AB;", HasIntLiteral));
   EXPECT_TRUE(matches("int i = 10L;", HasIntLiteral));
@@ -2154,112 +2153,108 @@
 }
 
 TEST(CastExpression, MatchesExplicitCasts) {
-  EXPECT_TRUE(matches("char *p = reinterpret_cast<char *>(&p);",
-                      expr(castExpr())));
-  EXPECT_TRUE(matches("void *p = (void *)(&p);", expr(castExpr())));
-  EXPECT_TRUE(matches("char q, *p = const_cast<char *>(&q);",
-                      expr(castExpr())));
-  EXPECT_TRUE(matches("char c = char(0);", expr(castExpr())));
+  EXPECT_TRUE(matches("char *p = reinterpret_cast<char *>(&p);",castExpr()));
+  EXPECT_TRUE(matches("void *p = (void *)(&p);", castExpr()));
+  EXPECT_TRUE(matches("char q, *p = const_cast<char *>(&q);", castExpr()));
+  EXPECT_TRUE(matches("char c = char(0);", castExpr()));
 }
 TEST(CastExpression, MatchesImplicitCasts) {
   // This test creates an implicit cast from int to char.
-  EXPECT_TRUE(matches("char c = 0;", expr(castExpr())));
+  EXPECT_TRUE(matches("char c = 0;", castExpr()));
   // This test creates an implicit cast from lvalue to rvalue.
-  EXPECT_TRUE(matches("char c = 0, d = c;", expr(castExpr())));
+  EXPECT_TRUE(matches("char c = 0, d = c;", castExpr()));
 }
 
 TEST(CastExpression, DoesNotMatchNonCasts) {
-  EXPECT_TRUE(notMatches("char c = '0';", expr(castExpr())));
-  EXPECT_TRUE(notMatches("char c, &q = c;", expr(castExpr())));
-  EXPECT_TRUE(notMatches("int i = (0);", expr(castExpr())));
-  EXPECT_TRUE(notMatches("int i = 0;", expr(castExpr())));
+  EXPECT_TRUE(notMatches("char c = '0';", castExpr()));
+  EXPECT_TRUE(notMatches("char c, &q = c;", castExpr()));
+  EXPECT_TRUE(notMatches("int i = (0);", castExpr()));
+  EXPECT_TRUE(notMatches("int i = 0;", castExpr()));
 }
 
 TEST(ReinterpretCast, MatchesSimpleCase) {
   EXPECT_TRUE(matches("char* p = reinterpret_cast<char*>(&p);",
-                      expr(reinterpretCastExpr())));
+                      reinterpretCastExpr()));
 }
 
 TEST(ReinterpretCast, DoesNotMatchOtherCasts) {
-  EXPECT_TRUE(notMatches("char* p = (char*)(&p);",
-                         expr(reinterpretCastExpr())));
+  EXPECT_TRUE(notMatches("char* p = (char*)(&p);", reinterpretCastExpr()));
   EXPECT_TRUE(notMatches("char q, *p = const_cast<char*>(&q);",
-                         expr(reinterpretCastExpr())));
+                         reinterpretCastExpr()));
   EXPECT_TRUE(notMatches("void* p = static_cast<void*>(&p);",
-                         expr(reinterpretCastExpr())));
+                         reinterpretCastExpr()));
   EXPECT_TRUE(notMatches("struct B { virtual ~B() {} }; struct D : B {};"
                          "B b;"
                          "D* p = dynamic_cast<D*>(&b);",
-                         expr(reinterpretCastExpr())));
+                         reinterpretCastExpr()));
 }
 
 TEST(FunctionalCast, MatchesSimpleCase) {
   std::string foo_class = "class Foo { public: Foo(char*); };";
   EXPECT_TRUE(matches(foo_class + "void r() { Foo f = Foo(\"hello world\"); }",
-                      expr(functionalCastExpr())));
+                      functionalCastExpr()));
 }
 
 TEST(FunctionalCast, DoesNotMatchOtherCasts) {
   std::string FooClass = "class Foo { public: Foo(char*); };";
   EXPECT_TRUE(
       notMatches(FooClass + "void r() { Foo f = (Foo) \"hello world\"; }",
-                 expr(functionalCastExpr())));
+                 functionalCastExpr()));
   EXPECT_TRUE(
       notMatches(FooClass + "void r() { Foo f = \"hello world\"; }",
-                 expr(functionalCastExpr())));
+                 functionalCastExpr()));
 }
 
 TEST(DynamicCast, MatchesSimpleCase) {
   EXPECT_TRUE(matches("struct B { virtual ~B() {} }; struct D : B {};"
                       "B b;"
                       "D* p = dynamic_cast<D*>(&b);",
-                      expr(dynamicCastExpr())));
+                      dynamicCastExpr()));
 }
 
 TEST(StaticCast, MatchesSimpleCase) {
   EXPECT_TRUE(matches("void* p(static_cast<void*>(&p));",
-                      expr(staticCastExpr())));
+                      staticCastExpr()));
 }
 
 TEST(StaticCast, DoesNotMatchOtherCasts) {
-  EXPECT_TRUE(notMatches("char* p = (char*)(&p);",
-                         expr(staticCastExpr())));
+  EXPECT_TRUE(notMatches("char* p = (char*)(&p);", staticCastExpr()));
   EXPECT_TRUE(notMatches("char q, *p = const_cast<char*>(&q);",
-                         expr(staticCastExpr())));
+                         staticCastExpr()));
   EXPECT_TRUE(notMatches("void* p = reinterpret_cast<char*>(&p);",
-                         expr(staticCastExpr())));
+                         staticCastExpr()));
   EXPECT_TRUE(notMatches("struct B { virtual ~B() {} }; struct D : B {};"
                          "B b;"
                          "D* p = dynamic_cast<D*>(&b);",
-                         expr(staticCastExpr())));
+                         staticCastExpr()));
 }
 
 TEST(HasDestinationType, MatchesSimpleCase) {
   EXPECT_TRUE(matches("char* p = static_cast<char*>(0);",
-                      expr(staticCastExpr(hasDestinationType(
-                               pointsTo(TypeMatcher(anything())))))));
+                      staticCastExpr(hasDestinationType(
+                          pointsTo(TypeMatcher(anything()))))));
 }
 
 TEST(HasImplicitDestinationType, MatchesSimpleCase) {
   // This test creates an implicit const cast.
   EXPECT_TRUE(matches("int x; const int i = x;",
-                      expr(implicitCastExpr(
-                          hasImplicitDestinationType(isInteger())))));
+                      implicitCastExpr(
+                          hasImplicitDestinationType(isInteger()))));
   // This test creates an implicit array-to-pointer cast.
   EXPECT_TRUE(matches("int arr[3]; int *p = arr;",
-                      expr(implicitCastExpr(hasImplicitDestinationType(
-                          pointsTo(TypeMatcher(anything())))))));
+                      implicitCastExpr(hasImplicitDestinationType(
+                          pointsTo(TypeMatcher(anything()))))));
 }
 
 TEST(HasImplicitDestinationType, DoesNotMatchIncorrectly) {
   // This test creates an implicit cast from int to char.
   EXPECT_TRUE(notMatches("char c = 0;",
-                      expr(implicitCastExpr(hasImplicitDestinationType(
-                          unless(anything()))))));
+                      implicitCastExpr(hasImplicitDestinationType(
+                          unless(anything())))));
   // This test creates an implicit array-to-pointer cast.
   EXPECT_TRUE(notMatches("int arr[3]; int *p = arr;",
-                      expr(implicitCastExpr(hasImplicitDestinationType(
-                          unless(anything()))))));
+                      implicitCastExpr(hasImplicitDestinationType(
+                          unless(anything())))));
 }
 
 TEST(ImplicitCast, MatchesSimpleCase) {
@@ -2438,15 +2433,15 @@
 TEST(HasSourceExpression, MatchesImplicitCasts) {
   EXPECT_TRUE(matches("class string {}; class URL { public: URL(string s); };"
                       "void r() {string a_string; URL url = a_string; }",
-                      expr(implicitCastExpr(
-                          hasSourceExpression(constructExpr())))));
+                      implicitCastExpr(
+                          hasSourceExpression(constructExpr()))));
 }
 
 TEST(HasSourceExpression, MatchesExplicitCasts) {
   EXPECT_TRUE(matches("float x = static_cast<float>(42);",
-                      expr(explicitCastExpr(
+                      explicitCastExpr(
                           hasSourceExpression(hasDescendant(
-                              expr(integerLiteral())))))));
+                              expr(integerLiteral()))))));
 }
 
 TEST(Statement, DoesNotMatchDeclarations) {
@@ -2754,14 +2749,13 @@
 TEST(HasAncenstor, MatchesStatementAncestors) {
   EXPECT_TRUE(matches(
       "void f() { if (true) { while (false) { 42; } } }",
-      expr(integerLiteral(equals(42), hasAncestor(ifStmt())))));
+      integerLiteral(equals(42), hasAncestor(ifStmt()))));
 }
 
 TEST(HasAncestor, DrillsThroughDifferentHierarchies) {
   EXPECT_TRUE(matches(
       "void f() { if (true) { int x = 42; } }",
-      expr(integerLiteral(
-          equals(42), hasAncestor(functionDecl(hasName("f")))))));
+      integerLiteral(equals(42), hasAncestor(functionDecl(hasName("f"))))));
 }
 
 TEST(HasAncestor, BindsRecursiveCombinations) {





More information about the cfe-commits mailing list