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

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

Issue 2655933002: blink_gc_plugin: retire overloaded traceImpl detection and handling. (Closed)
Patch Set: Created 3 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
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.
11 11
12 #ifndef TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ 12 #ifndef TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
13 #define TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ 13 #define TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
14 14
15 #include <cassert> 15 #include <cassert>
16 16
17 #include "clang/AST/AST.h" 17 #include "clang/AST/AST.h"
18 #include "clang/AST/Attr.h" 18 #include "clang/AST/Attr.h"
19 19
20 extern const char kNewOperatorName[]; 20 extern const char kNewOperatorName[];
21 extern const char* kCreateName; 21 extern const char* kCreateName;
22 extern const char* kTraceName; 22 extern const char* kTraceName;
23 extern const char* kTraceImplName;
24 extern const char* kFinalizeName; 23 extern const char* kFinalizeName;
25 extern const char* kTraceAfterDispatchName; 24 extern const char* kTraceAfterDispatchName;
26 extern const char* kTraceAfterDispatchImplName;
27 extern const char* kRegisterWeakMembersName; 25 extern const char* kRegisterWeakMembersName;
28 extern const char kHeapAllocatorName[]; 26 extern const char kHeapAllocatorName[];
29 extern const char kTraceIfNeededName[]; 27 extern const char kTraceIfNeededName[];
30 extern const char kVisitorDispatcherName[]; 28 extern const char kVisitorDispatcherName[];
31 extern const char kVisitorVarName[]; 29 extern const char kVisitorVarName[];
32 extern const char* kAdjustAndMarkName; 30 extern const char* kAdjustAndMarkName;
33 extern const char* kIsHeapObjectAliveName; 31 extern const char* kIsHeapObjectAliveName;
34 extern const char kIsEagerlyFinalizedName[]; 32 extern const char kIsEagerlyFinalizedName[];
35 extern const char kConstIteratorName[]; 33 extern const char kConstIteratorName[];
36 extern const char kIteratorName[]; 34 extern const char kIteratorName[];
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 } 210 }
213 } 211 }
214 212
215 return IsVisitorPtrType(formal_type); 213 return IsVisitorPtrType(formal_type);
216 } 214 }
217 215
218 enum TraceMethodType { 216 enum TraceMethodType {
219 NOT_TRACE_METHOD, 217 NOT_TRACE_METHOD,
220 TRACE_METHOD, 218 TRACE_METHOD,
221 TRACE_AFTER_DISPATCH_METHOD, 219 TRACE_AFTER_DISPATCH_METHOD,
222 TRACE_IMPL_METHOD,
223 TRACE_AFTER_DISPATCH_IMPL_METHOD
224 }; 220 };
225 221
226 static TraceMethodType GetTraceMethodType(const clang::FunctionDecl* method) { 222 static TraceMethodType GetTraceMethodType(const clang::FunctionDecl* method) {
227 if (method->getNumParams() != 1) 223 if (method->getNumParams() != 1)
228 return NOT_TRACE_METHOD; 224 return NOT_TRACE_METHOD;
229 225
230 const std::string& name = method->getNameAsString(); 226 const std::string& name = method->getNameAsString();
231 if (name != kTraceName && name != kTraceAfterDispatchName && 227 if (name != kTraceName && name != kTraceAfterDispatchName)
232 name != kTraceImplName && name != kTraceAfterDispatchImplName)
233 return NOT_TRACE_METHOD; 228 return NOT_TRACE_METHOD;
234 229
235 const clang::QualType& formal_type = method->getParamDecl(0)->getType(); 230 const clang::QualType& formal_type = method->getParamDecl(0)->getType();
236 if (name == kTraceImplName || name == kTraceAfterDispatchImplName) { 231 if (!IsVisitorPtrType(formal_type)) {
237 if (!IsVisitorDispatcherType(formal_type))
238 return NOT_TRACE_METHOD;
239 } else if (!IsVisitorPtrType(formal_type)) {
240 return NOT_TRACE_METHOD; 232 return NOT_TRACE_METHOD;
241 } 233 }
242 234
243 if (name == kTraceName) 235 if (name == kTraceName)
244 return TRACE_METHOD; 236 return TRACE_METHOD;
245 if (name == kTraceAfterDispatchName) 237 if (name == kTraceAfterDispatchName)
246 return TRACE_AFTER_DISPATCH_METHOD; 238 return TRACE_AFTER_DISPATCH_METHOD;
247 if (name == kTraceImplName)
248 return TRACE_IMPL_METHOD;
249 if (name == kTraceAfterDispatchImplName)
250 return TRACE_AFTER_DISPATCH_IMPL_METHOD;
251 239
252 assert(false && "Should not reach here"); 240 assert(false && "Should not reach here");
253 return NOT_TRACE_METHOD; 241 return NOT_TRACE_METHOD;
254 } 242 }
255 243
256 static bool IsTraceMethod(const clang::FunctionDecl* method) { 244 static bool IsTraceMethod(const clang::FunctionDecl* method) {
257 return GetTraceMethodType(method) != NOT_TRACE_METHOD; 245 return GetTraceMethodType(method) != NOT_TRACE_METHOD;
258 } 246 }
259 247
260 static bool IsTraceImplName(const std::string& name) {
261 return name == kTraceImplName || name == kTraceAfterDispatchImplName;
262 }
263
264 static bool StartsWith(const std::string& str, const std::string& prefix) { 248 static bool StartsWith(const std::string& str, const std::string& prefix) {
265 if (prefix.size() > str.size()) 249 if (prefix.size() > str.size())
266 return false; 250 return false;
267 return str.compare(0, prefix.size(), prefix) == 0; 251 return str.compare(0, prefix.size(), prefix) == 0;
268 } 252 }
269 253
270 static bool EndsWith(const std::string& str, const std::string& suffix) { 254 static bool EndsWith(const std::string& str, const std::string& suffix) {
271 if (suffix.size() > str.size()) 255 if (suffix.size() > str.size())
272 return false; 256 return false;
273 return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; 257 return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
274 } 258 }
275 259
276 // Test if a template specialization is an instantiation. 260 // Test if a template specialization is an instantiation.
277 static bool IsTemplateInstantiation(clang::CXXRecordDecl* record); 261 static bool IsTemplateInstantiation(clang::CXXRecordDecl* record);
278 }; 262 };
279 263
280 #endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ 264 #endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
OLDNEW
« no previous file with comments | « tools/clang/blink_gc_plugin/CheckTraceVisitor.cpp ('k') | tools/clang/blink_gc_plugin/Config.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698