| 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 |