Index: third_party/WebKit/Source/platform/heap/TraceTraits.h |
diff --git a/third_party/WebKit/Source/platform/heap/TraceTraits.h b/third_party/WebKit/Source/platform/heap/TraceTraits.h |
index 3009ac4393bece664377c927fa203615087771cf..5bae4425f4752d695cf3d0e2f8f3d91ccd1325b1 100644 |
--- a/third_party/WebKit/Source/platform/heap/TraceTraits.h |
+++ b/third_party/WebKit/Source/platform/heap/TraceTraits.h |
@@ -39,10 +39,15 @@ class AdjustAndMarkTrait<T, false> { |
public: |
static void markWrapper(const WrapperVisitor* visitor, const T* t) |
{ |
- if (visitor->markWrapperHeader(t)) { |
+ if (visitor->markWrapperHeader(heapObjectHeader(t))) { |
+ visitor->markWrappersInAllWorlds(t); |
visitor->dispatchTraceWrappers(t); |
} |
} |
+ static HeapObjectHeader* heapObjectHeader(const T* t) |
+ { |
+ return HeapObjectHeader::fromPayload(t); |
+ } |
template<typename VisitorDispatcher> |
static void mark(VisitorDispatcher visitor, const T* t) |
@@ -85,6 +90,10 @@ public: |
{ |
t->adjustAndMarkWrapper(visitor); |
} |
+ static HeapObjectHeader* heapObjectHeader(const T* t) |
+ { |
+ return t->adjustAndGetHeapObjectHeader(); |
+ } |
template<typename VisitorDispatcher> |
static void mark(VisitorDispatcher visitor, const T* self) |
@@ -170,9 +179,13 @@ public: |
static void trace(Visitor*, void* self); |
static void trace(InlinedGlobalMarkingVisitor, void* self); |
- static void markWrapper(const WrapperVisitor* visitor, const T* t) |
+ static void markWrapper(const WrapperVisitor* visitor, const void* t) |
+ { |
+ AdjustAndMarkTrait<T>::markWrapper(visitor, reinterpret_cast<const T*>(t)); |
+ } |
+ static HeapObjectHeader* heapObjectHeader(const void* t) |
{ |
- AdjustAndMarkTrait<T>::markWrapper(visitor, t); |
+ return AdjustAndMarkTrait<T>::heapObjectHeader(reinterpret_cast<const T*>(t)); |
} |
template<typename VisitorDispatcher> |