diff options
Diffstat (limited to 'Source/JavaScriptCore/heap/ConservativeRoots.cpp')
-rw-r--r-- | Source/JavaScriptCore/heap/ConservativeRoots.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/Source/JavaScriptCore/heap/ConservativeRoots.cpp b/Source/JavaScriptCore/heap/ConservativeRoots.cpp index 05c668c35..a509f06e1 100644 --- a/Source/JavaScriptCore/heap/ConservativeRoots.cpp +++ b/Source/JavaScriptCore/heap/ConservativeRoots.cpp @@ -26,6 +26,8 @@ #include "config.h" #include "ConservativeRoots.h" +#include "BumpSpace.h" +#include "BumpSpaceInlineMethods.h" #include "CodeBlock.h" #include "DFGCodeBlocks.h" #include "JSCell.h" @@ -34,16 +36,12 @@ namespace JSC { -inline bool isPointerAligned(void* p) -{ - return !((intptr_t)(p) & (sizeof(char*) - 1)); -} - -ConservativeRoots::ConservativeRoots(const MarkedBlockSet* blocks) +ConservativeRoots::ConservativeRoots(const MarkedBlockSet* blocks, BumpSpace* bumpSpace) : m_roots(m_inlineRoots) , m_size(0) , m_capacity(inlineCapacity) , m_blocks(blocks) + , m_bumpSpace(bumpSpace) { } @@ -74,6 +72,10 @@ inline void ConservativeRoots::genericAddPointer(void* p, TinyBloomFilter filter { markHook.mark(p); + BumpBlock* block; + if (m_bumpSpace->contains(p, block)) + m_bumpSpace->pin(block); + MarkedBlock* candidate = MarkedBlock::blockFor(p); if (filter.ruleOut(reinterpret_cast<Bits>(candidate))) { ASSERT(!candidate || !m_blocks->set().contains(candidate)); @@ -110,8 +112,8 @@ void ConservativeRoots::genericAddSpan(void* begin, void* end, MarkHook& markHoo void ConservativeRoots::add(void* begin, void* end) { - DummyMarkHook dummyMarkHook; - genericAddSpan(begin, end, dummyMarkHook); + DummyMarkHook hook; + genericAddSpan(begin, end, hook); } void ConservativeRoots::add(void* begin, void* end, DFGCodeBlocks& dfgCodeBlocks) |