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