]> granicus.if.org Git - clang/commitdiff
Teach CheckerVisitor about CXXOperatorCallExpr.
authorTed Kremenek <kremenek@apple.com>
Wed, 16 Dec 2009 05:52:19 +0000 (05:52 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 16 Dec 2009 05:52:19 +0000 (05:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@91509 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Analysis/PathSensitive/CheckerVisitor.def
include/clang/Analysis/PathSensitive/CheckerVisitor.h

index 4144d1a0a7345623dd82db5d0c62b82b0cff6758..1432cd184e686a573f1de23f2581271e28390555 100644 (file)
 //===---------------------------------------------------------------------===//
 
 #ifndef PREVISIT
-#define PREVISIT(NODE)
+#define PREVISIT(NODE, FALLBACK)
 #endif
 
 #ifndef POSTVISIT
-#define POSTVISIT(NODE)
+#define POSTVISIT(NODE, FALLBACK)
 #endif
 
-PREVISIT(ArraySubscriptExpr)
-PREVISIT(BinaryOperator)
-PREVISIT(CallExpr)
-PREVISIT(CastExpr)
-PREVISIT(DeclStmt)
-PREVISIT(ObjCMessageExpr)
-PREVISIT(ReturnStmt)
+PREVISIT(ArraySubscriptExpr, Stmt)
+PREVISIT(BinaryOperator, Stmt)
+PREVISIT(CallExpr, Stmt)
+PREVISIT(CastExpr, Stmt)
+PREVISIT(CXXOperatorCallExpr, CallExpr)
+PREVISIT(DeclStmt, Stmt)
+PREVISIT(ObjCMessageExpr, Stmt)
+PREVISIT(ReturnStmt, Stmt)
 
-POSTVISIT(CallExpr)
-POSTVISIT(BlockExpr)
-POSTVISIT(BinaryOperator)
+POSTVISIT(CallExpr, Stmt)
+POSTVISIT(CXXOperatorCallExpr, CallExpr)
+POSTVISIT(BlockExpr, Stmt)
+POSTVISIT(BinaryOperator, Stmt)
 
 #undef PREVISIT
 #undef POSTVISIT
index 7cef17eb659186a7f164fb41c28b59a2f200c0ac..f5145bbb7a675202a3931597a625895ab731c840 100644 (file)
@@ -53,20 +53,20 @@ public:
                                          static_cast<const BinaryOperator*>(S));
         break;
 
-#define PREVISIT(NAME) \
+#define PREVISIT(NAME, FALLBACK) \
 case Stmt::NAME ## Class:\
 static_cast<ImplClass*>(this)->PreVisit ## NAME(C,static_cast<const NAME*>(S));\
 break;
 #include "clang/Analysis/PathSensitive/CheckerVisitor.def"
     }
   }
-    
+  
   void PostVisit(CheckerContext &C, const Stmt *S) {
     switch (S->getStmtClass()) {
       default:
         assert(false && "Unsupport statement.");
         return;
-#define POSTVISIT(NAME) \
+#define POSTVISIT(NAME, FALLBACK) \
 case Stmt::NAME ## Class:\
 static_cast<ImplClass*>(this)->\
 PostVisit ## NAME(C,static_cast<const NAME*>(S));\
@@ -75,12 +75,19 @@ break;
     }
   }
 
-#define PREVISIT(NAME) \
-void PreVisit ## NAME(CheckerContext &C, const NAME* S) {}
+  void PreVisitStmt(CheckerContext &C, const Stmt *S) {}
+  void PostVisitStmt(CheckerContext &C, const Stmt *S) {}
+  
+#define PREVISIT(NAME, FALLBACK) \
+void PreVisit ## NAME(CheckerContext &C, const NAME* S) {\
+  PreVisit ## FALLBACK(C, S);\
+}
 #include "clang/Analysis/PathSensitive/CheckerVisitor.def"
       
-#define POSTVISIT(NAME) \
-void PostVisit ## NAME(CheckerContext &C, const NAME* S) {}
+#define POSTVISIT(NAME, FALLBACK) \
+void PostVisit ## NAME(CheckerContext &C, const NAME* S) {\
+  PostVisit ## FALLBACK(C, S);\
+}
 #include "clang/Analysis/PathSensitive/CheckerVisitor.def"
 };