Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(276)

Side by Side Diff: Source/heap/Visitor.h

Issue 169293002: Oilpan: Remove GC_INFO_{DEFINE,DECLARE} macros (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: remove all macros (reupl2) Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 // By default classes that inherit from GarbageCollectedFinalized need 127 // By default classes that inherit from GarbageCollectedFinalized need
128 // finalization and finalization means calling the 'finalize' method 128 // finalization and finalization means calling the 'finalize' method
129 // of the object. The FinalizerTrait can be specialized if the default 129 // of the object. The FinalizerTrait can be specialized if the default
130 // behavior is not desired. 130 // behavior is not desired.
131 template<typename T> 131 template<typename T>
132 struct FinalizerTrait { 132 struct FinalizerTrait {
133 static const bool nonTrivialFinalizer = IsGarbageCollectedFinalized<T>::valu e; 133 static const bool nonTrivialFinalizer = IsGarbageCollectedFinalized<T>::valu e;
134 static void finalize(void* obj) { FinalizerTraitImpl<T, nonTrivialFinalizer> ::finalize(obj); } 134 static void finalize(void* obj) { FinalizerTraitImpl<T, nonTrivialFinalizer> ::finalize(obj); }
135 }; 135 };
136 136
137 // Macros to declare and define GCInfo structures for objects
138 // allocated in the Blink garbage-collected heap.
139 #define DECLARE_GC_INFO \
140 public: \
141 static const GCInfo s_gcInfo; \
142 template<typename Any> friend struct FinalizerTrait; \
143 private: \
144
145 #define DEFINE_GC_INFO(Type) \
146 const GCInfo Type::s_gcInfo = { \
147 #Type, \
148 TraceTrait<Type>::trace, \
149 FinalizerTrait<Type>::finalize, \
150 FinalizerTrait<Type>::nonTrivialFinalizer, \
151 }; \
152
153 // Trait to get the GCInfo structure for types that have their 137 // Trait to get the GCInfo structure for types that have their
154 // instances allocated in the Blink garbage-collected heap. 138 // instances allocated in the Blink garbage-collected heap.
155 template<typename T> 139 template<typename T> struct GCInfoTrait;
156 struct GCInfoTrait {
157 static const GCInfo* get()
158 {
159 return &T::s_gcInfo;
160 }
161 };
162 140
163 template<typename T> 141 template<typename T>
164 const char* getTypeMarker() 142 const char* getTypeMarker()
165 { 143 {
166 return GCInfoTrait<T>::get()->m_typeMarker; 144 return GCInfoTrait<T>::get()->m_typeMarker;
167 } 145 }
168 146
169 // The TraceTrait is used to specify how to mark an object pointer and 147 // The TraceTrait is used to specify how to mark an object pointer and
170 // how to trace all of the pointers in the object. 148 // how to trace all of the pointers in the object.
171 // 149 //
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 516
539 template<typename T> bool ObjectAliveTrait<T>::isAlive(Visitor* visitor, T obj) 517 template<typename T> bool ObjectAliveTrait<T>::isAlive(Visitor* visitor, T obj)
540 { 518 {
541 return visitor->isMarked(obj); 519 return visitor->isMarked(obj);
542 } 520 }
543 template<typename T> bool ObjectAliveTrait<Member<T> >::isAlive(Visitor* visitor , const Member<T>& obj) 521 template<typename T> bool ObjectAliveTrait<Member<T> >::isAlive(Visitor* visitor , const Member<T>& obj)
544 { 522 {
545 return visitor->isMarked(obj.get()); 523 return visitor->isMarked(obj.get());
546 } 524 }
547 525
526 template<typename T>
527 struct GCInfoAtBase {
528 static const GCInfo* get()
529 {
530 static char pseudoTypeMarker = 'a';
531 static const GCInfo gcInfo = {
532 &pseudoTypeMarker,
533 TraceTrait<T>::trace,
534 FinalizerTrait<T>::finalize,
535 FinalizerTrait<T>::nonTrivialFinalizer,
536 };
537 return &gcInfo;
538 }
539 };
540
541 template<typename T>
542 struct GCInfoTrait {
543 static const GCInfo* get()
544 {
545 return GCInfoAtBase<typename T::GarbageCollectedBase>::get();
546 }
547 };
548
548 } 549 }
549 550
550 #endif 551 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698