Home | History | Annotate | Download | only in tests
      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 #include "trace_after_dispatch.h"
      6 
      7 namespace blink {
      8 
      9 static B* toB(A* a) { return static_cast<B*>(a); }
     10 
     11 void A::Trace(Visitor* visitor)
     12 {
     13     switch (m_type) {
     14     case TB:
     15         toB(this)->TraceAfterDispatch(visitor);
     16         break;
     17     case TC:
     18         static_cast<C*>(this)->TraceAfterDispatch(visitor);
     19         break;
     20     case TD:
     21         // Missing static_cast<D*>(this)->TraceAfterDispatch(visitor);
     22         break;
     23     }
     24 }
     25 
     26 void A::TraceAfterDispatch(Visitor* visitor)
     27 {
     28 }
     29 
     30 void B::TraceAfterDispatch(Visitor* visitor)
     31 {
     32     visitor->Trace(m_a);
     33     // Missing A::TraceAfterDispatch(visitor);
     34     // Also check that calling Trace does not count.
     35     A::Trace(visitor);
     36 }
     37 
     38 void C::TraceAfterDispatch(Visitor* visitor)
     39 {
     40     // Missing visitor->Trace(m_a);
     41     A::TraceAfterDispatch(visitor);
     42 }
     43 
     44 void D::TraceAfterDispatch(Visitor* visitor)
     45 {
     46     visitor->Trace(m_a);
     47     Abstract::TraceAfterDispatch(visitor);
     48 }
     49 
     50 }
     51