OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // This file defines the names used by GC infrastructure. | 5 // This file defines the names used by GC infrastructure. |
6 | 6 |
7 // TODO: Restructure the name determination to use fully qualified names (ala, | 7 // TODO: Restructure the name determination to use fully qualified names (ala, |
8 // blink::Foo) so that the plugin can be enabled for all of chromium. Doing so | 8 // blink::Foo) so that the plugin can be enabled for all of chromium. Doing so |
9 // would allow us to catch errors with structures outside of blink that might | 9 // would allow us to catch errors with structures outside of blink that might |
10 // have unsafe pointers to GC allocated blink structures. | 10 // have unsafe pointers to GC allocated blink structures. |
(...skipping 13 matching lines...) Expand all Loading... |
24 const char kFinalizeName[] = "finalizeGarbageCollectedObject"; | 24 const char kFinalizeName[] = "finalizeGarbageCollectedObject"; |
25 const char kTraceAfterDispatchName[] = "traceAfterDispatch"; | 25 const char kTraceAfterDispatchName[] = "traceAfterDispatch"; |
26 const char kTraceAfterDispatchImplName[] = "traceAfterDispatchImpl"; | 26 const char kTraceAfterDispatchImplName[] = "traceAfterDispatchImpl"; |
27 const char kRegisterWeakMembersName[] = "registerWeakMembers"; | 27 const char kRegisterWeakMembersName[] = "registerWeakMembers"; |
28 const char kHeapAllocatorName[] = "HeapAllocator"; | 28 const char kHeapAllocatorName[] = "HeapAllocator"; |
29 const char kTraceIfNeededName[] = "TraceIfNeeded"; | 29 const char kTraceIfNeededName[] = "TraceIfNeeded"; |
30 const char kVisitorDispatcherName[] = "VisitorDispatcher"; | 30 const char kVisitorDispatcherName[] = "VisitorDispatcher"; |
31 const char kVisitorVarName[] = "visitor"; | 31 const char kVisitorVarName[] = "visitor"; |
32 const char kAdjustAndMarkName[] = "adjustAndMark"; | 32 const char kAdjustAndMarkName[] = "adjustAndMark"; |
33 const char kIsHeapObjectAliveName[] = "isHeapObjectAlive"; | 33 const char kIsHeapObjectAliveName[] = "isHeapObjectAlive"; |
| 34 const char kIsEagerlyFinalizedName[] = "IsEagerlyFinalizedMarker"; |
34 | 35 |
35 class Config { | 36 class Config { |
36 public: | 37 public: |
37 static bool IsMember(const std::string& name) { | 38 static bool IsMember(const std::string& name) { |
38 return name == "Member"; | 39 return name == "Member"; |
39 } | 40 } |
40 | 41 |
41 static bool IsWeakMember(const std::string& name) { | 42 static bool IsWeakMember(const std::string& name) { |
42 return name == "WeakMember"; | 43 return name == "WeakMember"; |
43 } | 44 } |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 } | 208 } |
208 | 209 |
209 enum TraceMethodType { | 210 enum TraceMethodType { |
210 NOT_TRACE_METHOD, | 211 NOT_TRACE_METHOD, |
211 TRACE_METHOD, | 212 TRACE_METHOD, |
212 TRACE_AFTER_DISPATCH_METHOD, | 213 TRACE_AFTER_DISPATCH_METHOD, |
213 TRACE_IMPL_METHOD, | 214 TRACE_IMPL_METHOD, |
214 TRACE_AFTER_DISPATCH_IMPL_METHOD | 215 TRACE_AFTER_DISPATCH_IMPL_METHOD |
215 }; | 216 }; |
216 | 217 |
217 static TraceMethodType GetTraceMethodType(clang::FunctionDecl* method) { | 218 static TraceMethodType GetTraceMethodType(const clang::FunctionDecl* method) { |
218 if (method->getNumParams() != 1) | 219 if (method->getNumParams() != 1) |
219 return NOT_TRACE_METHOD; | 220 return NOT_TRACE_METHOD; |
220 | 221 |
221 const std::string& name = method->getNameAsString(); | 222 const std::string& name = method->getNameAsString(); |
222 if (name != kTraceName && name != kTraceAfterDispatchName && | 223 if (name != kTraceName && name != kTraceAfterDispatchName && |
223 name != kTraceImplName && name != kTraceAfterDispatchImplName) | 224 name != kTraceImplName && name != kTraceAfterDispatchImplName) |
224 return NOT_TRACE_METHOD; | 225 return NOT_TRACE_METHOD; |
225 | 226 |
226 const clang::QualType& formal_type = method->getParamDecl(0)->getType(); | 227 const clang::QualType& formal_type = method->getParamDecl(0)->getType(); |
227 if (name == kTraceImplName || name == kTraceAfterDispatchImplName) { | 228 if (name == kTraceImplName || name == kTraceAfterDispatchImplName) { |
228 if (!IsVisitorDispatcherType(formal_type)) | 229 if (!IsVisitorDispatcherType(formal_type)) |
229 return NOT_TRACE_METHOD; | 230 return NOT_TRACE_METHOD; |
230 } else if (!IsVisitorPtrType(formal_type)) { | 231 } else if (!IsVisitorPtrType(formal_type)) { |
231 return NOT_TRACE_METHOD; | 232 return NOT_TRACE_METHOD; |
232 } | 233 } |
233 | 234 |
234 if (name == kTraceName) | 235 if (name == kTraceName) |
235 return TRACE_METHOD; | 236 return TRACE_METHOD; |
236 if (name == kTraceAfterDispatchName) | 237 if (name == kTraceAfterDispatchName) |
237 return TRACE_AFTER_DISPATCH_METHOD; | 238 return TRACE_AFTER_DISPATCH_METHOD; |
238 if (name == kTraceImplName) | 239 if (name == kTraceImplName) |
239 return TRACE_IMPL_METHOD; | 240 return TRACE_IMPL_METHOD; |
240 if (name == kTraceAfterDispatchImplName) | 241 if (name == kTraceAfterDispatchImplName) |
241 return TRACE_AFTER_DISPATCH_IMPL_METHOD; | 242 return TRACE_AFTER_DISPATCH_IMPL_METHOD; |
242 | 243 |
243 assert(false && "Should not reach here"); | 244 assert(false && "Should not reach here"); |
244 return NOT_TRACE_METHOD; | 245 return NOT_TRACE_METHOD; |
245 } | 246 } |
246 | 247 |
247 static bool IsTraceMethod(clang::FunctionDecl* method) { | 248 static bool IsTraceMethod(const clang::FunctionDecl* method) { |
248 return GetTraceMethodType(method) != NOT_TRACE_METHOD; | 249 return GetTraceMethodType(method) != NOT_TRACE_METHOD; |
249 } | 250 } |
250 | 251 |
251 static bool IsTraceImplName(const std::string& name) { | 252 static bool IsTraceImplName(const std::string& name) { |
252 return name == kTraceImplName || name == kTraceAfterDispatchImplName; | 253 return name == kTraceImplName || name == kTraceAfterDispatchImplName; |
253 } | 254 } |
254 | 255 |
255 static bool StartsWith(const std::string& str, const std::string& prefix) { | 256 static bool StartsWith(const std::string& str, const std::string& prefix) { |
256 if (prefix.size() > str.size()) | 257 if (prefix.size() > str.size()) |
257 return false; | 258 return false; |
258 return str.compare(0, prefix.size(), prefix) == 0; | 259 return str.compare(0, prefix.size(), prefix) == 0; |
259 } | 260 } |
260 | 261 |
261 static bool EndsWith(const std::string& str, const std::string& suffix) { | 262 static bool EndsWith(const std::string& str, const std::string& suffix) { |
262 if (suffix.size() > str.size()) | 263 if (suffix.size() > str.size()) |
263 return false; | 264 return false; |
264 return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; | 265 return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; |
265 } | 266 } |
266 }; | 267 }; |
267 | 268 |
268 #endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ | 269 #endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ |
OLD | NEW |