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

Side by Side Diff: runtime/vm/precompiler.h

Issue 2481873005: clang-format runtime/vm (Closed)
Patch Set: Merge Created 4 years, 1 month 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 | « runtime/vm/port_test.cc ('k') | runtime/vm/precompiler.cc » ('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 (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef RUNTIME_VM_PRECOMPILER_H_ 5 #ifndef RUNTIME_VM_PRECOMPILER_H_
6 #define RUNTIME_VM_PRECOMPILER_H_ 6 #define RUNTIME_VM_PRECOMPILER_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/hash_map.h" 9 #include "vm/hash_map.h"
10 #include "vm/hash_table.h" 10 #include "vm/hash_table.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 public: 62 public:
63 // Typedefs needed for the DirectChainedHashMap template. 63 // Typedefs needed for the DirectChainedHashMap template.
64 typedef const String* Key; 64 typedef const String* Key;
65 typedef const String* Value; 65 typedef const String* Value;
66 typedef const String* Pair; 66 typedef const String* Pair;
67 67
68 static Key KeyOf(Pair kv) { return kv; } 68 static Key KeyOf(Pair kv) { return kv; }
69 69
70 static Value ValueOf(Pair kv) { return kv; } 70 static Value ValueOf(Pair kv) { return kv; }
71 71
72 static inline intptr_t Hashcode(Key key) { 72 static inline intptr_t Hashcode(Key key) { return key->Hash(); }
73 return key->Hash();
74 }
75 73
76 static inline bool IsKeyEqual(Pair pair, Key key) { 74 static inline bool IsKeyEqual(Pair pair, Key key) {
77 return pair->raw() == key->raw(); 75 return pair->raw() == key->raw();
78 } 76 }
79 }; 77 };
80 78
81 typedef DirectChainedHashMap<SymbolKeyValueTrait> SymbolSet; 79 typedef DirectChainedHashMap<SymbolKeyValueTrait> SymbolSet;
82 80
83 class StackmapKeyValueTrait { 81 class StackmapKeyValueTrait {
84 public: 82 public:
85 // Typedefs needed for the DirectChainedHashMap template. 83 // Typedefs needed for the DirectChainedHashMap template.
86 typedef const Stackmap* Key; 84 typedef const Stackmap* Key;
87 typedef const Stackmap* Value; 85 typedef const Stackmap* Value;
88 typedef const Stackmap* Pair; 86 typedef const Stackmap* Pair;
89 87
90 static Key KeyOf(Pair kv) { return kv; } 88 static Key KeyOf(Pair kv) { return kv; }
91 89
92 static Value ValueOf(Pair kv) { return kv; } 90 static Value ValueOf(Pair kv) { return kv; }
93 91
94 static inline intptr_t Hashcode(Key key) { 92 static inline intptr_t Hashcode(Key key) { return key->PcOffset(); }
95 return key->PcOffset();
96 }
97 93
98 static inline bool IsKeyEqual(Pair pair, Key key) { 94 static inline bool IsKeyEqual(Pair pair, Key key) {
99 return pair->Equals(*key); 95 return pair->Equals(*key);
100 } 96 }
101 }; 97 };
102 98
103 typedef DirectChainedHashMap<StackmapKeyValueTrait> StackmapSet; 99 typedef DirectChainedHashMap<StackmapKeyValueTrait> StackmapSet;
104 100
105 101
106 class ArrayKeyValueTrait { 102 class ArrayKeyValueTrait {
107 public: 103 public:
108 // Typedefs needed for the DirectChainedHashMap template. 104 // Typedefs needed for the DirectChainedHashMap template.
109 typedef const Array* Key; 105 typedef const Array* Key;
110 typedef const Array* Value; 106 typedef const Array* Value;
111 typedef const Array* Pair; 107 typedef const Array* Pair;
112 108
113 static Key KeyOf(Pair kv) { return kv; } 109 static Key KeyOf(Pair kv) { return kv; }
114 110
115 static Value ValueOf(Pair kv) { return kv; } 111 static Value ValueOf(Pair kv) { return kv; }
116 112
117 static inline intptr_t Hashcode(Key key) { 113 static inline intptr_t Hashcode(Key key) { return key->Length(); }
118 return key->Length();
119 }
120 114
121 static inline bool IsKeyEqual(Pair pair, Key key) { 115 static inline bool IsKeyEqual(Pair pair, Key key) {
122 if (pair->Length() != key->Length()) { 116 if (pair->Length() != key->Length()) {
123 return false; 117 return false;
124 } 118 }
125 for (intptr_t i = 0; i < pair->Length(); i++) { 119 for (intptr_t i = 0; i < pair->Length(); i++) {
126 if (pair->At(i) != key->At(i)) { 120 if (pair->At(i) != key->At(i)) {
127 return false; 121 return false;
128 } 122 }
129 } 123 }
130 return true; 124 return true;
131 } 125 }
132 }; 126 };
133 127
134 typedef DirectChainedHashMap<ArrayKeyValueTrait> ArraySet; 128 typedef DirectChainedHashMap<ArrayKeyValueTrait> ArraySet;
135 129
136 130
137 class InstructionsKeyValueTrait { 131 class InstructionsKeyValueTrait {
138 public: 132 public:
139 // Typedefs needed for the DirectChainedHashMap template. 133 // Typedefs needed for the DirectChainedHashMap template.
140 typedef const Instructions* Key; 134 typedef const Instructions* Key;
141 typedef const Instructions* Value; 135 typedef const Instructions* Value;
142 typedef const Instructions* Pair; 136 typedef const Instructions* Pair;
143 137
144 static Key KeyOf(Pair kv) { return kv; } 138 static Key KeyOf(Pair kv) { return kv; }
145 139
146 static Value ValueOf(Pair kv) { return kv; } 140 static Value ValueOf(Pair kv) { return kv; }
147 141
148 static inline intptr_t Hashcode(Key key) { 142 static inline intptr_t Hashcode(Key key) { return key->size(); }
149 return key->size();
150 }
151 143
152 static inline bool IsKeyEqual(Pair pair, Key key) { 144 static inline bool IsKeyEqual(Pair pair, Key key) {
153 return pair->Equals(*key); 145 return pair->Equals(*key);
154 } 146 }
155 }; 147 };
156 148
157 typedef DirectChainedHashMap<InstructionsKeyValueTrait> InstructionsSet; 149 typedef DirectChainedHashMap<InstructionsKeyValueTrait> InstructionsSet;
158 150
159 151
160 class UnlinkedCallKeyValueTrait { 152 class UnlinkedCallKeyValueTrait {
161 public: 153 public:
162 // Typedefs needed for the DirectChainedHashMap template. 154 // Typedefs needed for the DirectChainedHashMap template.
163 typedef const UnlinkedCall* Key; 155 typedef const UnlinkedCall* Key;
164 typedef const UnlinkedCall* Value; 156 typedef const UnlinkedCall* Value;
165 typedef const UnlinkedCall* Pair; 157 typedef const UnlinkedCall* Pair;
166 158
167 static Key KeyOf(Pair kv) { return kv; } 159 static Key KeyOf(Pair kv) { return kv; }
168 160
169 static Value ValueOf(Pair kv) { return kv; } 161 static Value ValueOf(Pair kv) { return kv; }
170 162
171 static inline intptr_t Hashcode(Key key) { 163 static inline intptr_t Hashcode(Key key) {
172 return String::Handle(key->target_name()).Hash(); 164 return String::Handle(key->target_name()).Hash();
173 } 165 }
174 166
175 static inline bool IsKeyEqual(Pair pair, Key key) { 167 static inline bool IsKeyEqual(Pair pair, Key key) {
176 return (pair->target_name() == key->target_name()) && 168 return (pair->target_name() == key->target_name()) &&
177 (pair->args_descriptor() == key->args_descriptor()); 169 (pair->args_descriptor() == key->args_descriptor());
178 } 170 }
179 }; 171 };
180 172
181 typedef DirectChainedHashMap<UnlinkedCallKeyValueTrait> UnlinkedCallSet; 173 typedef DirectChainedHashMap<UnlinkedCallKeyValueTrait> UnlinkedCallSet;
182 174
183 175
184 class FunctionKeyValueTrait { 176 class FunctionKeyValueTrait {
185 public: 177 public:
186 // Typedefs needed for the DirectChainedHashMap template. 178 // Typedefs needed for the DirectChainedHashMap template.
187 typedef const Function* Key; 179 typedef const Function* Key;
188 typedef const Function* Value; 180 typedef const Function* Value;
189 typedef const Function* Pair; 181 typedef const Function* Pair;
190 182
191 static Key KeyOf(Pair kv) { return kv; } 183 static Key KeyOf(Pair kv) { return kv; }
192 184
193 static Value ValueOf(Pair kv) { return kv; } 185 static Value ValueOf(Pair kv) { return kv; }
194 186
195 static inline intptr_t Hashcode(Key key) { 187 static inline intptr_t Hashcode(Key key) { return key->token_pos().value(); }
196 return key->token_pos().value();
197 }
198 188
199 static inline bool IsKeyEqual(Pair pair, Key key) { 189 static inline bool IsKeyEqual(Pair pair, Key key) {
200 return pair->raw() == key->raw(); 190 return pair->raw() == key->raw();
201 } 191 }
202 }; 192 };
203 193
204 typedef DirectChainedHashMap<FunctionKeyValueTrait> FunctionSet; 194 typedef DirectChainedHashMap<FunctionKeyValueTrait> FunctionSet;
205 195
206 196
207 class FieldKeyValueTrait { 197 class FieldKeyValueTrait {
208 public: 198 public:
209 // Typedefs needed for the DirectChainedHashMap template. 199 // Typedefs needed for the DirectChainedHashMap template.
210 typedef const Field* Key; 200 typedef const Field* Key;
211 typedef const Field* Value; 201 typedef const Field* Value;
212 typedef const Field* Pair; 202 typedef const Field* Pair;
213 203
214 static Key KeyOf(Pair kv) { return kv; } 204 static Key KeyOf(Pair kv) { return kv; }
215 205
216 static Value ValueOf(Pair kv) { return kv; } 206 static Value ValueOf(Pair kv) { return kv; }
217 207
218 static inline intptr_t Hashcode(Key key) { 208 static inline intptr_t Hashcode(Key key) { return key->token_pos().value(); }
219 return key->token_pos().value();
220 }
221 209
222 static inline bool IsKeyEqual(Pair pair, Key key) { 210 static inline bool IsKeyEqual(Pair pair, Key key) {
223 return pair->raw() == key->raw(); 211 return pair->raw() == key->raw();
224 } 212 }
225 }; 213 };
226 214
227 typedef DirectChainedHashMap<FieldKeyValueTrait> FieldSet; 215 typedef DirectChainedHashMap<FieldKeyValueTrait> FieldSet;
228 216
229 217
230 class ClassKeyValueTrait { 218 class ClassKeyValueTrait {
231 public: 219 public:
232 // Typedefs needed for the DirectChainedHashMap template. 220 // Typedefs needed for the DirectChainedHashMap template.
233 typedef const Class* Key; 221 typedef const Class* Key;
234 typedef const Class* Value; 222 typedef const Class* Value;
235 typedef const Class* Pair; 223 typedef const Class* Pair;
236 224
237 static Key KeyOf(Pair kv) { return kv; } 225 static Key KeyOf(Pair kv) { return kv; }
238 226
239 static Value ValueOf(Pair kv) { return kv; } 227 static Value ValueOf(Pair kv) { return kv; }
240 228
241 static inline intptr_t Hashcode(Key key) { 229 static inline intptr_t Hashcode(Key key) { return key->token_pos().value(); }
242 return key->token_pos().value();
243 }
244 230
245 static inline bool IsKeyEqual(Pair pair, Key key) { 231 static inline bool IsKeyEqual(Pair pair, Key key) {
246 return pair->raw() == key->raw(); 232 return pair->raw() == key->raw();
247 } 233 }
248 }; 234 };
249 235
250 typedef DirectChainedHashMap<ClassKeyValueTrait> ClassSet; 236 typedef DirectChainedHashMap<ClassKeyValueTrait> ClassSet;
251 237
252 238
253 class AbstractTypeKeyValueTrait { 239 class AbstractTypeKeyValueTrait {
254 public: 240 public:
255 // Typedefs needed for the DirectChainedHashMap template. 241 // Typedefs needed for the DirectChainedHashMap template.
256 typedef const AbstractType* Key; 242 typedef const AbstractType* Key;
257 typedef const AbstractType* Value; 243 typedef const AbstractType* Value;
258 typedef const AbstractType* Pair; 244 typedef const AbstractType* Pair;
259 245
260 static Key KeyOf(Pair kv) { return kv; } 246 static Key KeyOf(Pair kv) { return kv; }
261 247
262 static Value ValueOf(Pair kv) { return kv; } 248 static Value ValueOf(Pair kv) { return kv; }
263 249
264 static inline intptr_t Hashcode(Key key) { 250 static inline intptr_t Hashcode(Key key) { return key->Hash(); }
265 return key->Hash();
266 }
267 251
268 static inline bool IsKeyEqual(Pair pair, Key key) { 252 static inline bool IsKeyEqual(Pair pair, Key key) {
269 return pair->raw() == key->raw(); 253 return pair->raw() == key->raw();
270 } 254 }
271 }; 255 };
272 256
273 typedef DirectChainedHashMap<AbstractTypeKeyValueTrait> AbstractTypeSet; 257 typedef DirectChainedHashMap<AbstractTypeKeyValueTrait> AbstractTypeSet;
274 258
275 259
276 class TypeArgumentsKeyValueTrait { 260 class TypeArgumentsKeyValueTrait {
277 public: 261 public:
278 // Typedefs needed for the DirectChainedHashMap template. 262 // Typedefs needed for the DirectChainedHashMap template.
279 typedef const TypeArguments* Key; 263 typedef const TypeArguments* Key;
280 typedef const TypeArguments* Value; 264 typedef const TypeArguments* Value;
281 typedef const TypeArguments* Pair; 265 typedef const TypeArguments* Pair;
282 266
283 static Key KeyOf(Pair kv) { return kv; } 267 static Key KeyOf(Pair kv) { return kv; }
284 268
285 static Value ValueOf(Pair kv) { return kv; } 269 static Value ValueOf(Pair kv) { return kv; }
286 270
287 static inline intptr_t Hashcode(Key key) { 271 static inline intptr_t Hashcode(Key key) { return key->Hash(); }
288 return key->Hash();
289 }
290 272
291 static inline bool IsKeyEqual(Pair pair, Key key) { 273 static inline bool IsKeyEqual(Pair pair, Key key) {
292 return pair->raw() == key->raw(); 274 return pair->raw() == key->raw();
293 } 275 }
294 }; 276 };
295 277
296 typedef DirectChainedHashMap<TypeArgumentsKeyValueTrait> TypeArgumentsSet; 278 typedef DirectChainedHashMap<TypeArgumentsKeyValueTrait> TypeArgumentsSet;
297 279
298 280
299 class InstanceKeyValueTrait { 281 class InstanceKeyValueTrait {
300 public: 282 public:
301 // Typedefs needed for the DirectChainedHashMap template. 283 // Typedefs needed for the DirectChainedHashMap template.
302 typedef const Instance* Key; 284 typedef const Instance* Key;
303 typedef const Instance* Value; 285 typedef const Instance* Value;
304 typedef const Instance* Pair; 286 typedef const Instance* Pair;
305 287
306 static Key KeyOf(Pair kv) { return kv; } 288 static Key KeyOf(Pair kv) { return kv; }
307 289
308 static Value ValueOf(Pair kv) { return kv; } 290 static Value ValueOf(Pair kv) { return kv; }
309 291
310 static inline intptr_t Hashcode(Key key) { 292 static inline intptr_t Hashcode(Key key) { return key->GetClassId(); }
311 return key->GetClassId();
312 }
313 293
314 static inline bool IsKeyEqual(Pair pair, Key key) { 294 static inline bool IsKeyEqual(Pair pair, Key key) {
315 return pair->raw() == key->raw(); 295 return pair->raw() == key->raw();
316 } 296 }
317 }; 297 };
318 298
319 typedef DirectChainedHashMap<InstanceKeyValueTrait> InstanceSet; 299 typedef DirectChainedHashMap<InstanceKeyValueTrait> InstanceSet;
320 300
321 301
322 struct FieldTypePair { 302 struct FieldTypePair {
323 // Typedefs needed for the DirectChainedHashMap template. 303 // Typedefs needed for the DirectChainedHashMap template.
324 typedef const Field* Key; 304 typedef const Field* Key;
325 typedef intptr_t Value; 305 typedef intptr_t Value;
326 typedef FieldTypePair Pair; 306 typedef FieldTypePair Pair;
327 307
328 static Key KeyOf(Pair kv) { return kv.field_; } 308 static Key KeyOf(Pair kv) { return kv.field_; }
329 309
330 static Value ValueOf(Pair kv) { return kv.cid_; } 310 static Value ValueOf(Pair kv) { return kv.cid_; }
331 311
332 static inline intptr_t Hashcode(Key key) { 312 static inline intptr_t Hashcode(Key key) { return key->token_pos().value(); }
333 return key->token_pos().value();
334 }
335 313
336 static inline bool IsKeyEqual(Pair pair, Key key) { 314 static inline bool IsKeyEqual(Pair pair, Key key) {
337 return pair.field_->raw() == key->raw(); 315 return pair.field_->raw() == key->raw();
338 } 316 }
339 317
340 FieldTypePair(const Field* f, intptr_t cid) : field_(f), cid_(cid) { } 318 FieldTypePair(const Field* f, intptr_t cid) : field_(f), cid_(cid) {}
341 319
342 FieldTypePair() : field_(NULL), cid_(-1) { } 320 FieldTypePair() : field_(NULL), cid_(-1) {}
343 321
344 void Print() const; 322 void Print() const;
345 323
346 const Field* field_; 324 const Field* field_;
347 intptr_t cid_; 325 intptr_t cid_;
348 }; 326 };
349 327
350 typedef DirectChainedHashMap<FieldTypePair> FieldTypeMap; 328 typedef DirectChainedHashMap<FieldTypePair> FieldTypeMap;
351 329
352 330
(...skipping 13 matching lines...) Expand all
366 static RawObject* ExecuteOnce(SequenceNode* fragment); 344 static RawObject* ExecuteOnce(SequenceNode* fragment);
367 345
368 static RawFunction* CompileStaticInitializer(const Field& field, 346 static RawFunction* CompileStaticInitializer(const Field& field,
369 bool compute_type); 347 bool compute_type);
370 348
371 // Returns true if get:runtimeType is not overloaded by any class. 349 // Returns true if get:runtimeType is not overloaded by any class.
372 bool get_runtime_type_is_unique() const { 350 bool get_runtime_type_is_unique() const {
373 return get_runtime_type_is_unique_; 351 return get_runtime_type_is_unique_;
374 } 352 }
375 353
376 FieldTypeMap* field_type_map() { 354 FieldTypeMap* field_type_map() { return &field_type_map_; }
377 return &field_type_map_;
378 }
379 355
380 private: 356 private:
381 Precompiler(Thread* thread, bool reset_fields); 357 Precompiler(Thread* thread, bool reset_fields);
382 358
383 void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]); 359 void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]);
384 void ClearAllCode(); 360 void ClearAllCode();
385 void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]); 361 void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]);
386 void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]); 362 void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]);
387 void Iterate(); 363 void Iterate();
388 364
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 void DedupStackmaps(); 396 void DedupStackmaps();
421 void DedupLists(); 397 void DedupLists();
422 void DedupInstructions(); 398 void DedupInstructions();
423 void ResetPrecompilerState(); 399 void ResetPrecompilerState();
424 400
425 void CollectDynamicFunctionNames(); 401 void CollectDynamicFunctionNames();
426 402
427 void PrecompileStaticInitializers(); 403 void PrecompileStaticInitializers();
428 void PrecompileConstructors(); 404 void PrecompileConstructors();
429 405
430 template<typename T> 406 template <typename T>
431 class Visitor : public ValueObject { 407 class Visitor : public ValueObject {
432 public: 408 public:
433 virtual ~Visitor() {} 409 virtual ~Visitor() {}
434 virtual void Visit(const T& obj) = 0; 410 virtual void Visit(const T& obj) = 0;
435 }; 411 };
436 typedef Visitor<Function> FunctionVisitor; 412 typedef Visitor<Function> FunctionVisitor;
437 typedef Visitor<Class> ClassVisitor; 413 typedef Visitor<Class> ClassVisitor;
438 414
439 void VisitFunctions(FunctionVisitor* visitor); 415 void VisitFunctions(FunctionVisitor* visitor);
440 void VisitClasses(ClassVisitor* visitor); 416 void VisitClasses(ClassVisitor* visitor);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
496 return a_s.raw() == b_s.raw(); 472 return a_s.raw() == b_s.raw();
497 } 473 }
498 static uword Hash(const Object& obj) { 474 static uword Hash(const Object& obj) {
499 if (obj.IsFunction()) { 475 if (obj.IsFunction()) {
500 return String::Handle(Function::Cast(obj).name()).Hash(); 476 return String::Handle(Function::Cast(obj).name()).Hash();
501 } else { 477 } else {
502 ASSERT(String::Cast(obj).IsSymbol()); 478 ASSERT(String::Cast(obj).IsSymbol());
503 return String::Cast(obj).Hash(); 479 return String::Cast(obj).Hash();
504 } 480 }
505 } 481 }
506 static RawObject* NewKey(const Function& function) { 482 static RawObject* NewKey(const Function& function) { return function.raw(); }
507 return function.raw();
508 }
509 }; 483 };
510 484
511 typedef UnorderedHashSet<FunctionsTraits> UniqueFunctionsSet; 485 typedef UnorderedHashSet<FunctionsTraits> UniqueFunctionsSet;
512 486
513 487
514 } // namespace dart 488 } // namespace dart
515 489
516 #endif // RUNTIME_VM_PRECOMPILER_H_ 490 #endif // RUNTIME_VM_PRECOMPILER_H_
OLDNEW
« no previous file with comments | « runtime/vm/port_test.cc ('k') | runtime/vm/precompiler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698