void ExplodedNode::NodeGroup::addNode(ExplodedNode *N, ExplodedGraph &G) { assert((reinterpret_cast<uintptr_t>(N) & Mask) == 0x0); assert(!getFlag()); if (getKind() == Size1) { if (ExplodedNode *NOld = getNode()) { BumpVectorContext &Ctx = G.getNodeAllocator(); BumpVector<ExplodedNode*> *V = G.getAllocator().Allocate<BumpVector<ExplodedNode*> >(); new (V) BumpVector<ExplodedNode*>(Ctx, 4); assert((reinterpret_cast<uintptr_t>(V) & Mask) == 0x0); V->push_back(NOld, Ctx); V->push_back(N, Ctx); P = reinterpret_cast<uintptr_t>(V) | SizeOther; assert(getPtr() == (void*) V); assert(getKind() == SizeOther); } else { P = reinterpret_cast<uintptr_t>(N); assert(getKind() == Size1); } } else { assert(getKind() == SizeOther); getVector(getPtr()).push_back(N, G.getNodeAllocator()); } }
BlockDataRegion::referenced_vars_iterator BlockDataRegion::referenced_vars_end() const { const_cast<BlockDataRegion*>(this)->LazyInitializeReferencedVars(); BumpVector<const MemRegion*> *Vec = static_cast<BumpVector<const MemRegion*>*>(ReferencedVars); return BlockDataRegion::referenced_vars_iterator(Vec == (void*) 0x1 ? NULL : Vec->end()); }
BlockDataRegion::referenced_vars_iterator BlockDataRegion::referenced_vars_begin() const { const_cast<BlockDataRegion*>(this)->LazyInitializeReferencedVars(); BumpVector<const MemRegion*> *Vec = static_cast<BumpVector<const MemRegion*>*>(ReferencedVars); if (Vec == (void*) 0x1) return BlockDataRegion::referenced_vars_iterator(0, 0); BumpVector<const MemRegion*> *VecOriginal = static_cast<BumpVector<const MemRegion*>*>(OriginalVars); return BlockDataRegion::referenced_vars_iterator(Vec->begin(), VecOriginal->begin()); }