CFGBlock& B;
const unsigned Idx;
ExplodedNode* Pred;
- ExplodedNode* LastNode;
GRStateManager& Mgr;
GRAuditor* Auditor;
ExplodedNode* getBasePredecessor() const { return Pred; }
- ExplodedNode* getLastNode() const {
- return LastNode ? (LastNode->isSink() ? NULL : LastNode) : NULL;
- }
-
// FIXME: This should not be exposed.
GRWorkList *getWorkList() { return Eng.WList; }
GRStmtNodeBuilder::GRStmtNodeBuilder(CFGBlock* b, unsigned idx,
ExplodedNode* N, GRCoreEngine* e,
GRStateManager &mgr)
- : Eng(*e), B(*b), Idx(idx), Pred(N), LastNode(N), Mgr(mgr), Auditor(0),
+ : Eng(*e), B(*b), Idx(idx), Pred(N), Mgr(mgr), Auditor(0),
PurgingDeadSymbols(false), BuildSinks(false), HasGeneratedNode(false),
PointKind(ProgramPoint::PostStmtKind), Tag(0) {
Deferred.insert(N);
- CleanedState = getLastNode()->getState();
+ CleanedState = Pred->getState();
}
GRStmtNodeBuilder::~GRStmtNodeBuilder() {
if (IsNew) {
Deferred.insert(N);
- LastNode = N;
return N;
}
- LastNode = NULL;
return NULL;
}
"Error evaluating statement");
Builder = &builder;
- EntryNode = builder.getLastNode();
+ EntryNode = builder.getBasePredecessor();
// Set up our simple checks.
if (BatchAuditor)