| 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 js_backend; | 5 part of js_backend; |
| 6 | 6 |
| 7 const VERBOSE_OPTIMIZER_HINTS = false; | 7 const VERBOSE_OPTIMIZER_HINTS = false; |
| 8 | 8 |
| 9 class JavaScriptItemCompilationContext extends ItemCompilationContext { | 9 class JavaScriptItemCompilationContext extends ItemCompilationContext { |
| 10 final Set<HInstruction> boundsChecked = new Set<HInstruction>(); | 10 final Set<HInstruction> boundsChecked = new Set<HInstruction>(); |
| (...skipping 2609 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2620 } | 2620 } |
| 2621 } | 2621 } |
| 2622 | 2622 |
| 2623 class JavaScriptImpactTransformer extends ImpactTransformer { | 2623 class JavaScriptImpactTransformer extends ImpactTransformer { |
| 2624 final JavaScriptBackend backend; | 2624 final JavaScriptBackend backend; |
| 2625 | 2625 |
| 2626 JavaScriptImpactTransformer(this.backend); | 2626 JavaScriptImpactTransformer(this.backend); |
| 2627 | 2627 |
| 2628 BackendImpacts get impacts => backend.impacts; | 2628 BackendImpacts get impacts => backend.impacts; |
| 2629 | 2629 |
| 2630 // TODO(johnniwinther): Avoid this dependency. |
| 2631 ResolutionEnqueuer get resolutionEnqueuer { |
| 2632 return backend.compiler.enqueuer.resolution; |
| 2633 } |
| 2634 |
| 2630 @override | 2635 @override |
| 2631 WorldImpact transformResolutionImpact(ResolutionImpact worldImpact) { | 2636 WorldImpact transformResolutionImpact(ResolutionImpact worldImpact) { |
| 2632 TransformedWorldImpact transformed = | 2637 TransformedWorldImpact transformed = |
| 2633 new TransformedWorldImpact(worldImpact); | 2638 new TransformedWorldImpact(worldImpact); |
| 2634 for (Feature feature in worldImpact.features) { | 2639 for (Feature feature in worldImpact.features) { |
| 2635 switch (feature) { | 2640 switch (feature) { |
| 2636 case Feature.ABSTRACT_CLASS_INSTANTIATION: | 2641 case Feature.ABSTRACT_CLASS_INSTANTIATION: |
| 2637 registerBackendImpact( | 2642 registerBackendImpact( |
| 2638 transformed, impacts.abstractClassInstantiation); | 2643 transformed, impacts.abstractClassInstantiation); |
| 2639 break; | 2644 break; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2779 for (String constSymbolName in worldImpact.constSymbolNames) { | 2784 for (String constSymbolName in worldImpact.constSymbolNames) { |
| 2780 backend.registerConstSymbol(constSymbolName); | 2785 backend.registerConstSymbol(constSymbolName); |
| 2781 } | 2786 } |
| 2782 } | 2787 } |
| 2783 | 2788 |
| 2784 for (StaticUse staticUse in worldImpact.staticUses) { | 2789 for (StaticUse staticUse in worldImpact.staticUses) { |
| 2785 if (staticUse.kind == StaticUseKind.CLOSURE) { | 2790 if (staticUse.kind == StaticUseKind.CLOSURE) { |
| 2786 registerBackendImpact(transformed, impacts.closure); | 2791 registerBackendImpact(transformed, impacts.closure); |
| 2787 LocalFunctionElement closure = staticUse.element; | 2792 LocalFunctionElement closure = staticUse.element; |
| 2788 if (closure.type.containsTypeVariables) { | 2793 if (closure.type.containsTypeVariables) { |
| 2789 backend.compiler.enqueuer.resolution.universe | 2794 resolutionEnqueuer.universe.closuresWithFreeTypeVariables |
| 2790 .closuresWithFreeTypeVariables | |
| 2791 .add(closure); | 2795 .add(closure); |
| 2792 registerBackendImpact(transformed, impacts.computeSignature); | 2796 registerBackendImpact(transformed, impacts.computeSignature); |
| 2793 } | 2797 } |
| 2794 } | 2798 } |
| 2795 } | 2799 } |
| 2796 | 2800 |
| 2797 for (ConstantExpression constant in worldImpact.constantLiterals) { | 2801 for (ConstantExpression constant in worldImpact.constantLiterals) { |
| 2798 switch (constant.kind) { | 2802 switch (constant.kind) { |
| 2799 case ConstantExpressionKind.NULL: | 2803 case ConstantExpressionKind.NULL: |
| 2800 registerBackendImpact(transformed, impacts.nullLiteral); | 2804 registerBackendImpact(transformed, impacts.nullLiteral); |
| 2801 break; | 2805 break; |
| 2802 case ConstantExpressionKind.BOOL: | 2806 case ConstantExpressionKind.BOOL: |
| 2803 registerBackendImpact(transformed, impacts.boolLiteral); | 2807 registerBackendImpact(transformed, impacts.boolLiteral); |
| 2804 break; | 2808 break; |
| 2805 case ConstantExpressionKind.INT: | 2809 case ConstantExpressionKind.INT: |
| 2806 registerBackendImpact(transformed, impacts.intLiteral); | 2810 registerBackendImpact(transformed, impacts.intLiteral); |
| 2807 break; | 2811 break; |
| 2808 case ConstantExpressionKind.DOUBLE: | 2812 case ConstantExpressionKind.DOUBLE: |
| 2809 registerBackendImpact(transformed, impacts.doubleLiteral); | 2813 registerBackendImpact(transformed, impacts.doubleLiteral); |
| 2810 break; | 2814 break; |
| 2811 case ConstantExpressionKind.STRING: | 2815 case ConstantExpressionKind.STRING: |
| 2812 registerBackendImpact(transformed, impacts.stringLiteral); | 2816 registerBackendImpact(transformed, impacts.stringLiteral); |
| 2813 break; | 2817 break; |
| 2814 default: | 2818 default: |
| 2815 assert(invariant(NO_LOCATION_SPANNABLE, false, | 2819 assert(invariant(NO_LOCATION_SPANNABLE, false, |
| 2816 message: "Unexpected constant literal: ${constant.kind}.")); | 2820 message: "Unexpected constant literal: ${constant.kind}.")); |
| 2817 } | 2821 } |
| 2818 } | 2822 } |
| 2819 | 2823 |
| 2824 for (native.NativeBehavior behavior in worldImpact.nativeData) { |
| 2825 resolutionEnqueuer.nativeEnqueuer |
| 2826 .registerNativeBehavior(behavior, worldImpact); |
| 2827 } |
| 2828 |
| 2820 return transformed; | 2829 return transformed; |
| 2821 } | 2830 } |
| 2822 | 2831 |
| 2823 void registerBackendImpact( | 2832 void registerBackendImpact( |
| 2824 TransformedWorldImpact worldImpact, BackendImpact backendImpact) { | 2833 TransformedWorldImpact worldImpact, BackendImpact backendImpact) { |
| 2825 for (Element staticUse in backendImpact.staticUses) { | 2834 for (Element staticUse in backendImpact.staticUses) { |
| 2826 assert(staticUse != null); | 2835 assert(staticUse != null); |
| 2827 backend.registerBackendUse(staticUse); | 2836 backend.registerBackendUse(staticUse); |
| 2828 worldImpact.registerStaticUse( | 2837 worldImpact.registerStaticUse( |
| 2829 // TODO(johnniwinther): Store the correct use in impacts. | 2838 // TODO(johnniwinther): Store the correct use in impacts. |
| (...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3047 | 3056 |
| 3048 @override | 3057 @override |
| 3049 void onImpactUsed(ImpactUseCase impactUse) { | 3058 void onImpactUsed(ImpactUseCase impactUse) { |
| 3050 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) { | 3059 if (impactUse == DeferredLoadTask.IMPACT_USE && !supportSerialization) { |
| 3051 // TODO(johnniwinther): Allow emptying when serialization has been | 3060 // TODO(johnniwinther): Allow emptying when serialization has been |
| 3052 // performed. | 3061 // performed. |
| 3053 resolution.emptyCache(); | 3062 resolution.emptyCache(); |
| 3054 } | 3063 } |
| 3055 } | 3064 } |
| 3056 } | 3065 } |
| OLD | NEW |