]> granicus.if.org Git - clang/commitdiff
More refactoring: decl and expr regisitration now uses CFGRecStmtDeclVisitor.
authorTed Kremenek <kremenek@apple.com>
Wed, 19 Sep 2007 18:00:03 +0000 (18:00 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 19 Sep 2007 18:00:03 +0000 (18:00 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42145 91177308-0d34-0410-b5e6-96231b3b80d8

Analysis/UninitializedValues.cpp
include/clang/Analysis/UninitializedValues.h

index afd77e31d6fa2b83a686899051acd58bafcf697d..ec209cd6700e2f62f3890febbcdedd137931e022 100644 (file)
@@ -12,7 +12,7 @@
 //===----------------------------------------------------------------------===//
 
 #include "clang/Analysis/UninitializedValues.h"
-#include "clang/Analysis/CFGStmtVisitor.h"
+#include "clang/Analysis/CFGRecStmtDeclVisitor.h"
 #include "clang/Analysis/LocalCheckers.h"
 #include "clang/Basic/Diagnostic.h"
 #include "clang/AST/ASTContext.h"
@@ -28,39 +28,24 @@ using namespace clang;
 
 namespace {
 
-class RegisterDeclsAndExprs : public CFGStmtVisitor<RegisterDeclsAndExprs> {
+class RegisterDeclsExprs : public CFGRecStmtDeclVisitor<RegisterDeclsExprs> {  
   UninitializedValues::AnalysisDataTy& AD;
 public:
-  RegisterDeclsAndExprs(UninitializedValues::AnalysisDataTy& ad) :  AD(ad) {}
+  RegisterDeclsExprs(UninitializedValues::AnalysisDataTy& ad) :  AD(ad) {}
   
   void VisitBlockVarDecl(BlockVarDecl* VD) {
-    if (AD.VMap.find(VD) == AD.VMap.end())
-      AD.VMap[VD] = AD.NumDecls++;
-  }
-      
-  void VisitDeclChain(ScopedDecl* D) {
-    for (; D != NULL; D = D->getNextDeclarator())
-      if (BlockVarDecl* VD = dyn_cast<BlockVarDecl>(D))
-        VisitBlockVarDecl(VD);
+    if (!AD.isTracked(VD)) AD[VD] = AD.NumDecls++;
   }
   
-  void BlockStmt_VisitExpr(Expr* E) {
-    if (AD.EMap.find(E) == AD.EMap.end())
-      AD.EMap[E] = AD.NumBlockExprs++;
-      
-    Visit(E);
+  void BlockStmt_VisitExpr(Expr* E) { 
+    if (!AD.isTracked(E)) AD[E] = AD.NumBlockExprs++;
   }
-  
-  void VisitDeclRefExpr(DeclRefExpr* DR) { VisitDeclChain(DR->getDecl()); }
-  void VisitDeclStmt(DeclStmt* S) { VisitDeclChain(S->getDecl()); }
-  void VisitStmt(Stmt* S) { VisitChildren(S); }
-  void operator()(Stmt* S) { BlockStmt_Visit(S); }
 };
   
 } // end anonymous namespace
 
 void UninitializedValues::InitializeValues(const CFG& cfg) {
-  RegisterDeclsAndExprs R(this->getAnalysisData());
+  RegisterDeclsExprs R(this->getAnalysisData());
   cfg.VisitBlockStmts(R);
 }
 
index 21e1ebd4476bcec60e9b4bc6bf856c1bfc35065b..8cfa29efc0323ce1d5b9372bc1e18ee04c0f1896 100644 (file)
@@ -54,6 +54,9 @@ public:
     bool isTracked(const Expr* E) {
       return EMap.find(E) != EMap.end();
     }
+    
+    unsigned& operator[](const BlockVarDecl *VD) { return VMap[VD]; }
+    unsigned& operator[](const Expr* E) { return EMap[E]; }
   };
 
   //===--------------------------------------------------------------------===//