polymorphic_class_with_non_virtual_trace.h revision 6e8cce623b6e4fe0c9e4af605d675dd9d0338c38
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 POLYMORPHIC_CLASS_WITH_NON_VIRTUAL_TRACE_H_ 6#define POLYMORPHIC_CLASS_WITH_NON_VIRTUAL_TRACE_H_ 7 8#include "heap/stubs.h" 9 10namespace blink { 11 12class HeapObject : public GarbageCollected<HeapObject> { 13public: 14 void trace(Visitor*) { } 15}; 16 17class NonPolymorphicBase { 18}; 19 20class PolymorphicBase { 21public: 22 virtual void foo(); 23}; 24 25class IsLeftMostPolymorphic 26 : public GarbageCollected<IsLeftMostPolymorphic>, 27 public PolymorphicBase { 28public: 29 void trace(Visitor*); 30private: 31 Member<HeapObject> m_obj; 32}; 33 34class IsNotLeftMostPolymorphic 35 : public GarbageCollected<IsNotLeftMostPolymorphic>, 36 public NonPolymorphicBase, 37 public PolymorphicBase { 38public: 39 void trace(Visitor*); 40private: 41 Member<HeapObject> m_obj; 42}; 43 44} 45 46#endif 47