OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, 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 part of dart2js; | 5 part of dart2js; |
6 | 6 |
7 class EnqueueTask extends CompilerTask { | 7 class EnqueueTask extends CompilerTask { |
8 final Enqueuer codegen; | 8 final Enqueuer codegen; |
9 final Enqueuer resolution; | 9 final Enqueuer resolution; |
10 | 10 |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
219 } | 219 } |
220 } | 220 } |
221 } | 221 } |
222 | 222 |
223 void onRegisterInstantiatedClass(ClassElement cls) { | 223 void onRegisterInstantiatedClass(ClassElement cls) { |
224 task.measure(() { | 224 task.measure(() { |
225 // The class must be resolved to compute the set of all | 225 // The class must be resolved to compute the set of all |
226 // supertypes. | 226 // supertypes. |
227 cls.ensureResolved(compiler); | 227 cls.ensureResolved(compiler); |
228 | 228 |
229 void processClass(ClassElement cls) { | 229 for (Link<DartType> supertypes = cls.allSupertypesAndSelf; |
230 if (seenClasses.contains(cls)) return; | 230 !supertypes.isEmpty; supertypes = supertypes.tail) { |
231 | 231 cls = supertypes.head.element; |
| 232 if (seenClasses.contains(cls)) continue; |
232 seenClasses.add(cls); | 233 seenClasses.add(cls); |
233 cls.ensureResolved(compiler); | 234 cls.ensureResolved(compiler); |
234 cls.implementation.forEachMember(processInstantiatedClassMember); | 235 cls.implementation.forEachMember(processInstantiatedClassMember); |
235 if (isResolutionQueue) { | 236 if (isResolutionQueue) { |
236 compiler.resolver.checkMembers(cls); | 237 compiler.resolver.checkMembers(cls); |
237 } | 238 } |
238 | 239 |
239 if (compiler.enableTypeAssertions) { | 240 if (compiler.enableTypeAssertions) { |
240 // We need to register is checks and helpers for checking | 241 // We need to register is checks and helpers for checking |
241 // assignments to fields. | 242 // assignments to fields. |
242 // TODO(ngeoffray): This should really move to the backend. | 243 // TODO(ngeoffray): This should really move to the backend. |
243 cls.localMembers.forEach((Element member) { | 244 cls.localMembers.forEach((Element member) { |
244 if (!member.isInstanceMember() || !member.isField()) return; | 245 if (!member.isInstanceMember() || !member.isField()) return; |
245 DartType type = member.computeType(compiler); | 246 DartType type = member.computeType(compiler); |
246 registerIsCheck(type); | 247 registerIsCheck(type); |
247 SourceString helper = compiler.backend.getCheckedModeHelper(type); | 248 SourceString helper = compiler.backend.getCheckedModeHelper(type); |
248 if (helper != null) { | 249 if (helper != null) { |
249 Element helperElement = compiler.findHelper(helper); | 250 Element helperElement = compiler.findHelper(helper); |
250 registerStaticUse(helperElement); | 251 registerStaticUse(helperElement); |
251 } | 252 } |
252 }); | 253 }); |
253 } | 254 } |
254 } | 255 } |
255 processClass(cls); | |
256 for (Link<DartType> supertypes = cls.allSupertypes; | |
257 !supertypes.isEmpty; supertypes = supertypes.tail) { | |
258 processClass(supertypes.head.element); | |
259 } | |
260 }); | 256 }); |
261 } | 257 } |
262 | 258 |
263 void registerNewSelector(SourceString name, | 259 void registerNewSelector(SourceString name, |
264 Selector selector, | 260 Selector selector, |
265 Map<SourceString, Set<Selector>> selectorsMap) { | 261 Map<SourceString, Set<Selector>> selectorsMap) { |
266 if (name != selector.name) { | 262 if (name != selector.name) { |
267 String message = "$name != ${selector.name} (${selector.kind})"; | 263 String message = "$name != ${selector.name} (${selector.kind})"; |
268 compiler.internalError("Wrong selector name: $message."); | 264 compiler.internalError("Wrong selector name: $message."); |
269 } | 265 } |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 | 396 |
401 String toString() => 'Enqueuer($name)'; | 397 String toString() => 'Enqueuer($name)'; |
402 | 398 |
403 void logSummary(log(message)) { | 399 void logSummary(log(message)) { |
404 log(isResolutionQueue | 400 log(isResolutionQueue |
405 ? 'Resolved ${resolvedElements.length} elements.' | 401 ? 'Resolved ${resolvedElements.length} elements.' |
406 : 'Compiled ${universe.generatedCode.length} methods.'); | 402 : 'Compiled ${universe.generatedCode.length} methods.'); |
407 nativeEnqueuer.logSummary(log); | 403 nativeEnqueuer.logSummary(log); |
408 } | 404 } |
409 } | 405 } |
OLD | NEW |