• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef TRACE_AFTER_DISPATCH_H_
6 #define TRACE_AFTER_DISPATCH_H_
7 
8 #include "heap/stubs.h"
9 
10 namespace blink {
11 
12 class A : public GarbageCollected<A> {
13 public:
14     void Trace(Visitor*);
15     void TraceAfterDispatch(Visitor*);
16 protected:
17     enum Type { TB, TC, TD };
A(Type type)18     A(Type type) : m_type(type) { }
19 private:
20     Type m_type;
21 };
22 
23 class B : public A {
24 public:
B()25     B() : A(TB) { }
26     void TraceAfterDispatch(Visitor*);
27 private:
28     Member<A> m_a;
29 };
30 
31 class C : public A {
32 public:
C()33     C() : A(TC) { }
34     void TraceAfterDispatch(Visitor*);
35 private:
36     Member<A> m_a;
37 };
38 
39 // This class is considered abstract does not need to be dispatched to.
40 class Abstract : public A {
41 protected:
Abstract(Type type)42     Abstract(Type type) : A(type) { }
43 };
44 
45 class D : public Abstract {
46 public:
D()47     D() : Abstract(TD) { }
48     void TraceAfterDispatch(Visitor*);
49 private:
50     Member<A> m_a;
51 };
52 
53 }
54 
55 #endif
56