OLD | NEW |
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/object.h" | 10 #include "vm/object.h" |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
57 return key->PcOffset(); | 57 return key->PcOffset(); |
58 } | 58 } |
59 | 59 |
60 static inline bool IsKeyEqual(Pair pair, Key key) { | 60 static inline bool IsKeyEqual(Pair pair, Key key) { |
61 return pair->Equals(*key); | 61 return pair->Equals(*key); |
62 } | 62 } |
63 }; | 63 }; |
64 | 64 |
65 typedef DirectChainedHashMap<StackmapKeyValueTrait> StackmapSet; | 65 typedef DirectChainedHashMap<StackmapKeyValueTrait> StackmapSet; |
66 | 66 |
| 67 class FunctionKeyValueTrait { |
| 68 public: |
| 69 // Typedefs needed for the DirectChainedHashMap template. |
| 70 typedef const Function* Key; |
| 71 typedef const Function* Value; |
| 72 typedef const Function* Pair; |
| 73 |
| 74 static Key KeyOf(Pair kv) { return kv; } |
| 75 |
| 76 static Value ValueOf(Pair kv) { return kv; } |
| 77 |
| 78 static inline intptr_t Hashcode(Key key) { |
| 79 return key->token_pos(); |
| 80 } |
| 81 |
| 82 static inline bool IsKeyEqual(Pair pair, Key key) { |
| 83 return pair->raw() == key->raw(); |
| 84 } |
| 85 }; |
| 86 |
| 87 typedef DirectChainedHashMap<FunctionKeyValueTrait> FunctionSet; |
| 88 |
67 | 89 |
68 class Precompiler : public ValueObject { | 90 class Precompiler : public ValueObject { |
69 public: | 91 public: |
70 static RawError* CompileAll( | 92 static RawError* CompileAll( |
71 Dart_QualifiedFunctionName embedder_entry_points[], | 93 Dart_QualifiedFunctionName embedder_entry_points[], |
72 bool reset_fields); | 94 bool reset_fields); |
73 | 95 |
74 private: | 96 private: |
75 Precompiler(Thread* thread, bool reset_fields); | 97 Precompiler(Thread* thread, bool reset_fields); |
76 | 98 |
77 void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]); | 99 void DoCompileAll(Dart_QualifiedFunctionName embedder_entry_points[]); |
78 void ClearAllCode(); | 100 void ClearAllCode(); |
79 void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]); | 101 void AddRoots(Dart_QualifiedFunctionName embedder_entry_points[]); |
80 void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]); | 102 void AddEntryPoints(Dart_QualifiedFunctionName entry_points[]); |
81 void Iterate(); | 103 void Iterate(); |
82 void CleanUp(); | |
83 | 104 |
84 void AddCalleesOf(const Function& function); | 105 void AddCalleesOf(const Function& function); |
| 106 void AddConstObject(const Instance& instance); |
85 void AddClosureCall(const ICData& call_site); | 107 void AddClosureCall(const ICData& call_site); |
86 void AddField(const Field& field); | 108 void AddField(const Field& field); |
87 void AddFunction(const Function& function); | 109 void AddFunction(const Function& function); |
88 void AddClass(const Class& cls); | 110 void AddClass(const Class& cls); |
89 void AddSelector(const String& selector); | 111 void AddSelector(const String& selector); |
90 bool IsSent(const String& selector); | 112 bool IsSent(const String& selector); |
91 | 113 |
92 void ProcessFunction(const Function& function); | 114 void ProcessFunction(const Function& function); |
93 void CheckForNewDynamicFunctions(); | 115 void CheckForNewDynamicFunctions(); |
94 | 116 |
(...skipping 22 matching lines...) Expand all Loading... |
117 const bool reset_fields_; | 139 const bool reset_fields_; |
118 | 140 |
119 bool changed_; | 141 bool changed_; |
120 intptr_t function_count_; | 142 intptr_t function_count_; |
121 intptr_t class_count_; | 143 intptr_t class_count_; |
122 intptr_t selector_count_; | 144 intptr_t selector_count_; |
123 intptr_t dropped_function_count_; | 145 intptr_t dropped_function_count_; |
124 | 146 |
125 const GrowableObjectArray& libraries_; | 147 const GrowableObjectArray& libraries_; |
126 const GrowableObjectArray& pending_functions_; | 148 const GrowableObjectArray& pending_functions_; |
127 const GrowableObjectArray& collected_closures_; | |
128 SymbolSet sent_selectors_; | 149 SymbolSet sent_selectors_; |
| 150 FunctionSet enqueued_functions_; |
129 Error& error_; | 151 Error& error_; |
130 }; | 152 }; |
131 | 153 |
132 } // namespace dart | 154 } // namespace dart |
133 | 155 |
134 #endif // VM_PRECOMPILER_H_ | 156 #endif // VM_PRECOMPILER_H_ |
OLD | NEW |