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

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

Issue 2300873002: VM: Compute static guarded cid for final instance fields. (Closed)
Patch Set: Clean up Created 4 years, 3 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 (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 VM_PRECOMPILER_H_ 5 #ifndef VM_PRECOMPILER_H_
6 #define VM_PRECOMPILER_H_ 6 #define 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 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 } 252 }
253 253
254 static inline bool IsKeyEqual(Pair pair, Key key) { 254 static inline bool IsKeyEqual(Pair pair, Key key) {
255 return pair->raw() == key->raw(); 255 return pair->raw() == key->raw();
256 } 256 }
257 }; 257 };
258 258
259 typedef DirectChainedHashMap<InstanceKeyValueTrait> InstanceSet; 259 typedef DirectChainedHashMap<InstanceKeyValueTrait> InstanceSet;
260 260
261 261
262 struct FieldTypePair {
263 // Typedefs needed for the DirectChainedHashMap template.
264 typedef const Field* Key;
265 typedef intptr_t Value;
266 typedef FieldTypePair Pair;
267
268 static Key KeyOf(Pair kv) { return kv.field_; }
269
270 static Value ValueOf(Pair kv) { return kv.cid_; }
271
272 static inline intptr_t Hashcode(Key key) {
273 return key->token_pos().value();
274 }
275
276 static inline bool IsKeyEqual(Pair pair, Key key) {
277 return pair.field_->raw() == key->raw();
278 }
279
280 FieldTypePair(const Field* f, intptr_t cid) : field_(f), cid_(cid) { }
281
282 FieldTypePair() : field_(NULL), cid_(-1) { }
283
284 void Print() const;
285
286 const Field* field_;
287 intptr_t cid_;
288 };
289
290 typedef DirectChainedHashMap<FieldTypePair> FieldTypeMap;
291
292
262 class Precompiler : public ValueObject { 293 class Precompiler : public ValueObject {
263 public: 294 public:
264 static RawError* CompileAll( 295 static RawError* CompileAll(
265 Dart_QualifiedFunctionName embedder_entry_points[], 296 Dart_QualifiedFunctionName embedder_entry_points[],
266 bool reset_fields); 297 bool reset_fields);
267 298
268 static RawError* CompileFunction(Thread* thread, const Function& function); 299 static RawError* CompileFunction(Thread* thread,
300 Zone* zone,
301 const Function& function,
302 FieldTypeMap* field_type_map = NULL);
269 303
270 static RawObject* EvaluateStaticInitializer(const Field& field); 304 static RawObject* EvaluateStaticInitializer(const Field& field);
271 static RawObject* ExecuteOnce(SequenceNode* fragment); 305 static RawObject* ExecuteOnce(SequenceNode* fragment);
272 306
273 static RawFunction* CompileStaticInitializer(const Field& field, 307 static RawFunction* CompileStaticInitializer(const Field& field,
274 bool compute_type); 308 bool compute_type);
275 309
276 private: 310 private:
277 Precompiler(Thread* thread, bool reset_fields); 311 Precompiler(Thread* thread, bool reset_fields);
278 312
279
280 void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]); 313 void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]);
281 void ClearAllCode(); 314 void ClearAllCode();
282 void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]); 315 void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]);
283 void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]); 316 void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]);
284 void Iterate(); 317 void Iterate();
285 318
286 void AddType(const AbstractType& type); 319 void AddType(const AbstractType& type);
287 void AddTypesOf(const Class& cls); 320 void AddTypesOf(const Class& cls);
288 void AddTypesOf(const Function& function); 321 void AddTypesOf(const Function& function);
289 void AddTypeArguments(const TypeArguments& args); 322 void AddTypeArguments(const TypeArguments& args);
(...skipping 24 matching lines...) Expand all
314 void BindStaticCalls(); 347 void BindStaticCalls();
315 void SwitchICCalls(); 348 void SwitchICCalls();
316 void DedupStackmaps(); 349 void DedupStackmaps();
317 void DedupStackmapLists(); 350 void DedupStackmapLists();
318 void DedupInstructions(); 351 void DedupInstructions();
319 void ResetPrecompilerState(); 352 void ResetPrecompilerState();
320 353
321 void CollectDynamicFunctionNames(); 354 void CollectDynamicFunctionNames();
322 355
323 void PrecompileStaticInitializers(); 356 void PrecompileStaticInitializers();
357 void PrecompileConstructors();
324 358
325 template<typename T> 359 template<typename T>
326 class Visitor : public ValueObject { 360 class Visitor : public ValueObject {
327 public: 361 public:
328 virtual ~Visitor() {} 362 virtual ~Visitor() {}
329 virtual void Visit(const T& obj) = 0; 363 virtual void Visit(const T& obj) = 0;
330 }; 364 };
331 typedef Visitor<Function> FunctionVisitor; 365 typedef Visitor<Function> FunctionVisitor;
332 typedef Visitor<Class> ClassVisitor; 366 typedef Visitor<Class> ClassVisitor;
333 367
(...skipping 28 matching lines...) Expand all
362 GrowableObjectArray& libraries_; 396 GrowableObjectArray& libraries_;
363 const GrowableObjectArray& pending_functions_; 397 const GrowableObjectArray& pending_functions_;
364 SymbolSet sent_selectors_; 398 SymbolSet sent_selectors_;
365 FunctionSet enqueued_functions_; 399 FunctionSet enqueued_functions_;
366 FieldSet fields_to_retain_; 400 FieldSet fields_to_retain_;
367 FunctionSet functions_to_retain_; 401 FunctionSet functions_to_retain_;
368 ClassSet classes_to_retain_; 402 ClassSet classes_to_retain_;
369 TypeArgumentsSet typeargs_to_retain_; 403 TypeArgumentsSet typeargs_to_retain_;
370 AbstractTypeSet types_to_retain_; 404 AbstractTypeSet types_to_retain_;
371 InstanceSet consts_to_retain_; 405 InstanceSet consts_to_retain_;
406 FieldTypeMap field_type_map_;
372 Error& error_; 407 Error& error_;
373 }; 408 };
374 409
375 410
376 class FunctionsTraits { 411 class FunctionsTraits {
377 public: 412 public:
378 static const char* Name() { return "FunctionsTraits"; } 413 static const char* Name() { return "FunctionsTraits"; }
379 static bool ReportStats() { return false; } 414 static bool ReportStats() { return false; }
380 415
381 static bool IsMatch(const Object& a, const Object& b) { 416 static bool IsMatch(const Object& a, const Object& b) {
(...skipping 17 matching lines...) Expand all
399 return function.raw(); 434 return function.raw();
400 } 435 }
401 }; 436 };
402 437
403 typedef UnorderedHashSet<FunctionsTraits> UniqueFunctionsSet; 438 typedef UnorderedHashSet<FunctionsTraits> UniqueFunctionsSet;
404 439
405 440
406 } // namespace dart 441 } // namespace dart
407 442
408 #endif // VM_PRECOMPILER_H_ 443 #endif // VM_PRECOMPILER_H_
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/precompiler.cc » ('j') | runtime/vm/precompiler.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698