OLD | NEW |
1 | 1 |
2 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 2 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
3 // for details. All rights reserved. Use of this source code is governed by a | 3 // for details. All rights reserved. Use of this source code is governed by a |
4 // BSD-style license that can be found in the LICENSE file. | 4 // BSD-style license that can be found in the LICENSE file. |
5 | 5 |
6 library dart2js.common.resolution; | 6 library dart2js.common.resolution; |
7 | 7 |
8 import '../common.dart'; | 8 import '../common.dart'; |
9 import '../compiler.dart' show | 9 import '../compiler.dart' show |
10 Compiler; | 10 Compiler; |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
138 } | 138 } |
139 | 139 |
140 bool operator ==(other) { | 140 bool operator ==(other) { |
141 if (identical(this, other)) return true; | 141 if (identical(this, other)) return true; |
142 if (other is! MapLiteralUse) return false; | 142 if (other is! MapLiteralUse) return false; |
143 return | 143 return |
144 type == other.type && | 144 type == other.type && |
145 isConstant == other.isConstant && | 145 isConstant == other.isConstant && |
146 isEmpty == other.isEmpty; | 146 isEmpty == other.isEmpty; |
147 } | 147 } |
| 148 |
| 149 String toString() { |
| 150 return 'MapLiteralUse($type,isConstant:$isConstant,isEmpty:$isEmpty)'; |
| 151 } |
148 } | 152 } |
149 | 153 |
150 /// A use of a list literal seen during resolution. | 154 /// A use of a list literal seen during resolution. |
151 class ListLiteralUse { | 155 class ListLiteralUse { |
152 final InterfaceType type; | 156 final InterfaceType type; |
153 final bool isConstant; | 157 final bool isConstant; |
154 final bool isEmpty; | 158 final bool isEmpty; |
155 | 159 |
156 ListLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false}); | 160 ListLiteralUse(this.type, {this.isConstant: false, this.isEmpty: false}); |
157 | 161 |
158 int get hashCode { | 162 int get hashCode { |
159 return | 163 return |
160 type.hashCode * 13 + | 164 type.hashCode * 13 + |
161 isConstant.hashCode * 17 + | 165 isConstant.hashCode * 17 + |
162 isEmpty.hashCode * 19; | 166 isEmpty.hashCode * 19; |
163 } | 167 } |
164 | 168 |
165 bool operator ==(other) { | 169 bool operator ==(other) { |
166 if (identical(this, other)) return true; | 170 if (identical(this, other)) return true; |
167 if (other is! ListLiteralUse) return false; | 171 if (other is! ListLiteralUse) return false; |
168 return | 172 return |
169 type == other.type && | 173 type == other.type && |
170 isConstant == other.isConstant && | 174 isConstant == other.isConstant && |
171 isEmpty == other.isEmpty; | 175 isEmpty == other.isEmpty; |
172 } | 176 } |
| 177 |
| 178 String toString() { |
| 179 return 'ListLiteralUse($type,isConstant:$isConstant,isEmpty:$isEmpty)'; |
| 180 } |
173 } | 181 } |
174 | 182 |
175 // TODO(johnniwinther): Rename to `Resolver` or `ResolverContext`. | 183 // TODO(johnniwinther): Rename to `Resolver` or `ResolverContext`. |
176 abstract class Resolution { | 184 abstract class Resolution { |
177 Parsing get parsing; | 185 Parsing get parsing; |
178 DiagnosticReporter get reporter; | 186 DiagnosticReporter get reporter; |
179 CoreTypes get coreTypes; | 187 CoreTypes get coreTypes; |
180 | 188 |
| 189 bool retainCaches; |
| 190 |
181 void resolveTypedef(TypedefElement typdef); | 191 void resolveTypedef(TypedefElement typdef); |
182 void resolveClass(ClassElement cls); | 192 void resolveClass(ClassElement cls); |
183 void registerClass(ClassElement cls); | 193 void registerClass(ClassElement cls); |
184 void resolveMetadataAnnotation(MetadataAnnotation metadataAnnotation); | 194 void resolveMetadataAnnotation(MetadataAnnotation metadataAnnotation); |
185 FunctionSignature resolveSignature(FunctionElement function); | 195 FunctionSignature resolveSignature(FunctionElement function); |
186 DartType resolveTypeAnnotation(Element element, TypeAnnotation node); | 196 DartType resolveTypeAnnotation(Element element, TypeAnnotation node); |
187 | 197 |
188 bool hasBeenResolved(Element element); | 198 bool hasBeenResolved(Element element); |
189 | 199 |
190 ResolutionWorkItem createWorkItem( | 200 ResolutionWorkItem createWorkItem( |
191 Element element, ItemCompilationContext compilationContext); | 201 Element element, ItemCompilationContext compilationContext); |
192 | 202 |
| 203 /// Returns `true` if the [ResolutionImpact] for [element] is cached. |
| 204 bool hasResolutionImpact(Element element); |
| 205 |
193 /// Returns the precomputed [ResolutionImpact] for [element]. | 206 /// Returns the precomputed [ResolutionImpact] for [element]. |
194 ResolutionImpact getResolutionImpact(Element element); | 207 ResolutionImpact getResolutionImpact(Element element); |
195 | 208 |
196 /// Returns the precomputed [WorldImpact] for [element]. | 209 /// Returns the precomputed [WorldImpact] for [element]. |
197 WorldImpact getWorldImpact(Element element); | 210 WorldImpact getWorldImpact(Element element); |
198 | 211 |
199 /// Computes the [WorldImpact] for [element]. | 212 /// Computes the [WorldImpact] for [element]. |
200 WorldImpact computeWorldImpact(Element element); | 213 WorldImpact computeWorldImpact(Element element); |
201 | 214 |
202 /// Removes the [WorldImpact] for [element] from the resolution cache. Later | 215 /// Removes the [WorldImpact] for [element] from the resolution cache. Later |
203 /// calls to [getWorldImpact] or [computeWorldImpact] returns an empty impact. | 216 /// calls to [getWorldImpact] or [computeWorldImpact] returns an empty impact. |
204 void uncacheWorldImpact(Element element); | 217 void uncacheWorldImpact(Element element); |
205 | 218 |
206 /// Removes the [WorldImpact]s for all [Element]s in the resolution cache. , | 219 /// Removes the [WorldImpact]s for all [Element]s in the resolution cache. , |
207 /// Later calls to [getWorldImpact] or [computeWorldImpact] returns an empty | 220 /// Later calls to [getWorldImpact] or [computeWorldImpact] returns an empty |
208 /// impact. | 221 /// impact. |
209 void emptyCache(); | 222 void emptyCache(); |
210 } | 223 } |
211 | 224 |
212 // TODO(johnniwinther): Rename to `Parser` or `ParsingContext`. | 225 // TODO(johnniwinther): Rename to `Parser` or `ParsingContext`. |
213 abstract class Parsing { | 226 abstract class Parsing { |
214 DiagnosticReporter get reporter; | 227 DiagnosticReporter get reporter; |
215 void parsePatchClass(ClassElement cls); | 228 void parsePatchClass(ClassElement cls); |
216 measure(f()); | 229 measure(f()); |
217 ScannerOptions getScannerOptionsFor(Element element); | 230 ScannerOptions getScannerOptionsFor(Element element); |
218 } | 231 } |
OLD | NEW |