1 /* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31 #ifndef Visitor_h 32 #define Visitor_h 33 34 #define TRACE_GC_MARKING 0 35 #define TRACE_GC_FINALIZATION 0 36 37 #if TRACE_GC_MARKING || TRACE_GC_FINALIZATION 38 #define TRACE_GC_USING_CLASSOF 1 39 #else 40 #define TRACE_GC_USING_CLASSOF 0 41 #endif 42 43 namespace WebCore { 44 45 typedef void (*FinalizationCallback)(void*); 46 47 class Visitor; 48 typedef void (*VisitorCallback)(Visitor*, void* self); 49 typedef VisitorCallback TraceCallback; 50 typedef VisitorCallback WeakPointerCallback; 51 52 // GCInfo contains meta-data associated with objects allocated in the 53 // Blink heap. This meta-data consists of a function pointer used to 54 // trace the pointers in the object during garbage collection, an 55 // indication of whether or not the object needs a finalization 56 // callback, and a function pointer used to finalize the object when 57 // the garbage collector determines that the object is no longer 58 // reachable. There is a GCInfo struct for each class that directly 59 // inherits from GarbageCollected or GarbageCollectedFinalized. 60 struct GCInfo { 61 bool hasFinalizer() const { return m_nonTrivialFinalizer; } 62 const char* m_typeMarker; 63 TraceCallback m_trace; 64 FinalizationCallback m_finalize; 65 bool m_nonTrivialFinalizer; 66 #if TRACE_GC_USING_CLASSOF 67 ClassOfCallback m_classOf; 68 #endif 69 }; 70 71 } 72 73 #endif 74