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 CYCLE_SUPER_NEG_H_ 6 #define CYCLE_SUPER_NEG_H_ 7 8 #include "heap/stubs.h" 9 10 namespace blink { 11 12 class C; 13 14 // The chain: 15 // C -per-> B -sup-> A -sub-> D -ref-> C 16 // is not a leaking cycle, because the super-class relationship 17 // should not transitively imply sub-class relationships. 18 // I.e. B -/-> D 19 20 class A : public GarbageCollectedFinalized<A> { 21 public: 22 virtual void Trace(Visitor*) {} 23 }; 24 25 class B : public A { 26 public: 27 virtual void Trace(Visitor*); 28 }; 29 30 class C : public RefCounted<C> { 31 private: 32 Persistent<B> m_b; 33 }; 34 35 class D : public A { 36 public: 37 virtual void Trace(Visitor*); 38 private: 39 RefPtr<C> m_c; 40 }; 41 42 } 43 44 #endif 45