Index: Source/platform/Supplementable.h |
diff --git a/Source/platform/Supplementable.h b/Source/platform/Supplementable.h |
index 6a26e8cd580724ebbc2f187b0cac7af7237f0e47..a6902422d897a59652d46c266887426a90709393 100644 |
--- a/Source/platform/Supplementable.h |
+++ b/Source/platform/Supplementable.h |
@@ -151,7 +151,7 @@ template<typename T, bool> |
class SupplementableTracing; |
template<typename T> |
-class SupplementableTracing<T, true> : public GarbageCollectedMixin { }; |
+class SupplementableTracing<T, true> { }; |
template<typename T> |
class SupplementableTracing<T, false> { }; |
@@ -195,6 +195,8 @@ public: |
} |
private: |
+ // FIXME: Oilpan: Remove this ignore once PersistentHeapSupplementable is removed again. |
+ GC_PLUGIN_IGNORE("") |
typename SupplementableTraits<T, isGarbageCollected>::SupplementMap m_supplements; |
#if !ASSERT_DISABLED |
@@ -209,8 +211,25 @@ private: |
template<typename T> |
class HeapSupplement : public SupplementBase<T, true> { }; |
+// FIXME: Oilpan: Move GarbageCollectedMixin to SupplementableBase<T, true> once PersistentHeapSupplementable is removed again. |
template<typename T> |
-class HeapSupplementable : public SupplementableBase<T, true> { }; |
+class HeapSupplementable : public SupplementableBase<T, true>, public GarbageCollectedMixin { }; |
+ |
+template<typename T> |
+class GC_PLUGIN_IGNORE("") PersistentHeapSupplementable : public SupplementableBase<T, true> { |
+public: |
+ PersistentHeapSupplementable() : m_root(this) { } |
+private: |
+ class TraceDelegate : GarbageCollected<TraceDelegate> { |
+ public: |
+ TraceDelegate(PersistentHeapSupplementable* owner) : m_owner(owner) { } |
+ void trace(Visitor* visitor) { m_owner->trace(visitor); } |
+ private: |
+ PersistentHeapSupplementable* m_owner; |
+ }; |
+ |
+ TraceDelegate m_root; |
Mads Ager (chromium)
2014/06/10 11:50:26
Don't you need a Persistent here somewhere? This p
zerny-chromium
2014/06/10 11:52:04
Yes, I forgot the Persistent. In the process of ad
|
+}; |
template<typename T> |
class Supplement : public SupplementBase<T, false> { }; |