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 "finalize_after_dispatch.h"
      6 
      7 namespace WebCore {
      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         static_cast<D*>(this)->traceAfterDispatch(visitor);
     22         break;
     23     }
     24 }
     25 
     26 void A::traceAfterDispatch(Visitor* visitor)
     27 {
     28 }
     29 
     30 void A::finalizeGarbageCollectedObject()
     31 {
     32     switch (m_type) {
     33     case TB:
     34         toB(this)->~B();
     35         break;
     36     case TC:
     37         static_cast<C*>(this)->~C();
     38         break;
     39     case TD:
     40         // Missing static_cast<D*>(this)->~D();
     41         break;
     42     }
     43 }
     44 
     45 void B::traceAfterDispatch(Visitor* visitor)
     46 {
     47     visitor->trace(m_a);
     48     A::traceAfterDispatch(visitor);
     49 }
     50 
     51 void C::traceAfterDispatch(Visitor* visitor)
     52 {
     53     visitor->trace(m_a);
     54     A::traceAfterDispatch(visitor);
     55 }
     56 
     57 void D::traceAfterDispatch(Visitor* visitor)
     58 {
     59     visitor->trace(m_a);
     60     Abstract::traceAfterDispatch(visitor);
     61 }
     62 
     63 }
     64