Home | History | Annotate | Download | only in tests
      1 // Copyright 2015 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_DEPENDENT_SCOPE_H_
      6 #define TRACEIMPL_DEPENDENT_SCOPE_H_
      7 
      8 #include "heap/stubs.h"
      9 
     10 namespace blink {
     11 
     12 class X : public GarbageCollected<X> {
     13  public:
     14   virtual void Trace(Visitor*) {}
     15 };
     16 
     17 template <typename T>
     18 class Base : public GarbageCollected<Base<T> > {
     19  public:
     20   virtual void Trace(Visitor* visitor) { TraceImpl(visitor); }
     21   virtual void Trace(InlinedGlobalMarkingVisitor visitor) {
     22     TraceImpl(visitor);
     23   }
     24 
     25  private:
     26   template <typename VisitorDispatcher>
     27   void TraceImpl(VisitorDispatcher visitor) {}
     28 };
     29 
     30 template <typename T>
     31 class Derived : public Base<T> {
     32  public:
     33   void Trace(Visitor* visitor) override { TraceImpl(visitor); }
     34   void Trace(InlinedGlobalMarkingVisitor visitor) override {
     35     TraceImpl(visitor);
     36   }
     37 
     38  private:
     39   template <typename VisitorDispatcher>
     40   void TraceImpl(VisitorDispatcher visitor) {
     41     Base<T>::Trace(visitor);
     42   }
     43 };
     44 
     45 template <typename T>
     46 class DerivedMissingTrace : public Base<T> {
     47  public:
     48   void Trace(Visitor* visitor) override { TraceImpl(visitor); }
     49   void Trace(InlinedGlobalMarkingVisitor visitor) override {
     50     TraceImpl(visitor);
     51   }
     52 
     53  private:
     54   template <typename VisitorDispatcher>
     55   void TraceImpl(VisitorDispatcher visitor) {
     56     // Missing Base<T>::Trace(visitor).
     57   }
     58 };
     59 
     60 }
     61 
     62 #endif  // TRACEIMPL_DEPENDENT_SCOPE_H_
     63