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

Side by Side Diff: Source/platform/heap/Handle.h

Issue 322343002: Oilpan: Fix ParamStorageTraits for RawPtr<T>. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: p Created 6 years, 6 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
« no previous file with comments | « no previous file | Source/platform/heap/HeapTest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2014 Google Inc. All rights reserved. 2 * Copyright (C) 2014 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 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 template<size_t> struct F; 62 template<size_t> struct F;
63 template<typename U> static TrueType hasAdjustAndMark(F<sizeof(&U::adjustAnd Mark)>*); 63 template<typename U> static TrueType hasAdjustAndMark(F<sizeof(&U::adjustAnd Mark)>*);
64 template<typename U> static TrueType hasIsAlive(F<sizeof(&U::isAlive)>*); 64 template<typename U> static TrueType hasIsAlive(F<sizeof(&U::isAlive)>*);
65 #endif 65 #endif
66 template<typename U> static FalseType hasIsAlive(...); 66 template<typename U> static FalseType hasIsAlive(...);
67 template<typename U> static FalseType hasAdjustAndMark(...); 67 template<typename U> static FalseType hasAdjustAndMark(...);
68 68
69 static bool const value = (sizeof(TrueType) == sizeof(hasAdjustAndMark<T>(0) )) && (sizeof(TrueType) == sizeof(hasIsAlive<T>(0))); 69 static bool const value = (sizeof(TrueType) == sizeof(hasAdjustAndMark<T>(0) )) && (sizeof(TrueType) == sizeof(hasIsAlive<T>(0)));
70 }; 70 };
71 71
72 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage) \ 72 template <typename T>
73 do { \ 73 struct IsGarbageCollectedType {
74 typedef typename WTF::RemoveConst<T>::Type NonConstType; \ 74 typedef typename WTF::RemoveConst<T>::Type NonConstType;
75 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> Garbag eCollectedSubclass; \ 75 typedef WTF::IsSubclassOfTemplate<NonConstType, GarbageCollected> GarbageCol lectedSubclass;
76 typedef IsGarbageCollectedMixin<NonConstType> GarbageCollectedMixinSubcl ass; \ 76 typedef IsGarbageCollectedMixin<NonConstType> GarbageCollectedMixinSubclass;
77 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSe tSubclass; \ 77 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashSet> HeapHashSetSub class;
78 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapLinkedHashSet> Heap LinkedHashSetSubclass; \ 78 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapLinkedHashSet> HeapLink edHashSetSubclass;
79 typedef WTF::IsSubclassOfTemplateTypenameSizeTypename<NonConstType, Heap ListHashSet> HeapListHashSetSubclass; \ 79 typedef WTF::IsSubclassOfTemplateTypenameSizeTypename<NonConstType, HeapList HashSet> HeapListHashSetSubclass;
80 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMa pSubclass; \ 80 typedef WTF::IsSubclassOfTemplate5<NonConstType, HeapHashMap> HeapHashMapSub class;
81 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector> HeapVectorSubclass; \ 81 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapVector> Heap VectorSubclass;
82 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapDeque> H eapDequeSubclass; \ 82 typedef WTF::IsSubclassOfTemplateTypenameSize<NonConstType, HeapDeque> HeapD equeSubclass;
83 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashCountedSet> Hea pHashCountedSetSubclass; \ 83 typedef WTF::IsSubclassOfTemplate3<NonConstType, HeapHashCountedSet> HeapHas hCountedSetSubclass;
84 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> Hea pTerminatedArraySubclass; \ 84 typedef WTF::IsSubclassOfTemplate<NonConstType, HeapTerminatedArray> HeapTer minatedArraySubclass;
85 COMPILE_ASSERT(GarbageCollectedSubclass::value || \ 85 static const bool value =
86 GarbageCollectedMixinSubclass::value || \ 86 GarbageCollectedSubclass::value
87 HeapHashSetSubclass::value || \ 87 || GarbageCollectedMixinSubclass::value
88 HeapLinkedHashSetSubclass::value || \ 88 || HeapHashSetSubclass::value
89 HeapListHashSetSubclass::value || \ 89 || HeapLinkedHashSetSubclass::value
90 HeapHashMapSubclass::value || \ 90 || HeapListHashSetSubclass::value
91 HeapVectorSubclass::value || \ 91 || HeapHashMapSubclass::value
92 HeapDequeSubclass::value || \ 92 || HeapVectorSubclass::value
93 HeapHashCountedSetSubclass::value || \ 93 || HeapDequeSubclass::value
94 HeapTerminatedArraySubclass::value, \ 94 || HeapHashCountedSetSubclass::value
95 ErrorMessage); \ 95 || HeapTerminatedArraySubclass::value;
96 } while (0) 96 };
97
98 #define COMPILE_ASSERT_IS_GARBAGE_COLLECTED(T, ErrorMessage) \
99 COMPILE_ASSERT(IsGarbageCollectedType<T>::value, ErrorMessage)
97 100
98 template<typename T> class Member; 101 template<typename T> class Member;
99 102
100 class PersistentNode { 103 class PersistentNode {
101 public: 104 public:
102 explicit PersistentNode(TraceCallback trace) 105 explicit PersistentNode(TraceCallback trace)
103 : m_trace(trace) 106 : m_trace(trace)
104 { 107 {
105 } 108 }
106 109
(...skipping 1046 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 struct NeedsTracing<ListHashSetNode<T, WebCore::HeapListHashSetAllocator<T, inli neCapacity> > *> { 1156 struct NeedsTracing<ListHashSetNode<T, WebCore::HeapListHashSetAllocator<T, inli neCapacity> > *> {
1154 // All heap allocated node pointers need visiting to keep the nodes alive, 1157 // All heap allocated node pointers need visiting to keep the nodes alive,
1155 // regardless of whether they contain pointers to other heap allocated 1158 // regardless of whether they contain pointers to other heap allocated
1156 // objects. 1159 // objects.
1157 static const bool value = true; 1160 static const bool value = true;
1158 }; 1161 };
1159 1162
1160 // For wtf/Functional.h 1163 // For wtf/Functional.h
1161 template<typename T, bool isGarbageCollected> struct PointerParamStorageTraits; 1164 template<typename T, bool isGarbageCollected> struct PointerParamStorageTraits;
1162 1165
1163 template<typename T> struct PointerParamStorageTraits<T*, false> { 1166 template<typename T>
1167 struct PointerParamStorageTraits<T*, false> {
1164 typedef T* StorageType; 1168 typedef T* StorageType;
1165 1169
1166 static StorageType wrap(T* value) { return value; } 1170 static StorageType wrap(T* value) { return value; }
1167 static T* unwrap(const StorageType& value) { return value; } 1171 static T* unwrap(const StorageType& value) { return value; }
1168 }; 1172 };
1169 1173
1170 template<typename T> struct PointerParamStorageTraits<T*, true> { 1174 template<typename T>
1175 struct PointerParamStorageTraits<T*, true> {
1171 typedef WebCore::CrossThreadPersistent<T> StorageType; 1176 typedef WebCore::CrossThreadPersistent<T> StorageType;
1172 1177
1173 static StorageType wrap(T* value) { return value; } 1178 static StorageType wrap(T* value) { return value; }
1174 static T* unwrap(const StorageType& value) { return value.get(); } 1179 static T* unwrap(const StorageType& value) { return value.get(); }
1175 }; 1180 };
1176 1181
1177 // FIXME: This doesn't support collections and const types. See 1182 template<typename T>
1178 // COMPILE_ASSERT_IS_GARBAGE_COLLECTED. 1183 struct ParamStorageTraits<T*> : public PointerParamStorageTraits<T*, WebCore::Is GarbageCollectedType<T>::value> {
1179 template<typename T> struct ParamStorageTraits<T*> : public PointerParamStorageT raits<T*, WTF::IsSubclassOfTemplate<T, WebCore::GarbageCollected>::value || WebC ore::IsGarbageCollectedMixin<T>::value> {
1180 }; 1184 };
1181 1185
1182 // We assume RawPtr<T> is used only for garbage-collected types. 1186 template<typename T>
1183 template<typename T> struct ParamStorageTraits<RawPtr<T> > { 1187 struct ParamStorageTraits<RawPtr<T> > : public PointerParamStorageTraits<T*, Web Core::IsGarbageCollectedType<T>::value> {
1184 typedef WebCore::CrossThreadPersistent<T> StorageType;
1185
1186 static StorageType wrap(RawPtr<T> value) { return value.get(); }
1187 static T* unwrap(const StorageType& value) { return value.get(); }
1188 }; 1188 };
1189 1189
1190 } // namespace WTF 1190 } // namespace WTF
1191 1191
1192 #endif 1192 #endif
OLDNEW
« no previous file with comments | « no previous file | Source/platform/heap/HeapTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698