1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef TRACE_TEMPLATED_SUPER_H_ 6 #define TRACE_TEMPLATED_SUPER_H_ 7 8 #include "heap/stubs.h" 9 10 namespace blink { 11 12 class HeapObject; 13 14 class Mixin : public GarbageCollectedMixin { 15 public: Trace(Visitor *)16 virtual void Trace(Visitor*) override { } 17 }; 18 19 template<typename T> 20 class Super : public GarbageCollected<Super<T> >, public Mixin { 21 USING_GARBAGE_COLLECTED_MIXIN(Super); 22 public: 23 virtual void Trace(Visitor*) override; 24 void clearWeakMembers(Visitor*); 25 private: 26 Member<HeapObject> m_obj; 27 WeakMember<HeapObject> m_weak; 28 }; 29 30 template<typename T> 31 class Sub : public Super<T> { 32 public: 33 virtual void Trace(Visitor* visitor) override; 34 private: 35 Member<HeapObject> m_obj; 36 }; 37 38 class HeapObject : public Sub<HeapObject> { 39 public: 40 virtual void Trace(Visitor*) override; 41 private: 42 Member<HeapObject> m_obj; 43 }; 44 45 } 46 47 #endif 48