Lines Matching defs:ExplodedNode

10 //  This file defines the template classes ExplodedNode and ExplodedGraph,
51 // ExplodedNode is not constified all over the engine because we need to add
54 class ExplodedNode : public llvm::FoldingSetNode {
69 /// store a flag rather than a node list, which ExplodedNode uses to mark
84 ExplodedNode * const *begin() const;
86 ExplodedNode * const *end() const;
95 void addNode(ExplodedNode *N, ExplodedGraph &G);
102 void replaceNode(ExplodedNode *node);
125 explicit ExplodedNode(const ProgramPoint &loc, ProgramStateRef state,
131 ~ExplodedNode() {}
178 void addPredecessor(ExplodedNode *V, ExplodedGraph &G);
191 ExplodedNode *getFirstPred() {
195 const ExplodedNode *getFirstPred() const {
196 return const_cast<ExplodedNode*>(this)->getFirstPred();
199 const ExplodedNode *getFirstSucc() const {
204 typedef ExplodedNode* const * succ_iterator;
205 typedef const ExplodedNode* const * const_succ_iterator;
206 typedef ExplodedNode* const * pred_iterator;
207 typedef const ExplodedNode* const * const_pred_iterator;
213 return const_cast<ExplodedNode*>(this)->pred_begin();
216 return const_cast<ExplodedNode*>(this)->pred_end();
223 return const_cast<ExplodedNode*>(this)->succ_begin();
226 return const_cast<ExplodedNode*>(this)->succ_end();
236 virtual void AddEdge(ExplodedNode *Src, ExplodedNode *Dst) = 0;
242 void replaceSuccessor(ExplodedNode *node) { Succs.replaceNode(node); }
243 void replacePredecessor(ExplodedNode *node) { Preds.replaceNode(node); }
246 typedef llvm::DenseMap<const ExplodedNode *, const ExplodedNode *>
254 typedef std::vector<ExplodedNode *> NodeVector;
267 llvm::FoldingSet<ExplodedNode> Nodes;
296 ExplodedNode *getNode(const ProgramPoint &L, ProgramStateRef State,
305 ExplodedNode *addRoot(ExplodedNode *V) {
311 ExplodedNode *addEndOfPath(ExplodedNode *V) {
327 typedef ExplodedNode NodeTy;
328 typedef llvm::FoldingSet<ExplodedNode> AllNodesTy;
363 typedef llvm::DenseMap<const ExplodedNode*, ExplodedNode*> NodeMap;
394 bool shouldCollect(const ExplodedNode *node);
395 void collectNode(ExplodedNode *node);
399 typedef llvm::SmallPtrSet<ExplodedNode*,5> ImplTy;
403 ExplodedNodeSet(ExplodedNode *N) {
404 assert (N && !static_cast<ExplodedNode*>(N)->isSink());
410 inline void Add(ExplodedNode *N) {
411 if (N && !static_cast<ExplodedNode*>(N)->isSink()) Impl.insert(N);
419 bool erase(ExplodedNode *N) { return Impl.erase(N); }
444 template<> struct GraphTraits<clang::ento::ExplodedNode*> {
445 typedef clang::ento::ExplodedNode NodeType;
470 template<> struct GraphTraits<const clang::ento::ExplodedNode*> {
471 typedef const clang::ento::ExplodedNode NodeType;