~GRStmtNodeBuilderImpl();
- const ExplodedGraphImpl& getGraph() const { return *Eng.G; }
-
inline ExplodedNodeImpl* getLastNode() {
return LastNode ? (LastNode->isSink() ? NULL : LastNode) : NULL;
}
CFGBlock* getBlock() const { return &B; }
};
-template<typename CHECKER>
+template<typename STATE>
class GRStmtNodeBuilder {
- typedef CHECKER CheckerTy;
- typedef typename CheckerTy::StateTy StateTy;
- typedef ExplodedGraph<CheckerTy> GraphTy;
- typedef typename GraphTy::NodeTy NodeTy;
+ typedef STATE StateTy;
+ typedef ExplodedNode<StateTy> NodeTy;
GRStmtNodeBuilderImpl& NB;
public:
GRStmtNodeBuilder(GRStmtNodeBuilderImpl& nb) : NB(nb) {}
-
- const GraphTy& getGraph() const {
- return static_cast<const GraphTy&>(NB.getGraph());
- }
-
+
NodeTy* getLastNode() const {
return static_cast<NodeTy*>(NB.getLastNode());
}
}
virtual void ProcessStmt(Stmt* S, GRStmtNodeBuilderImpl& BuilderImpl) {
- GRStmtNodeBuilder<CHECKER> Builder(BuilderImpl);
+ GRStmtNodeBuilder<StateTy> Builder(BuilderImpl);
Checker->ProcessStmt(S, Builder);
}
typedef GraphTy::NodeTy NodeTy;
// Builders.
- typedef GRStmtNodeBuilder<GRExprEngine> StmtNodeBuilder;
+ typedef GRStmtNodeBuilder<StateTy> StmtNodeBuilder;
typedef GRBranchNodeBuilder<GRExprEngine> BranchNodeBuilder;
typedef GRIndirectGotoNodeBuilder<GRExprEngine> IndirectGotoNodeBuilder;
typedef GRSwitchNodeBuilder<GRExprEngine> SwitchNodeBuilder;
return Builder->Nodify(Dst, S, Pred, St);
}
-#if 0
- /// Nodify - This version of Nodify is used to batch process a set of states.
- /// The states are not guaranteed to be unique.
- void Nodify(NodeSet& Dst, Stmt* S, NodeTy* Pred,
- const ValueState*::BufferTy& SB);
-#endif
-
/// HandleUndefinedStore - Create the necessary sink node to represent
/// a store to an "undefined" LVal.
void HandleUndefinedStore(Stmt* S, NodeTy* Pred);