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())
+ if (St == Pred->getState()) {
+ Dst.Add(Pred);
return NULL;
+ }
NodeTy* N = Builder->generateNode(S, St, Pred);
Dst.Add(N);
if (AI != AE) {
- NodeSet DstTmp;
-
- Visit(*AI, Pred, DstTmp);
-
- if (DstTmp.empty()) DstTmp.Add(Pred);
+ NodeSet DstTmp;
+ Visit(*AI, Pred, DstTmp);
Expr* CurrentArg = *AI;
++AI;
typedef GRSwitchNodeBuilder<GRExprEngine> SwitchNodeBuilder;
class NodeSet {
- typedef llvm::SmallVector<NodeTy*,3> ImplTy;
+ typedef llvm::SmallPtrSet<NodeTy*,10> ImplTy;
ImplTy Impl;
public:
- NodeSet(NodeTy* N) { assert (N && !N->isSink()); Impl.push_back(N); }
+ NodeSet(NodeTy* N) { assert (N && !N->isSink()); Impl.insert(N); }
NodeSet() {}
- inline void Add(NodeTy* N) { if (N && !N->isSink()) Impl.push_back(N); }
+ inline void Add(NodeTy* N) { if (N && !N->isSink()) Impl.insert(N); }
typedef ImplTy::iterator iterator;
typedef ImplTy::const_iterator const_iterator;