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
10namespace blink {
11
12class HeapObject;
13
14class PartObject {
15    DISALLOW_ALLOCATION();
16private:
17    Member<HeapObject> m_obj; // Needs tracing.
18};
19
20class StackObject {
21    STACK_ALLOCATED();
22private:
23    Member<HeapObject> m_obj; // Does not need tracing.
24};
25
26class AnotherStackObject : public PartObject { // Invalid base.
27    STACK_ALLOCATED();
28private:
29    StackObject m_part; // Can embed a stack allocated object.
30};
31
32class HeapObject : public GarbageCollected<HeapObject> {
33public:
34    void trace(Visitor*);
35private:
36    StackObject m_part; // Cannot embed a stack allocated object.
37};
38
39// STACK_ALLOCATED is inherited.
40class DerivedStackObject : public StackObject {
41private:
42    AnotherStackObject m_anotherPart; // Also fine.
43};
44
45}
46
47#endif
48