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_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.
     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