]> granicus.if.org Git - clang/commitdiff
Pull logic for visiting value bindings in InvalidateRegionsWorker into a separate...
authorTed Kremenek <kremenek@apple.com>
Sat, 13 Feb 2010 00:54:03 +0000 (00:54 +0000)
committerTed Kremenek <kremenek@apple.com>
Sat, 13 Feb 2010 00:54:03 +0000 (00:54 +0000)
No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@96060 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Checker/RegionStore.cpp

index 4a8d9a0b0a9ff423e3ce9a632bced2aa6c8eff39..ed1737cddb0ba81f900e7c3fc647bcffba75c5f7 100644 (file)
@@ -473,19 +473,27 @@ class InvalidateRegionsWorker {
 
   BumpVectorContext BVC;
   ClusterMap ClusterM;
-  WorkList WL;  
+  WorkList WL;
+  
+  StoreManager::InvalidatedSymbols *IS;
+  ASTContext &Ctx;
+  ValueManager &ValMgr;
+  
 public:
+  InvalidateRegionsWorker(StoreManager::InvalidatedSymbols *is,
+                          ASTContext &ctx, ValueManager &valMgr)
+    : IS(is), Ctx(ctx), ValMgr(valMgr) {}
+  
   Store InvalidateRegions(RegionStoreManager &RM, Store store,
                           const MemRegion * const *I,const MemRegion * const *E,
-                          const Expr *Ex, unsigned Count,
-                          StoreManager::InvalidatedSymbols *IS,
-                          ASTContext &Ctx, ValueManager &ValMgr);
+                          const Expr *Ex, unsigned Count);
   
 private:
   void AddToWorkList(BindingKey K);
   void AddToWorkList(const MemRegion *R);
   void AddToCluster(BindingKey K);
   RegionCluster **getCluster(const MemRegion *R);
+  void VisitBinding(SVal V);
 };  
 }
 
@@ -520,14 +528,22 @@ InvalidateRegionsWorker::getCluster(const MemRegion *R) {
   return &CRef;
 }
 
+void InvalidateRegionsWorker::VisitBinding(SVal V) {
+  if (const MemRegion *R = V.getAsRegion())
+    AddToWorkList(R);
+  
+  // A symbol?  Mark it touched by the invalidation.
+  if (IS)
+    if (SymbolRef Sym = V.getAsSymbol())
+      IS->insert(Sym);
+}
+  
 Store InvalidateRegionsWorker::InvalidateRegions(RegionStoreManager &RM,
                                                  Store store,
                                                  const MemRegion * const *I,
                                                  const MemRegion * const *E,
-                                                 const Expr *Ex, unsigned Count,
-                                           StoreManager::InvalidatedSymbols *IS,
-                                                 ASTContext &Ctx,
-                                                 ValueManager &ValMgr) {
+                                                 const Expr *Ex, unsigned Count)
+{
   RegionBindings B = RegionStoreManager::GetRegionBindings(store);
 
   // Scan the entire store and make the region clusters.
@@ -554,15 +570,8 @@ Store InvalidateRegionsWorker::InvalidateRegions(RegionStoreManager &RM,
       BindingKey K = *I;
       
       // Get the old binding.  Is it a region?  If so, add it to the worklist.
-      if (const SVal *V = RM.Lookup(B, K)) {
-        if (const MemRegion *R = V->getAsRegion())
-          AddToWorkList(R);
-    
-        // A symbol?  Mark it touched by the invalidation.
-        if (IS)
-          if (SymbolRef Sym = V->getAsSymbol())
-            IS->insert(Sym);
-      }
+      if (const SVal *V = RM.Lookup(B, K))
+        VisitBinding(*V);
 
       B = RM.Remove(B, K);
     }
@@ -643,9 +652,8 @@ Store RegionStoreManager::InvalidateRegions(Store store,
                                             const MemRegion * const *E,
                                             const Expr *Ex, unsigned Count,
                                             InvalidatedSymbols *IS) {
-  InvalidateRegionsWorker W;
-  return W.InvalidateRegions(*this, store, I, E, Ex, Count, IS, getContext(),
-                             StateMgr.getValueManager());
+  InvalidateRegionsWorker W(IS, getContext(), StateMgr.getValueManager());
+  return W.InvalidateRegions(*this, store, I, E, Ex, Count);
 }
   
 //===----------------------------------------------------------------------===//