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 "finalize_after_dispatch.h" 6 7 namespace blink { 8 toB(A * a)9static B* toB(A* a) { return static_cast<B*>(a); } 10 Trace(Visitor * visitor)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 static_cast<D*>(this)->TraceAfterDispatch(visitor); 22 break; 23 } 24 } 25 TraceAfterDispatch(Visitor * visitor)26void A::TraceAfterDispatch(Visitor* visitor) 27 { 28 } 29 FinalizeGarbageCollectedObject()30void A::FinalizeGarbageCollectedObject() 31 { 32 switch (m_type) { 33 case TB: 34 toB(this)->~B(); 35 break; 36 case TC: 37 static_cast<C*>(this)->~C(); 38 break; 39 case TD: 40 // Missing static_cast<D*>(this)->~D(); 41 break; 42 } 43 } 44 TraceAfterDispatch(Visitor * visitor)45void B::TraceAfterDispatch(Visitor* visitor) 46 { 47 visitor->Trace(m_a); 48 A::TraceAfterDispatch(visitor); 49 } 50 TraceAfterDispatch(Visitor * visitor)51void C::TraceAfterDispatch(Visitor* visitor) 52 { 53 visitor->Trace(m_a); 54 A::TraceAfterDispatch(visitor); 55 } 56 TraceAfterDispatch(Visitor * visitor)57void D::TraceAfterDispatch(Visitor* visitor) 58 { 59 visitor->Trace(m_a); 60 Abstract::TraceAfterDispatch(visitor); 61 } 62 63 } 64