• 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 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 
23     // Redundant trace() method, warning/error expected.
Trace(Visitor * visitor)24     void Trace(Visitor* visitor) { visitor->Trace(m_obj); }
25 
26 private:
27     Member<HeapObject> m_obj; // Does not need tracing.
28 };
29 
30 class HeapObject : public GarbageCollected<HeapObject> {
31 public:
32     void Trace(Visitor*);
33 private:
34     StackObject m_part; // Cannot embed a stack allocated object.
35 };
36 
37 // Cannot derive from both heap- and stack-allocated objects.
38 class DerivedHeapObject : public HeapObject, public StackObject {
39 };
40 
41 // Cannot be stack-allocated and derive from a heap-allocated object.
42 class DerivedHeapObject2 : public HeapObject {
43   STACK_ALLOCATED();
44 };
45 
46 // STACK_ALLOCATED is inherited.
47 class DerivedStackObject : public StackObject {
48 private:
49     StackObject m_anotherPart; // Also fine.
50 };
51 
52 }
53 
54 #endif
55