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 7namespace blink { 8 9static B* toB(A* a) { return static_cast<B*>(a); } 10 11void 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 26void A::traceAfterDispatch(Visitor* visitor) 27{ 28} 29 30void 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 38void C::traceAfterDispatch(Visitor* visitor) 39{ 40 // Missing visitor->trace(m_a); 41 A::traceAfterDispatch(visitor); 42} 43 44void D::traceAfterDispatch(Visitor* visitor) 45{ 46 visitor->trace(m_a); 47 Abstract::traceAfterDispatch(visitor); 48} 49 50} 51