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

Side by Side Diff: tools/clang/blink_gc_plugin/Config.h

Issue 1180693002: Update from https://crrev.com/333737 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 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
« no previous file with comments | « tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp ('k') | tools/clang/blink_gc_plugin/JsonWriter.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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_
OLDNEW
« no previous file with comments | « tools/clang/blink_gc_plugin/BlinkGCPlugin.cpp ('k') | tools/clang/blink_gc_plugin/JsonWriter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698