diff options
Diffstat (limited to 'Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h')
-rw-r--r-- | Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h | 30 |
1 files changed, 6 insertions, 24 deletions
diff --git a/Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h b/Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h index 1366cd8a7..f702e1dd9 100644 --- a/Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h +++ b/Source/JavaScriptCore/heap/CopiedSpaceInlineMethods.h @@ -64,7 +64,7 @@ inline void CopiedSpace::startedCopying() m_toSpace = temp; m_blockFilter.reset(); - m_allocator.startedCopying(); + m_allocator.resetCurrentBlock(); ASSERT(!m_inCopyingPhase); ASSERT(!m_numberOfLoanedBlocks); @@ -94,7 +94,7 @@ inline CopiedBlock* CopiedSpace::allocateBlockForCopyingPhase() m_numberOfLoanedBlocks++; } - ASSERT(block->m_offset == block->payload()); + ASSERT(!block->dataSize()); return block; } @@ -103,45 +103,27 @@ inline void CopiedSpace::allocateBlock() if (m_heap->shouldCollect()) m_heap->collect(Heap::DoNotSweep); + m_allocator.resetCurrentBlock(); + CopiedBlock* block = CopiedBlock::create(m_heap->blockAllocator().allocate()); m_toSpace->push(block); m_blockFilter.add(reinterpret_cast<Bits>(block)); m_blockSet.add(block); - m_allocator.resetCurrentBlock(block); -} - -inline bool CopiedSpace::fitsInBlock(CopiedBlock* block, size_t bytes) -{ - return static_cast<char*>(block->m_offset) + bytes < reinterpret_cast<char*>(block) + block->capacity() && static_cast<char*>(block->m_offset) + bytes > block->m_offset; + m_allocator.setCurrentBlock(block); } inline CheckedBoolean CopiedSpace::tryAllocate(size_t bytes, void** outPtr) { ASSERT(!m_heap->globalData()->isInitializingObject()); - if (isOversize(bytes) || !m_allocator.fitsInCurrentBlock(bytes)) + if (isOversize(bytes) || !m_allocator.tryAllocate(bytes, outPtr)) return tryAllocateSlowCase(bytes, outPtr); - *outPtr = m_allocator.allocate(bytes); ASSERT(*outPtr); return true; } -inline void* CopiedSpace::allocateFromBlock(CopiedBlock* block, size_t bytes) -{ - ASSERT(fitsInBlock(block, bytes)); - ASSERT(is8ByteAligned(block->m_offset)); - - void* ptr = block->m_offset; - ASSERT(block->m_offset >= block->payload() && block->m_offset < reinterpret_cast<char*>(block) + block->capacity()); - block->m_offset = static_cast<void*>((static_cast<char*>(ptr) + bytes)); - ASSERT(block->m_offset >= block->payload() && block->m_offset < reinterpret_cast<char*>(block) + block->capacity()); - - ASSERT(is8ByteAligned(ptr)); - return ptr; -} - inline bool CopiedSpace::isOversize(size_t bytes) { return bytes > s_maxAllocationSize; |