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.
5 #ifndef POLYMORPHIC_CLASS_WITH_NON_VIRTUAL_TRACE_H_
6 #define POLYMORPHIC_CLASS_WITH_NON_VIRTUAL_TRACE_H_
8 #include "heap/stubs.h"
12 class HeapObject : public GarbageCollected<HeapObject> {
14 void trace(Visitor*) { }
17 class NonPolymorphicBase {
20 class PolymorphicBase {
25 class IsLeftMostPolymorphic
26 : public GarbageCollected<IsLeftMostPolymorphic>,
27 public PolymorphicBase {
31 Member<HeapObject> m_obj;
34 class IsNotLeftMostPolymorphic
35 : public GarbageCollected<IsNotLeftMostPolymorphic>,
36 public NonPolymorphicBase,
37 public PolymorphicBase {
41 Member<HeapObject> m_obj;
45 class TemplatedNonPolymorphicBase
46 : public GarbageCollected<TemplatedNonPolymorphicBase<T> > {
48 void trace(Visitor* visitor) { visitor->trace(m_obj); }
50 Member<HeapObject> m_obj;
53 // Looks OK, but will result in an incorrect object pointer when marking.
54 class TemplatedIsNotLeftMostPolymorphic
55 : public TemplatedNonPolymorphicBase<TemplatedIsNotLeftMostPolymorphic>,
56 public PolymorphicBase {