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 #include "trace_after_dispatch.h" 6 7 namespace blink { 8 9 static B* toB(A* a) { return static_cast<B*>(a); } 10 11 void A::Trace(Visitor* visitor) 12 { 13 switch (m_type) { 14 case TB: 15 toB(this)->TraceAfterDispatch(visitor); 16 break; 17 case TC: 18 static_cast<C*>(this)->TraceAfterDispatch(visitor); 19 break; 20 case TD: 21 // Missing static_cast<D*>(this)->TraceAfterDispatch(visitor); 22 break; 23 } 24 } 25 26 void A::TraceAfterDispatch(Visitor* visitor) 27 { 28 } 29 30 void B::TraceAfterDispatch(Visitor* visitor) 31 { 32 visitor->Trace(m_a); 33 // Missing A::TraceAfterDispatch(visitor); 34 // Also check that calling Trace does not count. 35 A::Trace(visitor); 36 } 37 38 void C::TraceAfterDispatch(Visitor* visitor) 39 { 40 // Missing visitor->Trace(m_a); 41 A::TraceAfterDispatch(visitor); 42 } 43 44 void D::TraceAfterDispatch(Visitor* visitor) 45 { 46 visitor->Trace(m_a); 47 Abstract::TraceAfterDispatch(visitor); 48 } 49 50 } 51