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; |
(...skipping 668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
679 /// 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 |
680 /// backend calls, but the optimizations don't see those calls. | 680 /// backend calls, but the optimizations don't see those calls. |
681 bool canFunctionParametersBeUsedForGlobalOptimizations( | 681 bool canFunctionParametersBeUsedForGlobalOptimizations( |
682 FunctionElement element, ClosedWorld closedWorld) { | 682 FunctionElement element, ClosedWorld closedWorld) { |
683 if (element.isLocal) return true; | 683 if (element.isLocal) return true; |
684 MethodElement method = element; | 684 MethodElement method = element; |
685 return !closedWorld.backendUsage.isFunctionUsedByBackend(method) && | 685 return !closedWorld.backendUsage.isFunctionUsedByBackend(method) && |
686 !mirrorsData.invokedReflectively(method); | 686 !mirrorsData.invokedReflectively(method); |
687 } | 687 } |
688 | 688 |
689 bool operatorEqHandlesNullArgument(FunctionEntity operatorEqfunction) { | |
690 return specialOperatorEqClasses.contains(operatorEqfunction.enclosingClass); | |
691 } | |
692 | |
693 void validateInterceptorImplementsAllObjectMethods( | 689 void validateInterceptorImplementsAllObjectMethods( |
694 ClassEntity interceptorClass) { | 690 ClassEntity interceptorClass) { |
695 if (interceptorClass == null) return; | 691 if (interceptorClass == null) return; |
696 ClassEntity objectClass = frontendStrategy.commonElements.objectClass; | 692 ClassEntity objectClass = frontendStrategy.commonElements.objectClass; |
697 frontendStrategy.elementEnvironment.forEachClassMember(objectClass, | 693 frontendStrategy.elementEnvironment.forEachClassMember(objectClass, |
698 (_, MemberEntity member) { | 694 (_, MemberEntity member) { |
699 if (member.isConstructor) return; | 695 if (member.isConstructor) return; |
700 MemberEntity interceptorMember = frontendStrategy.elementEnvironment | 696 MemberEntity interceptorMember = frontendStrategy.elementEnvironment |
701 .lookupClassMember(interceptorClass, member.name); | 697 .lookupClassMember(interceptorClass, member.name); |
702 // Interceptors must override all Object methods due to calling convention | 698 // Interceptors must override all Object methods due to calling convention |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1048 void onLibrariesLoaded( | 1044 void onLibrariesLoaded( |
1049 CommonElements commonElements, LoadedLibraries loadedLibraries) { | 1045 CommonElements commonElements, LoadedLibraries loadedLibraries) { |
1050 if (loadedLibraries.containsLibrary(Uris.dart_core)) { | 1046 if (loadedLibraries.containsLibrary(Uris.dart_core)) { |
1051 assert(loadedLibraries.containsLibrary(Uris.dart_core)); | 1047 assert(loadedLibraries.containsLibrary(Uris.dart_core)); |
1052 assert(loadedLibraries.containsLibrary(Uris.dart__interceptors)); | 1048 assert(loadedLibraries.containsLibrary(Uris.dart__interceptors)); |
1053 assert(loadedLibraries.containsLibrary(Uris.dart__js_helper)); | 1049 assert(loadedLibraries.containsLibrary(Uris.dart__js_helper)); |
1054 | 1050 |
1055 // These methods are overwritten with generated versions. | 1051 // These methods are overwritten with generated versions. |
1056 inlineCache.markAsNonInlinable(commonElements.getInterceptorMethod, | 1052 inlineCache.markAsNonInlinable(commonElements.getInterceptorMethod, |
1057 insideLoop: true); | 1053 insideLoop: true); |
1058 | |
1059 specialOperatorEqClasses | |
1060 ..add(commonElements.objectClass) | |
1061 ..add(commonElements.jsInterceptorClass) | |
1062 ..add(commonElements.jsNullClass); | |
1063 } | 1054 } |
1064 } | 1055 } |
1065 | 1056 |
1066 /// Called when the compiler starts running the codegen enqueuer. The | 1057 /// Called when the compiler starts running the codegen enqueuer. The |
1067 /// [WorldImpact] of enabled backend features is returned. | 1058 /// [WorldImpact] of enabled backend features is returned. |
1068 WorldImpact onCodegenStart(ClosedWorld closedWorld, | 1059 WorldImpact onCodegenStart(ClosedWorld closedWorld, |
1069 CodegenWorldBuilder codegenWorldBuilder, Sorter sorter) { | 1060 CodegenWorldBuilder codegenWorldBuilder, Sorter sorter) { |
1070 functionCompiler.onCodegenStart(); | 1061 functionCompiler.onCodegenStart(); |
1071 _oneShotInterceptorData = new OneShotInterceptorData( | 1062 _oneShotInterceptorData = new OneShotInterceptorData( |
1072 closedWorld.interceptorData, closedWorld.commonElements); | 1063 closedWorld.interceptorData, closedWorld.commonElements); |
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1400 | 1391 |
1401 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { | 1392 bool canUseAliasedSuperMember(MemberEntity member, Selector selector) { |
1402 return !selector.isGetter; | 1393 return !selector.isGetter; |
1403 } | 1394 } |
1404 | 1395 |
1405 /// Returns `true` if [member] is called from a subclass via `super`. | 1396 /// Returns `true` if [member] is called from a subclass via `super`. |
1406 bool isAliasedSuperMember(MemberEntity member) { | 1397 bool isAliasedSuperMember(MemberEntity member) { |
1407 return _aliasedSuperMembers.contains(member); | 1398 return _aliasedSuperMembers.contains(member); |
1408 } | 1399 } |
1409 } | 1400 } |
OLD | NEW |