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

Unified 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: fixheaptest 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/heap/HeapTest.cpp ('k') | Source/modules/crypto/Algorithm.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/heap/Visitor.h
diff --git a/Source/heap/Visitor.h b/Source/heap/Visitor.h
index 80623bf29531b79daa213ccdecb17877dff4bd6d..98b109f6aed5a8a05a5c1de28292bd8f0769c86e 100644
--- a/Source/heap/Visitor.h
+++ b/Source/heap/Visitor.h
@@ -42,6 +42,7 @@
#include "wtf/ListHashSet.h"
#include "wtf/OwnPtr.h"
#include "wtf/RefPtr.h"
+#include "wtf/TypeTraits.h"
#ifndef NDEBUG
#define DEBUG_ONLY(x) x
@@ -91,19 +92,6 @@ struct GCInfo {
bool m_nonTrivialFinalizer;
};
-// Template struct to detect whether type T inherits from
-// GarbageCollectedFinalized.
-template<typename T>
-struct IsGarbageCollectedFinalized {
- typedef char TrueType;
- struct FalseType {
- char dummy[2];
- };
- template<typename U> static TrueType has(GarbageCollectedFinalized<U>*);
- static FalseType has(...);
- static bool const value = sizeof(has(static_cast<T*>(0))) == sizeof(TrueType);
-};
-
// The FinalizerTraitImpl specifies how to finalize objects. Object
// that inherit from GarbageCollectedFinalized are finalized by
// calling their 'finalize' method which by default will call the
@@ -130,35 +118,13 @@ struct FinalizerTraitImpl<T, false> {
// behavior is not desired.
template<typename T>
struct FinalizerTrait {
- static const bool nonTrivialFinalizer = IsGarbageCollectedFinalized<T>::value;
+ static const bool nonTrivialFinalizer = WTF::IsSubclassOfTemplate<T, GarbageCollectedFinalized>::value;
static void finalize(void* obj) { FinalizerTraitImpl<T, nonTrivialFinalizer>::finalize(obj); }
};
-// Macros to declare and define GCInfo structures for objects
-// allocated in the Blink garbage-collected heap.
-#define DECLARE_GC_INFO \
-public: \
- static const GCInfo s_gcInfo; \
- template<typename Any> friend struct FinalizerTrait; \
-private: \
-
-#define DEFINE_GC_INFO(Type) \
-const GCInfo Type::s_gcInfo = { \
- #Type, \
- TraceTrait<Type>::trace, \
- FinalizerTrait<Type>::finalize, \
- FinalizerTrait<Type>::nonTrivialFinalizer, \
-}; \
-
// Trait to get the GCInfo structure for types that have their
// instances allocated in the Blink garbage-collected heap.
-template<typename T>
-struct GCInfoTrait {
- static const GCInfo* get()
- {
- return &T::s_gcInfo;
- }
-};
+template<typename T> struct GCInfoTrait;
template<typename T>
const char* getTypeMarker()
@@ -545,6 +511,42 @@ template<typename T> bool ObjectAliveTrait<Member<T> >::isAlive(Visitor* visitor
return visitor->isMarked(obj.get());
}
+template<typename T>
+struct GCInfoAtBase {
+ static const GCInfo* get()
+ {
+ static char pseudoTypeMarker = 'a';
+ static const GCInfo gcInfo = {
+ &pseudoTypeMarker,
+ TraceTrait<T>::trace,
+ FinalizerTrait<T>::finalize,
+ FinalizerTrait<T>::nonTrivialFinalizer,
+ };
+ return &gcInfo;
+ }
+};
+
+template<typename T> class GarbageCollected;
+template<typename T, bool = WTF::IsSubclassOfTemplate<T, GarbageCollected>::value> struct GetGarbageCollectedBase;
+
+template<typename T>
+struct GetGarbageCollectedBase<T, true> {
+ typedef typename T::GarbageCollectedBase type;
+};
+
+template<typename T>
+struct GetGarbageCollectedBase<T, false> {
+ typedef T type;
+};
+
+template<typename T>
+struct GCInfoTrait {
+ static const GCInfo* get()
+ {
+ return GCInfoAtBase<typename GetGarbageCollectedBase<T>::type>::get();
+ }
+};
+
}
#endif
« no previous file with comments | « Source/heap/HeapTest.cpp ('k') | Source/modules/crypto/Algorithm.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698