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 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 static_cast<D*>(this)->traceAfterDispatch(visitor); 22 break; 23 } 24 } 25 26 void A::traceAfterDispatch(Visitor* visitor) 27 { 28 } 29 30 void 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 45 void B::traceAfterDispatch(Visitor* visitor) 46 { 47 visitor->trace(m_a); 48 A::traceAfterDispatch(visitor); 49 } 50 51 void C::traceAfterDispatch(Visitor* visitor) 52 { 53 visitor->trace(m_a); 54 A::traceAfterDispatch(visitor); 55 } 56 57 void D::traceAfterDispatch(Visitor* visitor) 58 { 59 visitor->trace(m_a); 60 Abstract::traceAfterDispatch(visitor); 61 } 62 63 } 64