123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "finalize_after_dispatch.h"
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace blink {
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)static B* toB(A* a) { return static_cast<B*>(a); }
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void A::trace(Visitor* visitor)
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    switch (m_type) {
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TB:
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        toB(this)->traceAfterDispatch(visitor);
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        break;
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TC:
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        static_cast<C*>(this)->traceAfterDispatch(visitor);
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        break;
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TD:
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        static_cast<D*>(this)->traceAfterDispatch(visitor);
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        break;
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    }
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void A::traceAfterDispatch(Visitor* visitor)
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void A::finalizeGarbageCollectedObject()
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    switch (m_type) {
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TB:
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        toB(this)->~B();
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        break;
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TC:
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        static_cast<C*>(this)->~C();
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        break;
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    case TD:
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        // Missing static_cast<D*>(this)->~D();
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)        break;
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    }
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void B::traceAfterDispatch(Visitor* visitor)
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    visitor->trace(m_a);
48cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    A::traceAfterDispatch(visitor);
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void C::traceAfterDispatch(Visitor* visitor)
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    visitor->trace(m_a);
54cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    A::traceAfterDispatch(visitor);
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)void D::traceAfterDispatch(Visitor* visitor)
5823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles){
5923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    visitor->trace(m_a);
60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    Abstract::traceAfterDispatch(visitor);
6123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
6223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
6323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}
64