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

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

Issue 455263004: Blink GC plugin: Ensure that classes with virtual trace methods always have vtables for their left-… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: weaker requirments Created 6 years, 4 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
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 #ifndef TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ 7 #ifndef TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
8 #define TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ 8 #define TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
9 9
10 #include "clang/AST/AST.h" 10 #include "clang/AST/AST.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 static bool HasIgnorableDestructor(const std::string& ns, 98 static bool HasIgnorableDestructor(const std::string& ns,
99 const std::string& name) { 99 const std::string& name) {
100 return ns == "blink" && name == "ScriptWrappable"; 100 return ns == "blink" && name == "ScriptWrappable";
101 } 101 }
102 102
103 // Assumes name is a valid collection name. 103 // Assumes name is a valid collection name.
104 static size_t CollectionDimension(const std::string& name) { 104 static size_t CollectionDimension(const std::string& name) {
105 return (IsHashMap(name) || name == "pair") ? 2 : 1; 105 return (IsHashMap(name) || name == "pair") ? 2 : 1;
106 } 106 }
107 107
108 static bool IsDummyBase(const std::string& name) {
109 return name == "DummyBase";
110 }
111
112 static bool IsRefCountedBase(const std::string& name) {
113 return name == "RefCounted" ||
114 name == "ThreadSafeRefCounted";
115 }
116
108 static bool IsGCMixinBase(const std::string& name) { 117 static bool IsGCMixinBase(const std::string& name) {
109 return name == "GarbageCollectedMixin"; 118 return name == "GarbageCollectedMixin";
110 } 119 }
111 120
112 static bool IsGCFinalizedBase(const std::string& name) { 121 static bool IsGCFinalizedBase(const std::string& name) {
113 return name == "GarbageCollectedFinalized" || 122 return name == "GarbageCollectedFinalized" ||
114 name == "RefCountedGarbageCollected"; 123 name == "RefCountedGarbageCollected" ||
124 name == "ThreadSafeRefCountedGarbageCollected";
115 } 125 }
116 126
117 static bool IsGCBase(const std::string& name) { 127 static bool IsGCBase(const std::string& name) {
118 return name == "GarbageCollected" || 128 return name == "GarbageCollected" ||
119 IsGCFinalizedBase(name) || 129 IsGCFinalizedBase(name) ||
120 IsGCMixinBase(name); 130 IsGCMixinBase(name);
121 } 131 }
122 132
133 // Returns true of the base classes that do not need a vtable entry for trace
134 // because they cannot possibly initiate a GC during construction.
135 static bool IsSafePolymorphicBase(const std::string& name) {
136 return IsGCBase(name) || IsDummyBase(name) || IsRefCountedBase(name);
137 }
138
123 static bool IsAnnotated(clang::Decl* decl, const std::string& anno) { 139 static bool IsAnnotated(clang::Decl* decl, const std::string& anno) {
124 clang::AnnotateAttr* attr = decl->getAttr<clang::AnnotateAttr>(); 140 clang::AnnotateAttr* attr = decl->getAttr<clang::AnnotateAttr>();
125 return attr && (attr->getAnnotation() == anno); 141 return attr && (attr->getAnnotation() == anno);
126 } 142 }
127 143
128 static bool IsStackAnnotated(clang::Decl* decl) { 144 static bool IsStackAnnotated(clang::Decl* decl) {
129 return IsAnnotated(decl, "blink_stack_allocated"); 145 return IsAnnotated(decl, "blink_stack_allocated");
130 } 146 }
131 147
132 static bool IsIgnoreAnnotated(clang::Decl* decl) { 148 static bool IsIgnoreAnnotated(clang::Decl* decl) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 189 }
174 190
175 static bool EndsWith(const std::string& str, const std::string& suffix) { 191 static bool EndsWith(const std::string& str, const std::string& suffix) {
176 if (suffix.size() > str.size()) 192 if (suffix.size() > str.size())
177 return false; 193 return false;
178 return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0; 194 return str.compare(str.size() - suffix.size(), suffix.size(), suffix) == 0;
179 } 195 }
180 }; 196 };
181 197
182 #endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_ 198 #endif // TOOLS_BLINK_GC_PLUGIN_CONFIG_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698