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 STACK_ALLOCATED_H_
6 #define STACK_ALLOCATED_H_
7 
8 #include "heap/stubs.h"
9 
10 namespace blink {
11 
12 class HeapObject;
13 
14 class PartObject {
15     DISALLOW_NEW();
16 private:
17     Member<HeapObject> m_obj; // Needs tracing.
18 };
19 
20 class StackObject {
21     STACK_ALLOCATED();
22 private:
23     Member<HeapObject> m_obj; // Does not need tracing.
24 };
25 
26 class HeapObject : public GarbageCollected<HeapObject> {
27 public:
28     void trace(Visitor*);
29 private:
30     StackObject m_part; // Cannot embed a stack allocated object.
31 };
32 
33 // Cannot derive from both heap- and stack-allocated objects.
34 class DerivedHeapObject : public HeapObject, public StackObject {
35 };
36 
37 // Cannot be stack-allocated and derive from a heap-allocated object.
38 class DerivedHeapObject2 : public HeapObject {
39   STACK_ALLOCATED();
40 };
41 
42 // STACK_ALLOCATED is inherited.
43 class DerivedStackObject : public StackObject {
44 private:
45     StackObject m_anotherPart; // Also fine.
46 };
47 
48 }
49 
50 #endif
51