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 CLASS_REQUIRES_TRACE_METHOD_H_
6#define CLASS_REQUIRES_TRACE_METHOD_H_
7
8#include "heap/stubs.h"
9
10namespace blink {
11
12class HeapObject;
13
14class PartObject {
15    DISALLOW_NEW();
16private:
17    Member<HeapObject> m_obj;
18};
19
20class HeapObject : public GarbageCollected<HeapObject> {
21private:
22    PartObject m_part;
23};
24
25class Mixin : public GarbageCollectedMixin {
26public:
27  virtual void trace(Visitor*) override;
28  Member<Mixin> m_self;
29};
30
31class HeapObjectMixin : public GarbageCollected<HeapObjectMixin>, public Mixin {
32  USING_GARBAGE_COLLECTED_MIXIN(HeapObjectMixin);
33};
34
35class Mixin2 : public Mixin {
36public:
37  virtual void trace(Visitor*) override;
38};
39
40class HeapObjectMixin2
41    : public GarbageCollected<HeapObjectMixin2>, public Mixin2 {
42  USING_GARBAGE_COLLECTED_MIXIN(HeapObjectMixin2);
43};
44
45class Mixin3 : public Mixin {
46public:
47  virtual void trace(Visitor*) override;
48};
49
50class HeapObjectMixin3
51    : public GarbageCollected<HeapObjectMixin3>, public Mixin {
52  USING_GARBAGE_COLLECTED_MIXIN(HeapObjectMixin2);
53public:
54  virtual void trace(Visitor*) override;
55};
56
57}
58
59#endif
60