| 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 library dart2js.enqueue; | 5 library dart2js.enqueue; |
| 6 | 6 |
| 7 import 'dart:collection' show | 7 import 'dart:collection' show |
| 8 Queue; | 8 Queue; |
| 9 | 9 |
| 10 import 'common.dart'; | 10 import 'common.dart'; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 47 import 'js/js.dart' as js; | 47 import 'js/js.dart' as js; |
| 48 import 'native/native.dart' as native; | 48 import 'native/native.dart' as native; |
| 49 import 'types/types.dart' show | 49 import 'types/types.dart' show |
| 50 TypeMaskStrategy; | 50 TypeMaskStrategy; |
| 51 import 'universe/selector.dart' show | 51 import 'universe/selector.dart' show |
| 52 Selector; | 52 Selector; |
| 53 import 'universe/universe.dart'; | 53 import 'universe/universe.dart'; |
| 54 import 'universe/use.dart' show | 54 import 'universe/use.dart' show |
| 55 DynamicUse, | 55 DynamicUse, |
| 56 StaticUse, | 56 StaticUse, |
| 57 StaticUseKind; | 57 StaticUseKind, |
| 58 TypeUse, |
| 59 TypeUseKind; |
| 58 import 'universe/world_impact.dart' show | 60 import 'universe/world_impact.dart' show |
| 59 WorldImpact; | 61 WorldImpact; |
| 60 import 'util/util.dart' show | 62 import 'util/util.dart' show |
| 61 Link, | 63 Link, |
| 62 Setlet; | 64 Setlet; |
| 63 | 65 |
| 64 typedef ItemCompilationContext ItemCompilationContextCreator(); | 66 typedef ItemCompilationContext ItemCompilationContextCreator(); |
| 65 | 67 |
| 66 class EnqueueTask extends CompilerTask { | 68 class EnqueueTask extends CompilerTask { |
| 67 final ResolutionEnqueuer resolution; | 69 final ResolutionEnqueuer resolution; |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 * | 162 * |
| 161 * Returns [true] if the element was actually added to the queue. | 163 * Returns [true] if the element was actually added to the queue. |
| 162 */ | 164 */ |
| 163 bool internalAddToWorkList(Element element); | 165 bool internalAddToWorkList(Element element); |
| 164 | 166 |
| 165 /// Apply the [worldImpact] of processing [element] to this enqueuer. | 167 /// Apply the [worldImpact] of processing [element] to this enqueuer. |
| 166 void applyImpact(Element element, WorldImpact worldImpact) { | 168 void applyImpact(Element element, WorldImpact worldImpact) { |
| 167 // TODO(johnniwinther): Optimize the application of the world impact. | 169 // TODO(johnniwinther): Optimize the application of the world impact. |
| 168 worldImpact.dynamicUses.forEach(registerDynamicUse); | 170 worldImpact.dynamicUses.forEach(registerDynamicUse); |
| 169 worldImpact.staticUses.forEach(registerStaticUse); | 171 worldImpact.staticUses.forEach(registerStaticUse); |
| 170 worldImpact.instantiatedTypes.forEach(registerInstantiatedType); | 172 worldImpact.typeUses.forEach(registerTypeUse); |
| 171 worldImpact.isChecks.forEach(registerIsCheck); | |
| 172 worldImpact.asCasts.forEach(registerIsCheck); | |
| 173 if (compiler.enableTypeAssertions) { | |
| 174 worldImpact.checkedModeChecks.forEach(registerIsCheck); | |
| 175 } | |
| 176 worldImpact.onCatchTypes.forEach(registerIsCheck); | |
| 177 worldImpact.closures.forEach(registerClosure); | 173 worldImpact.closures.forEach(registerClosure); |
| 178 } | 174 } |
| 179 | 175 |
| 180 void registerInstantiatedType(InterfaceType type, | 176 void registerInstantiatedType(InterfaceType type, |
| 181 {bool mirrorUsage: false}) { | 177 {bool mirrorUsage: false}) { |
| 182 task.measure(() { | 178 task.measure(() { |
| 183 ClassElement cls = type.element; | 179 ClassElement cls = type.element; |
| 184 cls.ensureResolved(resolution); | 180 cls.ensureResolved(resolution); |
| 185 universe.registerTypeInstantiation( | 181 universe.registerTypeInstantiation( |
| 186 type, | 182 type, |
| (...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 633 break; | 629 break; |
| 634 case StaticUseKind.SUPER_TEAR_OFF: | 630 case StaticUseKind.SUPER_TEAR_OFF: |
| 635 case StaticUseKind.GENERAL: | 631 case StaticUseKind.GENERAL: |
| 636 break; | 632 break; |
| 637 } | 633 } |
| 638 if (addElement) { | 634 if (addElement) { |
| 639 addToWorkList(element); | 635 addToWorkList(element); |
| 640 } | 636 } |
| 641 } | 637 } |
| 642 | 638 |
| 643 void registerIsCheck(DartType type) { | 639 void registerTypeUse(TypeUse typeUse) { |
| 640 DartType type = typeUse.type; |
| 641 switch (typeUse.kind) { |
| 642 case TypeUseKind.INSTANTIATION: |
| 643 registerInstantiatedType(type); |
| 644 break; |
| 645 case TypeUseKind.INSTANTIATION: |
| 646 case TypeUseKind.IS_CHECK: |
| 647 case TypeUseKind.AS_CAST: |
| 648 case TypeUseKind.CATCH_TYPE: |
| 649 _registerIsCheck(type); |
| 650 break; |
| 651 case TypeUseKind.CHECKED_MODE_CHECK: |
| 652 if (compiler.enableTypeAssertions) { |
| 653 _registerIsCheck(type); |
| 654 } |
| 655 break; |
| 656 case TypeUseKind.TYPE_LITERAL: |
| 657 break; |
| 658 } |
| 659 } |
| 660 |
| 661 void _registerIsCheck(DartType type) { |
| 644 type = universe.registerIsCheck(type, compiler); | 662 type = universe.registerIsCheck(type, compiler); |
| 645 // Even in checked mode, type annotations for return type and argument | 663 // Even in checked mode, type annotations for return type and argument |
| 646 // types do not imply type checks, so there should never be a check | 664 // types do not imply type checks, so there should never be a check |
| 647 // against the type variable of a typedef. | 665 // against the type variable of a typedef. |
| 648 assert(!type.isTypeVariable || | 666 assert(!type.isTypeVariable || |
| 649 !type.element.enclosingElement.isTypedef); | 667 !type.element.enclosingElement.isTypedef); |
| 650 } | 668 } |
| 651 | 669 |
| 652 void registerCallMethodWithFreeTypeVariables(Element element) { | 670 void registerCallMethodWithFreeTypeVariables(Element element) { |
| 653 compiler.backend.registerCallMethodWithFreeTypeVariables( | 671 compiler.backend.registerCallMethodWithFreeTypeVariables( |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1012 @override | 1030 @override |
| 1013 void processStaticUse(Enqueuer enqueuer, StaticUse staticUse) { | 1031 void processStaticUse(Enqueuer enqueuer, StaticUse staticUse) { |
| 1014 enqueuer.registerStaticUseInternal(staticUse); | 1032 enqueuer.registerStaticUseInternal(staticUse); |
| 1015 } | 1033 } |
| 1016 | 1034 |
| 1017 @override | 1035 @override |
| 1018 void processDynamicUse(Enqueuer enqueuer, DynamicUse dynamicUse) { | 1036 void processDynamicUse(Enqueuer enqueuer, DynamicUse dynamicUse) { |
| 1019 enqueuer.handleUnseenSelectorInternal(dynamicUse); | 1037 enqueuer.handleUnseenSelectorInternal(dynamicUse); |
| 1020 } | 1038 } |
| 1021 } | 1039 } |
| OLD | NEW |