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 js_backend.backend; | 5 library js_backend.backend; |
6 | 6 |
7 import '../common.dart'; | 7 import '../common.dart'; |
8 import '../common/backend_api.dart' | 8 import '../common/backend_api.dart' |
9 show ForeignResolver, NativeRegistry, ImpactTransformer; | 9 show ForeignResolver, NativeRegistry, ImpactTransformer; |
10 import '../common/codegen.dart' show CodegenWorkItem; | 10 import '../common/codegen.dart' show CodegenWorkItem; |
11 import '../common/names.dart' show Uris; | 11 import '../common/names.dart' show Uris; |
12 import '../common/resolution.dart' show Resolution, Target; | 12 import '../common/resolution.dart' show Resolution, Target; |
13 import '../common/tasks.dart' show CompilerTask; | 13 import '../common/tasks.dart' show CompilerTask; |
14 import '../compiler.dart' show Compiler; | 14 import '../compiler.dart' show Compiler; |
15 import '../constants/constant_system.dart'; | 15 import '../constants/constant_system.dart'; |
16 import '../constants/expressions.dart'; | 16 import '../constants/expressions.dart'; |
17 import '../constants/values.dart'; | 17 import '../constants/values.dart'; |
18 import '../common_elements.dart' show CommonElements; | 18 import '../common_elements.dart' show CommonElements, ElementEnvironment; |
19 import '../deferred_load.dart' show DeferredLoadTask; | 19 import '../deferred_load.dart' show DeferredLoadTask; |
20 import '../dump_info.dart' show DumpInfoTask; | 20 import '../dump_info.dart' show DumpInfoTask; |
21 import '../elements/elements.dart'; | 21 import '../elements/elements.dart'; |
22 import '../elements/entities.dart'; | 22 import '../elements/entities.dart'; |
23 import '../elements/names.dart'; | 23 import '../elements/names.dart'; |
24 import '../elements/resolution_types.dart'; | 24 import '../elements/resolution_types.dart'; |
25 import '../elements/types.dart'; | 25 import '../elements/types.dart'; |
26 import '../enqueue.dart' | 26 import '../enqueue.dart' |
27 show | 27 show |
28 DirectEnqueuerStrategy, | 28 DirectEnqueuerStrategy, |
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 | 445 |
446 Tracer tracer; | 446 Tracer tracer; |
447 | 447 |
448 JavaScriptBackend(this.compiler, | 448 JavaScriptBackend(this.compiler, |
449 {bool generateSourceMap: true, | 449 {bool generateSourceMap: true, |
450 bool useStartupEmitter: false, | 450 bool useStartupEmitter: false, |
451 bool useMultiSourceInfo: false, | 451 bool useMultiSourceInfo: false, |
452 bool useNewSourceInfo: false, | 452 bool useNewSourceInfo: false, |
453 bool useKernel: false}) | 453 bool useKernel: false}) |
454 : _rti = new RuntimeTypesImpl( | 454 : _rti = new RuntimeTypesImpl( |
455 compiler.elementEnvironment, compiler.frontendStrategy.dartTypes), | 455 compiler.frontendStrategy.elementEnvironment, |
456 optimizerHints = new OptimizerHintsForTests(compiler.elementEnvironment, | 456 compiler.frontendStrategy.dartTypes), |
| 457 optimizerHints = new OptimizerHintsForTests( |
| 458 compiler.frontendStrategy.elementEnvironment, |
457 compiler.frontendStrategy.commonElements), | 459 compiler.frontendStrategy.commonElements), |
458 this.sourceInformationStrategy = | 460 this.sourceInformationStrategy = |
459 compiler.backendStrategy.sourceInformationStrategy, | 461 compiler.backendStrategy.sourceInformationStrategy, |
460 constantCompilerTask = new JavaScriptConstantTask(compiler), | 462 constantCompilerTask = new JavaScriptConstantTask(compiler), |
461 _nativeDataResolver = new NativeDataResolverImpl(compiler), | 463 _nativeDataResolver = new NativeDataResolverImpl(compiler), |
462 _rtiNeedBuilder = | 464 _rtiNeedBuilder = |
463 compiler.frontendStrategy.createRuntimeTypesNeedBuilder() { | 465 compiler.frontendStrategy.createRuntimeTypesNeedBuilder() { |
464 CommonElements commonElements = compiler.frontendStrategy.commonElements; | 466 CommonElements commonElements = compiler.frontendStrategy.commonElements; |
465 _target = new JavaScriptBackendTarget(this); | 467 _target = new JavaScriptBackendTarget(this); |
466 impacts = new BackendImpacts(compiler.options, commonElements); | 468 impacts = new BackendImpacts(compiler.options, commonElements); |
467 _mirrorsData = compiler.frontendStrategy.createMirrorsDataBuilder(); | 469 _mirrorsData = compiler.frontendStrategy.createMirrorsDataBuilder(); |
468 _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements); | 470 _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements); |
469 _checkedModeHelpers = new CheckedModeHelpers(commonElements); | 471 _checkedModeHelpers = new CheckedModeHelpers(commonElements); |
470 emitter = | 472 emitter = |
471 new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter); | 473 new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter); |
472 | 474 |
473 _typeVariableResolutionAnalysis = new TypeVariableResolutionAnalysis( | 475 _typeVariableResolutionAnalysis = new TypeVariableResolutionAnalysis( |
474 compiler.elementEnvironment, impacts, _backendUsageBuilder); | 476 compiler.frontendStrategy.elementEnvironment, |
| 477 impacts, |
| 478 _backendUsageBuilder); |
475 jsInteropAnalysis = new JsInteropAnalysis(this); | 479 jsInteropAnalysis = new JsInteropAnalysis(this); |
476 _mirrorsResolutionAnalysis = | 480 _mirrorsResolutionAnalysis = |
477 compiler.frontendStrategy.createMirrorsResolutionAnalysis(this); | 481 compiler.frontendStrategy.createMirrorsResolutionAnalysis(this); |
478 lookupMapResolutionAnalysis = | 482 lookupMapResolutionAnalysis = new LookupMapResolutionAnalysis( |
479 new LookupMapResolutionAnalysis(reporter, compiler.elementEnvironment); | 483 reporter, compiler.frontendStrategy.elementEnvironment); |
480 | 484 |
481 noSuchMethodRegistry = new NoSuchMethodRegistry( | 485 noSuchMethodRegistry = new NoSuchMethodRegistry( |
482 commonElements, compiler.frontendStrategy.createNoSuchMethodResolver()); | 486 commonElements, compiler.frontendStrategy.createNoSuchMethodResolver()); |
483 kernelTask = new KernelTask(compiler); | 487 kernelTask = new KernelTask(compiler); |
484 patchResolverTask = new PatchResolverTask(compiler); | 488 patchResolverTask = new PatchResolverTask(compiler); |
485 functionCompiler = new SsaFunctionCompiler( | 489 functionCompiler = new SsaFunctionCompiler( |
486 this, compiler.measurer, sourceInformationStrategy); | 490 this, compiler.measurer, sourceInformationStrategy); |
487 serialization = new JavaScriptBackendSerialization(this); | 491 serialization = new JavaScriptBackendSerialization(this); |
488 } | 492 } |
489 | 493 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
725 void onResolutionEnd() { | 729 void onResolutionEnd() { |
726 frontendStrategy.annotationProcesser | 730 frontendStrategy.annotationProcesser |
727 .processJsInteropAnnotations(nativeBasicData, nativeDataBuilder); | 731 .processJsInteropAnnotations(nativeBasicData, nativeDataBuilder); |
728 } | 732 } |
729 | 733 |
730 /// Called when the closed world from resolution has been computed. | 734 /// Called when the closed world from resolution has been computed. |
731 void onResolutionClosedWorld( | 735 void onResolutionClosedWorld( |
732 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) { | 736 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) { |
733 for (MemberEntity entity | 737 for (MemberEntity entity |
734 in compiler.enqueuer.resolution.processedEntities) { | 738 in compiler.enqueuer.resolution.processedEntities) { |
735 processAnnotations( | 739 processAnnotations(closedWorld.elementEnvironment, |
736 closedWorld.commonElements, entity, closedWorldRefiner); | 740 closedWorld.commonElements, entity, closedWorldRefiner); |
737 } | 741 } |
738 mirrorsDataBuilder.computeMembersNeededForReflection( | 742 mirrorsDataBuilder.computeMembersNeededForReflection( |
739 compiler.enqueuer.resolution.worldBuilder, closedWorld); | 743 compiler.enqueuer.resolution.worldBuilder, closedWorld); |
740 _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed( | 744 _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed( |
741 compiler.enqueuer.resolution.worldBuilder, closedWorld, compiler.types, | 745 compiler.enqueuer.resolution.worldBuilder, closedWorld, compiler.types, |
742 enableTypeAssertions: compiler.options.enableTypeAssertions); | 746 enableTypeAssertions: compiler.options.enableTypeAssertions); |
743 mirrorsResolutionAnalysis.onResolutionComplete(); | 747 mirrorsResolutionAnalysis.onResolutionComplete(); |
744 } | 748 } |
745 | 749 |
(...skipping 28 matching lines...) Expand all Loading... |
774 } | 778 } |
775 reporter.reportErrorMessage( | 779 reporter.reportErrorMessage( |
776 node, MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT); | 780 node, MessageKind.WRONG_ARGUMENT_FOR_JS_INTERCEPTOR_CONSTANT); |
777 } | 781 } |
778 // No native behavior for this call. | 782 // No native behavior for this call. |
779 return null; | 783 return null; |
780 } | 784 } |
781 | 785 |
782 ResolutionEnqueuer createResolutionEnqueuer( | 786 ResolutionEnqueuer createResolutionEnqueuer( |
783 CompilerTask task, Compiler compiler) { | 787 CompilerTask task, Compiler compiler) { |
| 788 ElementEnvironment elementEnvironment = |
| 789 compiler.frontendStrategy.elementEnvironment; |
784 CommonElements commonElements = compiler.frontendStrategy.commonElements; | 790 CommonElements commonElements = compiler.frontendStrategy.commonElements; |
785 _nativeBasicData = | 791 _nativeBasicData = nativeBasicDataBuilder.close(elementEnvironment); |
786 nativeBasicDataBuilder.close(compiler.elementEnvironment); | |
787 _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer( | 792 _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer( |
788 compiler.options, | 793 compiler.options, |
789 compiler.elementEnvironment, | 794 elementEnvironment, |
790 commonElements, | 795 commonElements, |
791 compiler.frontendStrategy.dartTypes, | 796 compiler.frontendStrategy.dartTypes, |
792 _backendUsageBuilder, | 797 _backendUsageBuilder, |
793 compiler.frontendStrategy.createNativeClassFinder(nativeBasicData)); | 798 compiler.frontendStrategy.createNativeClassFinder(nativeBasicData)); |
794 _nativeDataBuilder = new NativeDataBuilderImpl(nativeBasicData); | 799 _nativeDataBuilder = new NativeDataBuilderImpl(nativeBasicData); |
795 _customElementsResolutionAnalysis = new CustomElementsResolutionAnalysis( | 800 _customElementsResolutionAnalysis = new CustomElementsResolutionAnalysis( |
796 constantSystem, | 801 constantSystem, |
797 compiler.elementEnvironment, | 802 elementEnvironment, |
798 commonElements, | 803 commonElements, |
799 nativeBasicData, | 804 nativeBasicData, |
800 _backendUsageBuilder); | 805 _backendUsageBuilder); |
801 impactTransformer = new JavaScriptImpactTransformer( | 806 impactTransformer = new JavaScriptImpactTransformer( |
802 compiler.options, | 807 compiler.options, |
803 compiler.elementEnvironment, | 808 elementEnvironment, |
804 commonElements, | 809 commonElements, |
805 impacts, | 810 impacts, |
806 nativeBasicData, | 811 nativeBasicData, |
807 _nativeResolutionEnqueuer, | 812 _nativeResolutionEnqueuer, |
808 _backendUsageBuilder, | 813 _backendUsageBuilder, |
809 mirrorsDataBuilder, | 814 mirrorsDataBuilder, |
810 customElementsResolutionAnalysis, | 815 customElementsResolutionAnalysis, |
811 rtiNeedBuilder); | 816 rtiNeedBuilder); |
812 InterceptorDataBuilder interceptorDataBuilder = | 817 InterceptorDataBuilder interceptorDataBuilder = |
813 new InterceptorDataBuilderImpl( | 818 new InterceptorDataBuilderImpl( |
814 nativeBasicData, compiler.elementEnvironment, commonElements); | 819 nativeBasicData, elementEnvironment, commonElements); |
815 return new ResolutionEnqueuer( | 820 return new ResolutionEnqueuer( |
816 task, | 821 task, |
817 compiler.options, | 822 compiler.options, |
818 compiler.reporter, | 823 compiler.reporter, |
819 compiler.options.analyzeOnly && compiler.options.analyzeMain | 824 compiler.options.analyzeOnly && compiler.options.analyzeMain |
820 ? const DirectEnqueuerStrategy() | 825 ? const DirectEnqueuerStrategy() |
821 : const TreeShakingEnqueuerStrategy(), | 826 : const TreeShakingEnqueuerStrategy(), |
822 new ResolutionEnqueuerListener( | 827 new ResolutionEnqueuerListener( |
823 compiler.options, | 828 compiler.options, |
824 compiler.elementEnvironment, | 829 elementEnvironment, |
825 commonElements, | 830 commonElements, |
826 impacts, | 831 impacts, |
827 nativeBasicData, | 832 nativeBasicData, |
828 interceptorDataBuilder, | 833 interceptorDataBuilder, |
829 _backendUsageBuilder, | 834 _backendUsageBuilder, |
830 rtiNeedBuilder, | 835 rtiNeedBuilder, |
831 mirrorsDataBuilder, | 836 mirrorsDataBuilder, |
832 noSuchMethodRegistry, | 837 noSuchMethodRegistry, |
833 customElementsResolutionAnalysis, | 838 customElementsResolutionAnalysis, |
834 lookupMapResolutionAnalysis, | 839 lookupMapResolutionAnalysis, |
835 mirrorsResolutionAnalysis, | 840 mirrorsResolutionAnalysis, |
836 typeVariableResolutionAnalysis, | 841 typeVariableResolutionAnalysis, |
837 _nativeResolutionEnqueuer, | 842 _nativeResolutionEnqueuer, |
838 compiler.deferredLoadTask, | 843 compiler.deferredLoadTask, |
839 kernelTask), | 844 kernelTask), |
840 compiler.frontendStrategy.createResolutionWorldBuilder( | 845 compiler.frontendStrategy.createResolutionWorldBuilder( |
841 nativeBasicData, | 846 nativeBasicData, |
842 _nativeDataBuilder, | 847 _nativeDataBuilder, |
843 interceptorDataBuilder, | 848 interceptorDataBuilder, |
844 _backendUsageBuilder, | 849 _backendUsageBuilder, |
845 const OpenWorldStrategy()), | 850 const OpenWorldStrategy()), |
846 compiler.frontendStrategy.createResolutionWorkItemBuilder( | 851 compiler.frontendStrategy.createResolutionWorkItemBuilder( |
847 nativeBasicData, _nativeDataBuilder, impactTransformer)); | 852 nativeBasicData, _nativeDataBuilder, impactTransformer)); |
848 } | 853 } |
849 | 854 |
850 /// Creates an [Enqueuer] for code generation specific to this backend. | 855 /// Creates an [Enqueuer] for code generation specific to this backend. |
851 CodegenEnqueuer createCodegenEnqueuer( | 856 CodegenEnqueuer createCodegenEnqueuer( |
852 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) { | 857 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) { |
| 858 ElementEnvironment elementEnvironment = closedWorld.elementEnvironment; |
853 CommonElements commonElements = closedWorld.commonElements; | 859 CommonElements commonElements = closedWorld.commonElements; |
854 _typeVariableCodegenAnalysis = new TypeVariableCodegenAnalysis( | 860 _typeVariableCodegenAnalysis = new TypeVariableCodegenAnalysis( |
855 compiler.elementEnvironment, this, commonElements, mirrorsData); | 861 closedWorld.elementEnvironment, this, commonElements, mirrorsData); |
856 _lookupMapAnalysis = new LookupMapAnalysis( | 862 _lookupMapAnalysis = new LookupMapAnalysis( |
857 reporter, | 863 reporter, |
858 constantSystem, | 864 constantSystem, |
859 constants, | 865 constants, |
860 compiler.elementEnvironment, | 866 elementEnvironment, |
861 commonElements, | 867 commonElements, |
862 lookupMapResolutionAnalysis); | 868 lookupMapResolutionAnalysis); |
863 _mirrorsCodegenAnalysis = mirrorsResolutionAnalysis.close(); | 869 _mirrorsCodegenAnalysis = mirrorsResolutionAnalysis.close(); |
864 _customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis( | 870 _customElementsCodegenAnalysis = new CustomElementsCodegenAnalysis( |
865 constantSystem, | 871 constantSystem, commonElements, elementEnvironment, nativeBasicData); |
866 commonElements, | |
867 compiler.elementEnvironment, | |
868 nativeBasicData); | |
869 _nativeCodegenEnqueuer = new native.NativeCodegenEnqueuer( | 872 _nativeCodegenEnqueuer = new native.NativeCodegenEnqueuer( |
870 compiler.options, | 873 compiler.options, |
871 compiler.elementEnvironment, | 874 elementEnvironment, |
872 commonElements, | 875 commonElements, |
873 compiler.frontendStrategy.dartTypes, | 876 compiler.frontendStrategy.dartTypes, |
874 emitter, | 877 emitter, |
875 _nativeResolutionEnqueuer, | 878 _nativeResolutionEnqueuer, |
876 closedWorld.nativeData); | 879 closedWorld.nativeData); |
877 return new CodegenEnqueuer( | 880 return new CodegenEnqueuer( |
878 task, | 881 task, |
879 compiler.options, | 882 compiler.options, |
880 const TreeShakingEnqueuerStrategy(), | 883 const TreeShakingEnqueuerStrategy(), |
881 compiler.backendStrategy.createCodegenWorldBuilder( | 884 compiler.backendStrategy.createCodegenWorldBuilder( |
882 nativeBasicData, closedWorld, const TypeMaskStrategy()), | 885 nativeBasicData, closedWorld, const TypeMaskStrategy()), |
883 compiler.backendStrategy.createCodegenWorkItemBuilder(closedWorld), | 886 compiler.backendStrategy.createCodegenWorkItemBuilder(closedWorld), |
884 new CodegenEnqueuerListener( | 887 new CodegenEnqueuerListener( |
885 compiler.elementEnvironment, | 888 elementEnvironment, |
886 commonElements, | 889 commonElements, |
887 impacts, | 890 impacts, |
888 closedWorld.backendUsage, | 891 closedWorld.backendUsage, |
889 rtiNeed, | 892 rtiNeed, |
890 customElementsCodegenAnalysis, | 893 customElementsCodegenAnalysis, |
891 typeVariableCodegenAnalysis, | 894 typeVariableCodegenAnalysis, |
892 lookupMapAnalysis, | 895 lookupMapAnalysis, |
893 mirrorsCodegenAnalysis, | 896 mirrorsCodegenAnalysis, |
894 nativeCodegenEnqueuer)); | 897 nativeCodegenEnqueuer)); |
895 } | 898 } |
(...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1056 | 1059 |
1057 /// Called when the compiler starts running the codegen enqueuer. The | 1060 /// Called when the compiler starts running the codegen enqueuer. The |
1058 /// [WorldImpact] of enabled backend features is returned. | 1061 /// [WorldImpact] of enabled backend features is returned. |
1059 WorldImpact onCodegenStart( | 1062 WorldImpact onCodegenStart( |
1060 ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder) { | 1063 ClosedWorld closedWorld, CodegenWorldBuilder codegenWorldBuilder) { |
1061 _oneShotInterceptorData = new OneShotInterceptorData( | 1064 _oneShotInterceptorData = new OneShotInterceptorData( |
1062 closedWorld.interceptorData, closedWorld.commonElements); | 1065 closedWorld.interceptorData, closedWorld.commonElements); |
1063 _namer = determineNamer(closedWorld, codegenWorldBuilder); | 1066 _namer = determineNamer(closedWorld, codegenWorldBuilder); |
1064 tracer = new Tracer(closedWorld, namer, compiler); | 1067 tracer = new Tracer(closedWorld, namer, compiler); |
1065 _rtiEncoder = _namer.rtiEncoder = new RuntimeTypesEncoderImpl( | 1068 _rtiEncoder = _namer.rtiEncoder = new RuntimeTypesEncoderImpl( |
1066 namer, compiler.elementEnvironment, closedWorld.commonElements); | 1069 namer, closedWorld.elementEnvironment, closedWorld.commonElements); |
1067 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder); | 1070 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder); |
1068 _codegenImpactTransformer = new CodegenImpactTransformer( | 1071 _codegenImpactTransformer = new CodegenImpactTransformer( |
1069 compiler.options, | 1072 compiler.options, |
1070 compiler.elementEnvironment, | 1073 closedWorld.elementEnvironment, |
1071 closedWorld.commonElements, | 1074 closedWorld.commonElements, |
1072 impacts, | 1075 impacts, |
1073 checkedModeHelpers, | 1076 checkedModeHelpers, |
1074 closedWorld.nativeData, | 1077 closedWorld.nativeData, |
1075 closedWorld.backendUsage, | 1078 closedWorld.backendUsage, |
1076 rtiNeed, | 1079 rtiNeed, |
1077 nativeCodegenEnqueuer, | 1080 nativeCodegenEnqueuer, |
1078 namer, | 1081 namer, |
1079 oneShotInterceptorData, | 1082 oneShotInterceptorData, |
1080 lookupMapAnalysis, | 1083 lookupMapAnalysis, |
(...skipping 21 matching lines...) Expand all Loading... |
1102 if (canonicalUri == Uris.dart__js_helper || | 1105 if (canonicalUri == Uris.dart__js_helper || |
1103 canonicalUri == Uris.dart__interceptors) { | 1106 canonicalUri == Uris.dart__interceptors) { |
1104 return true; | 1107 return true; |
1105 } | 1108 } |
1106 return false; | 1109 return false; |
1107 } | 1110 } |
1108 | 1111 |
1109 /// Process backend specific annotations. | 1112 /// Process backend specific annotations. |
1110 // TODO(johnniwinther): Merge this with [AnnotationProcessor] and use | 1113 // TODO(johnniwinther): Merge this with [AnnotationProcessor] and use |
1111 // [ElementEnvironment.getMemberMetadata] in [AnnotationProcessor]. | 1114 // [ElementEnvironment.getMemberMetadata] in [AnnotationProcessor]. |
1112 void processAnnotations(CommonElements commonElements, MemberEntity element, | 1115 void processAnnotations( |
| 1116 ElementEnvironment elementEnvironment, |
| 1117 CommonElements commonElements, |
| 1118 MemberEntity element, |
1113 ClosedWorldRefiner closedWorldRefiner) { | 1119 ClosedWorldRefiner closedWorldRefiner) { |
1114 if (element is MemberElement && element.isMalformed) { | 1120 if (element is MemberElement && element.isMalformed) { |
1115 // Elements that are marked as malformed during parsing or resolution | 1121 // Elements that are marked as malformed during parsing or resolution |
1116 // might be registered here. These should just be ignored. | 1122 // might be registered here. These should just be ignored. |
1117 return; | 1123 return; |
1118 } | 1124 } |
1119 | 1125 |
1120 if (element.isFunction || element.isConstructor) { | 1126 if (element.isFunction || element.isConstructor) { |
1121 if (optimizerHints.noInline(element)) { | 1127 if (optimizerHints.noInline(element)) { |
1122 inlineCache.markAsNonInlinable(element); | 1128 inlineCache.markAsNonInlinable(element); |
1123 } | 1129 } |
1124 } | 1130 } |
1125 if (element.isField) return; | 1131 if (element.isField) return; |
1126 FunctionEntity method = element; | 1132 FunctionEntity method = element; |
1127 | 1133 |
1128 LibraryEntity library = method.library; | 1134 LibraryEntity library = method.library; |
1129 if (library.canonicalUri.scheme != 'dart' && | 1135 if (library.canonicalUri.scheme != 'dart' && |
1130 !canLibraryUseNative(library)) { | 1136 !canLibraryUseNative(library)) { |
1131 return; | 1137 return; |
1132 } | 1138 } |
1133 bool hasNoInline = false; | 1139 bool hasNoInline = false; |
1134 bool hasForceInline = false; | 1140 bool hasForceInline = false; |
1135 bool hasNoThrows = false; | 1141 bool hasNoThrows = false; |
1136 bool hasNoSideEffects = false; | 1142 bool hasNoSideEffects = false; |
1137 for (ConstantValue constantValue | 1143 for (ConstantValue constantValue |
1138 in compiler.elementEnvironment.getMemberMetadata(method)) { | 1144 in elementEnvironment.getMemberMetadata(method)) { |
1139 if (!constantValue.isConstructedObject) continue; | 1145 if (!constantValue.isConstructedObject) continue; |
1140 ObjectConstantValue value = constantValue; | 1146 ObjectConstantValue value = constantValue; |
1141 ClassEntity cls = value.type.element; | 1147 ClassEntity cls = value.type.element; |
1142 if (cls == commonElements.forceInlineClass) { | 1148 if (cls == commonElements.forceInlineClass) { |
1143 hasForceInline = true; | 1149 hasForceInline = true; |
1144 if (VERBOSE_OPTIMIZER_HINTS) { | 1150 if (VERBOSE_OPTIMIZER_HINTS) { |
1145 reporter.reportHintMessage( | 1151 reporter.reportHintMessage( |
1146 method, MessageKind.GENERIC, {'text': "Must inline"}); | 1152 method, MessageKind.GENERIC, {'text': "Must inline"}); |
1147 } | 1153 } |
1148 inlineCache.markAsMustInline(method); | 1154 inlineCache.markAsMustInline(method); |
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1387 | 1393 |
1388 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { | 1394 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { |
1389 return !selector.isGetter; | 1395 return !selector.isGetter; |
1390 } | 1396 } |
1391 | 1397 |
1392 /// Returns `true` if [member] is called from a subclass via `super`. | 1398 /// Returns `true` if [member] is called from a subclass via `super`. |
1393 bool isAliasedSuperMember(MemberEntity member) { | 1399 bool isAliasedSuperMember(MemberEntity member) { |
1394 return _aliasedSuperMembers.contains(member); | 1400 return _aliasedSuperMembers.contains(member); |
1395 } | 1401 } |
1396 } | 1402 } |
OLD | NEW |