X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/81345200c95645a1b0d2635520f96ad55dfde63f..ed1e77d3adeb83d26fd1dfb16dd84cabdcefd250:/heap/GCSegmentedArrayInlines.h diff --git a/heap/GCSegmentedArrayInlines.h b/heap/GCSegmentedArrayInlines.h index e2eff4d..88e43cc 100644 --- a/heap/GCSegmentedArrayInlines.h +++ b/heap/GCSegmentedArrayInlines.h @@ -26,18 +26,16 @@ #ifndef GCSegmentedArrayInlines_h #define GCSegmentedArrayInlines_h -#include "BlockAllocator.h" #include "GCSegmentedArray.h" namespace JSC { template -GCSegmentedArray::GCSegmentedArray(BlockAllocator& blockAllocator) - : m_blockAllocator(blockAllocator) - , m_top(0) +GCSegmentedArray::GCSegmentedArray() + : m_top(0) , m_numberOfSegments(0) { - m_segments.push(GCArraySegment::create(m_blockAllocator.allocate>())); + m_segments.push(GCArraySegment::create()); m_numberOfSegments++; } @@ -46,7 +44,7 @@ GCSegmentedArray::~GCSegmentedArray() { ASSERT(m_numberOfSegments == 1); ASSERT(m_segments.size() == 1); - m_blockAllocator.deallocate(GCArraySegment::destroy(m_segments.removeHead())); + GCArraySegment::destroy(m_segments.removeHead()); m_numberOfSegments--; ASSERT(!m_numberOfSegments); ASSERT(!m_segments.size()); @@ -61,7 +59,7 @@ void GCSegmentedArray::clear() for (GCArraySegment* current = m_segments.head(); current->next(); current = next) { next = current->next(); m_segments.remove(current); - m_blockAllocator.deallocate(GCArraySegment::destroy(current)); + GCArraySegment::destroy(current); } m_top = 0; m_numberOfSegments = 1; @@ -75,7 +73,7 @@ void GCSegmentedArray::expand() { ASSERT(m_segments.head()->m_top == s_segmentCapacity); - GCArraySegment* nextSegment = GCArraySegment::create(m_blockAllocator.allocate>()); + GCArraySegment* nextSegment = GCArraySegment::create(); m_numberOfSegments++; #if !ASSERT_DISABLED @@ -93,7 +91,7 @@ bool GCSegmentedArray::refill() validatePrevious(); if (top()) return true; - m_blockAllocator.deallocate(GCArraySegment::destroy(m_segments.removeHead())); + GCArraySegment::destroy(m_segments.removeHead()); ASSERT(m_numberOfSegments > 1); m_numberOfSegments--; setTopForFullSegment(); @@ -127,9 +125,16 @@ void GCSegmentedArray::fillVector(Vector& vector) } template -inline GCArraySegment* GCArraySegment::create(DeadBlock* block) +inline GCArraySegment* GCArraySegment::create() { - return new (NotNull, block) GCArraySegment(block->region()); + return new (NotNull, fastMalloc(blockSize)) GCArraySegment(); +} + +template +inline void GCArraySegment::destroy(GCArraySegment* segment) +{ + segment->~GCArraySegment(); + fastFree(segment); } template