]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - heap/WeakSetInlines.h
JavaScriptCore-7600.1.4.9.tar.gz
[apple/javascriptcore.git] / heap / WeakSetInlines.h
index 0515904fc63efc06d0581646a58bf670fa1e2101..f23922493315b41ae038b3cfce95c42e72356e40 100644 (file)
 #ifndef WeakSetInlines_h
 #define WeakSetInlines_h
 
-#include "WeakSet.h"
+#include "MarkedBlock.h"
 
 namespace JSC {
 
 inline WeakImpl* WeakSet::allocate(JSValue jsValue, WeakHandleOwner* weakHandleOwner, void* context)
 {
-    WeakSet& weakSet = *Heap::heap(jsValue.asCell())->weakSet();
+    WeakSet& weakSet = MarkedBlock::blockFor(jsValue.asCell())->weakSet();
     WeakBlock::FreeCell* allocator = weakSet.m_allocator;
     if (UNLIKELY(!allocator))
         allocator = weakSet.findAllocator();
@@ -42,6 +42,16 @@ inline WeakImpl* WeakSet::allocate(JSValue jsValue, WeakHandleOwner* weakHandleO
     return new (NotNull, weakImpl) WeakImpl(jsValue, weakHandleOwner, context);
 }
 
+inline void WeakBlock::finalize(WeakImpl* weakImpl)
+{
+    ASSERT(weakImpl->state() == WeakImpl::Dead);
+    weakImpl->setState(WeakImpl::Finalized);
+    WeakHandleOwner* weakHandleOwner = weakImpl->weakHandleOwner();
+    if (!weakHandleOwner)
+        return;
+    weakHandleOwner->finalize(Handle<Unknown>::wrapSlot(&const_cast<JSValue&>(weakImpl->jsValue())), weakImpl->context());
+}
+
 } // namespace JSC
 
 #endif // WeakSetInlines_h