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