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 TRACEIMPL_H_
6 #define TRACEIMPL_H_
7 
8 #include "heap/stubs.h"
9 
10 namespace blink {
11 
12 class X : public GarbageCollected<X> {
13  public:
Trace(Visitor *)14   virtual void Trace(Visitor*) {}
15 };
16 
17 class TraceImplInlined : public GarbageCollected<TraceImplInlined> {
18  public:
Trace(Visitor * visitor)19   void Trace(Visitor* visitor) { visitor->Trace(x_); }
20 
21  private:
22   Member<X> x_;
23 };
24 
25 class TraceImplExtern : public GarbageCollected<TraceImplExtern> {
26  public:
27   void Trace(Visitor* visitor);
28 
29  private:
30   Member<X> x_;
31 };
32 
33 class Base : public GarbageCollected<Base> {
34  public:
Trace(Visitor * visitor)35   virtual void Trace(Visitor* visitor) {}
36 };
37 
38 class TraceImplBaseInlined : public Base {
39  public:
Trace(Visitor * visitor)40   void Trace(Visitor* visitor) override { Base::Trace(visitor); }
41 };
42 
43 class TraceImplBaseExtern : public Base {
44  public:
45   void Trace(Visitor* visitor) override;
46 
47  private:
48   Member<X> x_;
49 };
50 
51 }
52 
53 #endif
54