| 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>
|
|
|