Home | History | Annotate | Download | only in tests
      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_ALLOCATION();
     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 AnotherStackObject : public PartObject { // Invalid base.
     27     STACK_ALLOCATED();
     28 private:
     29     StackObject m_part; // Can embed a stack allocated object.
     30 };
     31 
     32 class HeapObject : public GarbageCollected<HeapObject> {
     33 public:
     34     void trace(Visitor*);
     35 private:
     36     StackObject m_part; // Cannot embed a stack allocated object.
     37 };
     38 
     39 // STACK_ALLOCATED is inherited.
     40 class DerivedStackObject : public StackObject {
     41 private:
     42     AnotherStackObject m_anotherPart; // Also fine.
     43 };
     44 
     45 }
     46 
     47 #endif
     48