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