]> granicus.if.org Git - clang/commitdiff
Moved implementation of GRExprEngine::Nodify into GRStmtNodeBuilder. This will
authorTed Kremenek <kremenek@apple.com>
Tue, 4 Mar 2008 23:39:43 +0000 (23:39 +0000)
committerTed Kremenek <kremenek@apple.com>
Tue, 4 Mar 2008 23:39:43 +0000 (23:39 +0000)
allow us to pass the builder to plug-in transfer functions and allow those
functions to create intermediate nodes.

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

Analysis/GRExprEngine.cpp
include/clang/Analysis/PathSensitive/GRCoreEngine.h
include/clang/Analysis/PathSensitive/GRExprEngine.h

index a011e7b36024cf541fc0a734fcc6085416cf8c44..61d10a4ecca1f4fbf65fc16f89828b67ae8ffe7b 100644 (file)
@@ -433,30 +433,6 @@ void GRExprEngine::ProcessStmt(Stmt* S, StmtNodeBuilder& builder) {
   Builder = NULL;
 }
 
-GRExprEngine::NodeTy*
-GRExprEngine::Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred, ValueState* St) {
-  // If the state hasn't changed, don't generate a new node.
-  if (St == Pred->getState()) {
-    Dst.Add(Pred);
-    return NULL;
-  }
-  
-  NodeTy* N = Builder->generateNode(S, St, Pred);
-  Dst.Add(N);
-  
-  return N;
-}
-
-#if 0
-void GRExprEngine::Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred,
-                         const ValueState::BufferTy& SB) {
-  
-  for (ValueState::BufferTy::const_iterator I=SB.begin(), E=SB.end(); I!=E; ++I)
-    Nodify(Dst, S, Pred, *I);
-}
-#endif
-
 void GRExprEngine::VisitDeclRefExpr(DeclRefExpr* D, NodeTy* Pred, NodeSet& Dst){
 
   if (D != CurrentStmt) {
index 93f30c2027f4122cf558bbc2c726c5bcab785bc6..b8541309a1953dddcc39efd3d30bad1a6c1259ed 100644 (file)
@@ -184,7 +184,22 @@ public:
   NodeTy* generateNode(Stmt* S, StateTy State) {
     void *state = GRTrait<StateTy>::toPtr(State);
     return static_cast<NodeTy*>(NB.generateNodeImpl(S, state));    
-  }  
+  }
+  
+  NodeTy* Nodify(ExplodedNodeSet<NodeTy> Dst, Stmt* S,
+                 NodeTy* Pred, StateTy St) {
+    
+    // If the state hasn't changed, don't generate a new node.
+    if (St == Pred->getState()) {
+      Dst.Add(Pred);
+      return NULL;
+    }
+    
+    NodeTy* N = generateNode(S, St, Pred);
+    Dst.Add(N);
+    return N;
+  }
+  
 };
   
 class GRBranchNodeBuilderImpl {
index a8827472dfae016f364355e971d3aa83b6ebe038..2937dd612999013f60656f1db31b42941b31c16a 100644 (file)
@@ -320,7 +320,10 @@ protected:
   ValueState* AssumeSymInt(ValueState* St, bool Assumption,
                            const SymIntConstraint& C, bool& isFeasible);
   
-  NodeTy* Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred, ValueState* St);
+  NodeTy* Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred, ValueState* St) {
+    assert (Builder && "GRStmtNodeBuilder not present.");
+    return Builder->Nodify(Dst, S, Pred, St);
+  }
   
 #if 0
   /// Nodify - This version of Nodify is used to batch process a set of states.