Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(66)

Side by Side Diff: pkg/compiler/lib/src/js_backend/backend.dart

Issue 2875313002: Access BackendUsage through ClosedWorld (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 CodegenImpact, CodegenWorkItem; 10 import '../common/codegen.dart' show CodegenImpact, CodegenWorkItem;
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
435 /// Interface for serialization of backend specific data. 435 /// Interface for serialization of backend specific data.
436 JavaScriptBackendSerialization serialization; 436 JavaScriptBackendSerialization serialization;
437 437
438 NativeDataBuilderImpl _nativeDataBuilder; 438 NativeDataBuilderImpl _nativeDataBuilder;
439 final NativeBasicDataBuilderImpl _nativeBasicDataBuilder = 439 final NativeBasicDataBuilderImpl _nativeBasicDataBuilder =
440 new NativeBasicDataBuilderImpl(); 440 new NativeBasicDataBuilderImpl();
441 NativeBasicDataImpl _nativeBasicData; 441 NativeBasicDataImpl _nativeBasicData;
442 NativeDataBuilder get nativeDataBuilder => _nativeDataBuilder; 442 NativeDataBuilder get nativeDataBuilder => _nativeDataBuilder;
443 final NativeDataResolver _nativeDataResolver; 443 final NativeDataResolver _nativeDataResolver;
444 OneShotInterceptorData _oneShotInterceptorData; 444 OneShotInterceptorData _oneShotInterceptorData;
445 BackendUsage _backendUsage;
446 BackendUsageBuilder _backendUsageBuilder; 445 BackendUsageBuilder _backendUsageBuilder;
447 MirrorsDataImpl _mirrorsData; 446 MirrorsDataImpl _mirrorsData;
448 CheckedModeHelpers _checkedModeHelpers; 447 CheckedModeHelpers _checkedModeHelpers;
449 448
450 final SuperMemberData superMemberData = new SuperMemberData(); 449 final SuperMemberData superMemberData = new SuperMemberData();
451 450
452 native.NativeResolutionEnqueuer _nativeResolutionEnqueuer; 451 native.NativeResolutionEnqueuer _nativeResolutionEnqueuer;
453 native.NativeCodegenEnqueuer _nativeCodegenEnqueuer; 452 native.NativeCodegenEnqueuer _nativeCodegenEnqueuer;
454 453
455 BackendImpacts impacts; 454 BackendImpacts impacts;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 compiler.frontEndStrategy.createRuntimeTypesNeedBuilder() { 500 compiler.frontEndStrategy.createRuntimeTypesNeedBuilder() {
502 _target = new JavaScriptBackendTarget(this); 501 _target = new JavaScriptBackendTarget(this);
503 impacts = new BackendImpacts(compiler.options, commonElements); 502 impacts = new BackendImpacts(compiler.options, commonElements);
504 _mirrorsData = compiler.frontEndStrategy.createMirrorsDataBuilder(); 503 _mirrorsData = compiler.frontEndStrategy.createMirrorsDataBuilder();
505 _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements); 504 _backendUsageBuilder = new BackendUsageBuilderImpl(commonElements);
506 _checkedModeHelpers = new CheckedModeHelpers(commonElements); 505 _checkedModeHelpers = new CheckedModeHelpers(commonElements);
507 emitter = 506 emitter =
508 new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter); 507 new CodeEmitterTask(compiler, generateSourceMap, useStartupEmitter);
509 508
510 _typeVariableResolutionAnalysis = new TypeVariableResolutionAnalysis( 509 _typeVariableResolutionAnalysis = new TypeVariableResolutionAnalysis(
511 compiler.elementEnvironment, impacts, backendUsageBuilder); 510 compiler.elementEnvironment, impacts, _backendUsageBuilder);
512 jsInteropAnalysis = new JsInteropAnalysis(this); 511 jsInteropAnalysis = new JsInteropAnalysis(this);
513 _mirrorsResolutionAnalysis = 512 _mirrorsResolutionAnalysis =
514 compiler.frontEndStrategy.createMirrorsResolutionAnalysis(this); 513 compiler.frontEndStrategy.createMirrorsResolutionAnalysis(this);
515 lookupMapResolutionAnalysis = 514 lookupMapResolutionAnalysis =
516 new LookupMapResolutionAnalysis(reporter, compiler.elementEnvironment); 515 new LookupMapResolutionAnalysis(reporter, compiler.elementEnvironment);
517 516
518 noSuchMethodRegistry = new NoSuchMethodRegistry( 517 noSuchMethodRegistry = new NoSuchMethodRegistry(
519 commonElements, compiler.frontEndStrategy.createNoSuchMethodResolver()); 518 commonElements, compiler.frontEndStrategy.createNoSuchMethodResolver());
520 kernelTask = new KernelTask(compiler); 519 kernelTask = new KernelTask(compiler);
521 patchResolverTask = new PatchResolverTask(compiler); 520 patchResolverTask = new PatchResolverTask(compiler);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
599 message: "LookupMapAnalysis has not been created yet.")); 598 message: "LookupMapAnalysis has not been created yet."));
600 return _lookupMapAnalysis; 599 return _lookupMapAnalysis;
601 } 600 }
602 601
603 OneShotInterceptorData get oneShotInterceptorData { 602 OneShotInterceptorData get oneShotInterceptorData {
604 assert(invariant(NO_LOCATION_SPANNABLE, _oneShotInterceptorData != null, 603 assert(invariant(NO_LOCATION_SPANNABLE, _oneShotInterceptorData != null,
605 message: "OneShotInterceptorData has not been prepared yet.")); 604 message: "OneShotInterceptorData has not been prepared yet."));
606 return _oneShotInterceptorData; 605 return _oneShotInterceptorData;
607 } 606 }
608 607
609 BackendUsage get backendUsage {
610 assert(invariant(NO_LOCATION_SPANNABLE, _backendUsage != null,
611 message: "BackendUsage has not been computed yet."));
612 return _backendUsage;
613 }
614
615 BackendUsageBuilder get backendUsageBuilder {
616 assert(invariant(NO_LOCATION_SPANNABLE, _backendUsage == null,
617 message: "BackendUsage has already been computed."));
618 return _backendUsageBuilder;
619 }
620
621 RuntimeTypesNeed get rtiNeed { 608 RuntimeTypesNeed get rtiNeed {
622 assert(invariant(NO_LOCATION_SPANNABLE, _rtiNeed != null, 609 assert(invariant(NO_LOCATION_SPANNABLE, _rtiNeed != null,
623 message: "RuntimeTypesNeed has not been computed yet.")); 610 message: "RuntimeTypesNeed has not been computed yet."));
624 return _rtiNeed; 611 return _rtiNeed;
625 } 612 }
626 613
627 RuntimeTypesNeedBuilder get rtiNeedBuilder { 614 RuntimeTypesNeedBuilder get rtiNeedBuilder {
628 assert(invariant(NO_LOCATION_SPANNABLE, _rtiNeed == null, 615 assert(invariant(NO_LOCATION_SPANNABLE, _rtiNeed == null,
629 message: "RuntimeTypesNeed has already been computed.")); 616 message: "RuntimeTypesNeed has already been computed."));
630 return _rtiNeedBuilder; 617 return _rtiNeedBuilder;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 ? new FrequencyBasedNamer(closedWorld, codegenWorldBuilder) 671 ? new FrequencyBasedNamer(closedWorld, codegenWorldBuilder)
685 : new MinifyNamer(closedWorld, codegenWorldBuilder) 672 : new MinifyNamer(closedWorld, codegenWorldBuilder)
686 : new Namer(closedWorld, codegenWorldBuilder); 673 : new Namer(closedWorld, codegenWorldBuilder);
687 } 674 }
688 675
689 /// Returns true if global optimizations such as type inferencing can apply to 676 /// Returns true if global optimizations such as type inferencing can apply to
690 /// the field [element]. 677 /// the field [element].
691 /// 678 ///
692 /// One category of elements that do not apply is runtime helpers that the 679 /// One category of elements that do not apply is runtime helpers that the
693 /// backend calls, but the optimizations don't see those calls. 680 /// backend calls, but the optimizations don't see those calls.
694 bool canFieldBeUsedForGlobalOptimizations(FieldElement element) { 681 bool canFieldBeUsedForGlobalOptimizations(
695 return !backendUsage.isFieldUsedByBackend(element) && 682 FieldElement element, ClosedWorld closedWorld) {
683 return !closedWorld.backendUsage.isFieldUsedByBackend(element) &&
696 !mirrorsData.invokedReflectively(element); 684 !mirrorsData.invokedReflectively(element);
697 } 685 }
698 686
699 /// Returns true if global optimizations such as type inferencing can apply to 687 /// Returns true if global optimizations such as type inferencing can apply to
700 /// the parameter [element]. 688 /// the parameter [element].
701 /// 689 ///
702 /// One category of elements that do not apply is runtime helpers that the 690 /// One category of elements that do not apply is runtime helpers that the
703 /// backend calls, but the optimizations don't see those calls. 691 /// backend calls, but the optimizations don't see those calls.
704 bool canFunctionParametersBeUsedForGlobalOptimizations( 692 bool canFunctionParametersBeUsedForGlobalOptimizations(
705 FunctionElement element) { 693 FunctionElement element, ClosedWorld closedWorld) {
706 if (element.isLocal) return true; 694 if (element.isLocal) return true;
707 MethodElement method = element; 695 MethodElement method = element;
708 return !backendUsage.isFunctionUsedByBackend(method) && 696 return !closedWorld.backendUsage.isFunctionUsedByBackend(method) &&
709 !mirrorsData.invokedReflectively(method); 697 !mirrorsData.invokedReflectively(method);
710 } 698 }
711 699
712 /// Maps compile-time classes to their runtime class. The runtime class is 700 /// Maps compile-time classes to their runtime class. The runtime class is
713 /// always a superclass or the class itself. 701 /// always a superclass or the class itself.
714 ClassElement getRuntimeClass(ClassElement class_) { 702 ClassElement getRuntimeClass(ClassElement class_) {
715 if (class_.isSubclassOf(commonElements.jsIntClass)) 703 if (class_.isSubclassOf(commonElements.jsIntClass))
716 return commonElements.jsIntClass; 704 return commonElements.jsIntClass;
717 if (class_.isSubclassOf(commonElements.jsArrayClass)) 705 if (class_.isSubclassOf(commonElements.jsArrayClass))
718 return commonElements.jsArrayClass; 706 return commonElements.jsArrayClass;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 validateInterceptorImplementsAllObjectMethods( 743 validateInterceptorImplementsAllObjectMethods(
756 commonElements.jsInterceptorClass); 744 commonElements.jsInterceptorClass);
757 // The null-interceptor must also implement *all* methods. 745 // The null-interceptor must also implement *all* methods.
758 validateInterceptorImplementsAllObjectMethods(commonElements.jsNullClass); 746 validateInterceptorImplementsAllObjectMethods(commonElements.jsNullClass);
759 } 747 }
760 748
761 /// Called when the resolution queue has been closed. 749 /// Called when the resolution queue has been closed.
762 void onResolutionEnd() { 750 void onResolutionEnd() {
763 compiler.frontEndStrategy.annotationProcesser 751 compiler.frontEndStrategy.annotationProcesser
764 .processJsInteropAnnotations(nativeBasicData, nativeDataBuilder); 752 .processJsInteropAnnotations(nativeBasicData, nativeDataBuilder);
765 _backendUsage = backendUsageBuilder.close();
766 } 753 }
767 754
768 /// Called when the closed world from resolution has been computed. 755 /// Called when the closed world from resolution has been computed.
769 void onResolutionClosedWorld( 756 void onResolutionClosedWorld(
770 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) { 757 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) {
771 for (MemberEntity entity 758 for (MemberEntity entity
772 in compiler.enqueuer.resolution.processedEntities) { 759 in compiler.enqueuer.resolution.processedEntities) {
773 processAnnotations(entity, closedWorldRefiner); 760 processAnnotations(entity, closedWorldRefiner);
774 } 761 }
775 mirrorsDataBuilder.computeMembersNeededForReflection( 762 mirrorsDataBuilder.computeMembersNeededForReflection(
776 compiler.enqueuer.resolution.worldBuilder, closedWorld); 763 compiler.enqueuer.resolution.worldBuilder, closedWorld);
777 _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed( 764 _rtiNeed = rtiNeedBuilder.computeRuntimeTypesNeed(
778 compiler.enqueuer.resolution.worldBuilder, 765 compiler.enqueuer.resolution.worldBuilder, closedWorld, compiler.types,
779 closedWorld,
780 compiler.types,
781 commonElements,
782 _backendUsage,
783 enableTypeAssertions: compiler.options.enableTypeAssertions); 766 enableTypeAssertions: compiler.options.enableTypeAssertions);
784 mirrorsResolutionAnalysis.onResolutionComplete(); 767 mirrorsResolutionAnalysis.onResolutionComplete();
785 } 768 }
786 769
787 void onTypeInferenceComplete(GlobalTypeInferenceResults results) { 770 void onTypeInferenceComplete(GlobalTypeInferenceResults results) {
788 noSuchMethodRegistry.onTypeInferenceComplete(results); 771 noSuchMethodRegistry.onTypeInferenceComplete(results);
789 } 772 }
790 773
791 /// Called when resolving a call to a foreign function. 774 /// Called when resolving a call to a foreign function.
792 native.NativeBehavior resolveForeignCall(Send node, Element element, 775 native.NativeBehavior resolveForeignCall(Send node, Element element,
(...skipping 29 matching lines...) Expand all
822 805
823 ResolutionEnqueuer createResolutionEnqueuer( 806 ResolutionEnqueuer createResolutionEnqueuer(
824 CompilerTask task, Compiler compiler) { 807 CompilerTask task, Compiler compiler) {
825 _nativeBasicData = 808 _nativeBasicData =
826 nativeBasicDataBuilder.close(compiler.elementEnvironment); 809 nativeBasicDataBuilder.close(compiler.elementEnvironment);
827 _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer( 810 _nativeResolutionEnqueuer = new native.NativeResolutionEnqueuer(
828 compiler.options, 811 compiler.options,
829 compiler.elementEnvironment, 812 compiler.elementEnvironment,
830 commonElements, 813 commonElements,
831 compiler.frontEndStrategy.dartTypes, 814 compiler.frontEndStrategy.dartTypes,
832 backendUsageBuilder, 815 _backendUsageBuilder,
833 compiler.frontEndStrategy.createNativeClassFinder(nativeBasicData)); 816 compiler.frontEndStrategy.createNativeClassFinder(nativeBasicData));
834 _nativeDataBuilder = new NativeDataBuilderImpl(nativeBasicData); 817 _nativeDataBuilder = new NativeDataBuilderImpl(nativeBasicData);
835 _customElementsResolutionAnalysis = compiler.frontEndStrategy 818 _customElementsResolutionAnalysis = compiler.frontEndStrategy
836 .createCustomElementsResolutionAnalysis( 819 .createCustomElementsResolutionAnalysis(
837 nativeBasicData, backendUsageBuilder); 820 nativeBasicData, _backendUsageBuilder);
838 impactTransformer = new JavaScriptImpactTransformer( 821 impactTransformer = new JavaScriptImpactTransformer(
839 compiler.options, 822 compiler.options,
840 compiler.elementEnvironment, 823 compiler.elementEnvironment,
841 commonElements, 824 commonElements,
842 impacts, 825 impacts,
843 nativeBasicData, 826 nativeBasicData,
844 _nativeResolutionEnqueuer, 827 _nativeResolutionEnqueuer,
845 backendUsageBuilder, 828 _backendUsageBuilder,
846 mirrorsDataBuilder, 829 mirrorsDataBuilder,
847 customElementsResolutionAnalysis, 830 customElementsResolutionAnalysis,
848 rtiNeedBuilder); 831 rtiNeedBuilder);
849 InterceptorDataBuilder interceptorDataBuilder = 832 InterceptorDataBuilder interceptorDataBuilder =
850 new InterceptorDataBuilderImpl( 833 new InterceptorDataBuilderImpl(
851 nativeBasicData, compiler.elementEnvironment, commonElements); 834 nativeBasicData, compiler.elementEnvironment, commonElements);
852 return new ResolutionEnqueuer( 835 return new ResolutionEnqueuer(
853 task, 836 task,
854 compiler.options, 837 compiler.options,
855 compiler.reporter, 838 compiler.reporter,
856 compiler.options.analyzeOnly && compiler.options.analyzeMain 839 compiler.options.analyzeOnly && compiler.options.analyzeMain
857 ? const DirectEnqueuerStrategy() 840 ? const DirectEnqueuerStrategy()
858 : const TreeShakingEnqueuerStrategy(), 841 : const TreeShakingEnqueuerStrategy(),
859 new ResolutionEnqueuerListener( 842 new ResolutionEnqueuerListener(
860 compiler.options, 843 compiler.options,
861 compiler.elementEnvironment, 844 compiler.elementEnvironment,
862 commonElements, 845 commonElements,
863 impacts, 846 impacts,
864 nativeBasicData, 847 nativeBasicData,
865 interceptorDataBuilder, 848 interceptorDataBuilder,
866 backendUsageBuilder, 849 _backendUsageBuilder,
867 rtiNeedBuilder, 850 rtiNeedBuilder,
868 mirrorsDataBuilder, 851 mirrorsDataBuilder,
869 noSuchMethodRegistry, 852 noSuchMethodRegistry,
870 customElementsResolutionAnalysis, 853 customElementsResolutionAnalysis,
871 lookupMapResolutionAnalysis, 854 lookupMapResolutionAnalysis,
872 mirrorsResolutionAnalysis, 855 mirrorsResolutionAnalysis,
873 typeVariableResolutionAnalysis, 856 typeVariableResolutionAnalysis,
874 _nativeResolutionEnqueuer, 857 _nativeResolutionEnqueuer,
875 compiler.deferredLoadTask, 858 compiler.deferredLoadTask,
876 kernelTask), 859 kernelTask),
877 compiler.frontEndStrategy.createResolutionWorldBuilder( 860 compiler.frontEndStrategy.createResolutionWorldBuilder(
878 nativeBasicData, 861 nativeBasicData,
879 _nativeDataBuilder, 862 _nativeDataBuilder,
880 interceptorDataBuilder, 863 interceptorDataBuilder,
864 _backendUsageBuilder,
881 const OpenWorldStrategy()), 865 const OpenWorldStrategy()),
882 compiler.frontEndStrategy.createResolutionWorkItemBuilder( 866 compiler.frontEndStrategy.createResolutionWorkItemBuilder(
883 nativeBasicData, _nativeDataBuilder, impactTransformer)); 867 nativeBasicData, _nativeDataBuilder, impactTransformer));
884 } 868 }
885 869
886 /// Creates an [Enqueuer] for code generation specific to this backend. 870 /// Creates an [Enqueuer] for code generation specific to this backend.
887 CodegenEnqueuer createCodegenEnqueuer( 871 CodegenEnqueuer createCodegenEnqueuer(
888 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) { 872 CompilerTask task, Compiler compiler, ClosedWorld closedWorld) {
889 _typeVariableCodegenAnalysis = new TypeVariableCodegenAnalysis( 873 _typeVariableCodegenAnalysis = new TypeVariableCodegenAnalysis(
890 compiler.elementEnvironment, this, commonElements, mirrorsData); 874 compiler.elementEnvironment, this, commonElements, mirrorsData);
(...skipping 19 matching lines...) Expand all
910 task, 894 task,
911 compiler.options, 895 compiler.options,
912 const TreeShakingEnqueuerStrategy(), 896 const TreeShakingEnqueuerStrategy(),
913 new CodegenWorldBuilderImpl( 897 new CodegenWorldBuilderImpl(
914 nativeBasicData, closedWorld, constants, const TypeMaskStrategy()), 898 nativeBasicData, closedWorld, constants, const TypeMaskStrategy()),
915 new CodegenWorkItemBuilder(this, closedWorld, compiler.options), 899 new CodegenWorkItemBuilder(this, closedWorld, compiler.options),
916 new CodegenEnqueuerListener( 900 new CodegenEnqueuerListener(
917 compiler.elementEnvironment, 901 compiler.elementEnvironment,
918 commonElements, 902 commonElements,
919 impacts, 903 impacts,
920 backendUsage, 904 closedWorld.backendUsage,
921 rtiNeed, 905 rtiNeed,
922 customElementsCodegenAnalysis, 906 customElementsCodegenAnalysis,
923 typeVariableCodegenAnalysis, 907 typeVariableCodegenAnalysis,
924 lookupMapAnalysis, 908 lookupMapAnalysis,
925 mirrorsCodegenAnalysis, 909 mirrorsCodegenAnalysis,
926 nativeCodegenEnqueuer)); 910 nativeCodegenEnqueuer));
927 } 911 }
928 912
929 WorldImpact codegen(CodegenWorkItem work, ClosedWorld closedWorld) { 913 WorldImpact codegen(CodegenWorkItem work, ClosedWorld closedWorld) {
930 MemberElement element = work.element; 914 MemberElement element = work.element;
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
1126 _rtiEncoder = 1110 _rtiEncoder =
1127 _namer.rtiEncoder = new _RuntimeTypesEncoder(namer, commonElements); 1111 _namer.rtiEncoder = new _RuntimeTypesEncoder(namer, commonElements);
1128 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder); 1112 emitter.createEmitter(namer, closedWorld, codegenWorldBuilder);
1129 _codegenImpactTransformer = new CodegenImpactTransformer( 1113 _codegenImpactTransformer = new CodegenImpactTransformer(
1130 compiler.options, 1114 compiler.options,
1131 compiler.elementEnvironment, 1115 compiler.elementEnvironment,
1132 commonElements, 1116 commonElements,
1133 impacts, 1117 impacts,
1134 checkedModeHelpers, 1118 checkedModeHelpers,
1135 closedWorld.nativeData, 1119 closedWorld.nativeData,
1136 backendUsage, 1120 closedWorld.backendUsage,
1137 rtiNeed, 1121 rtiNeed,
1138 nativeCodegenEnqueuer, 1122 nativeCodegenEnqueuer,
1139 namer, 1123 namer,
1140 oneShotInterceptorData, 1124 oneShotInterceptorData,
1141 lookupMapAnalysis, 1125 lookupMapAnalysis,
1142 rtiChecksBuilder); 1126 rtiChecksBuilder);
1143 return const WorldImpact(); 1127 return const WorldImpact();
1144 } 1128 }
1145 1129
1146 /// Called when code generation has been completed. 1130 /// Called when code generation has been completed.
(...skipping 302 matching lines...) Expand 10 before | Expand all | Expand 10 after
1449 1433
1450 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { 1434 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) {
1451 return !selector.isGetter; 1435 return !selector.isGetter;
1452 } 1436 }
1453 1437
1454 /// Returns `true` if [member] is called from a subclass via `super`. 1438 /// Returns `true` if [member] is called from a subclass via `super`.
1455 bool isAliasedSuperMember(MemberEntity member) { 1439 bool isAliasedSuperMember(MemberEntity member) {
1456 return _aliasedSuperMembers.contains(member); 1440 return _aliasedSuperMembers.contains(member);
1457 } 1441 }
1458 } 1442 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/inferrer/type_graph_nodes.dart ('k') | pkg/compiler/lib/src/js_backend/runtime_types.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698