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 875 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
886 // differences. | 886 // differences. |
887 assert(interceptorMember.enclosingClass == interceptorClass); | 887 assert(interceptorMember.enclosingClass == interceptorClass); |
888 }); | 888 }); |
889 } | 889 } |
890 | 890 |
891 void addInterceptorsForNativeClassMembers( | 891 void addInterceptorsForNativeClassMembers( |
892 ClassElement cls, Enqueuer enqueuer) { | 892 ClassElement cls, Enqueuer enqueuer) { |
893 if (enqueuer.isResolutionQueue) { | 893 if (enqueuer.isResolutionQueue) { |
894 cls.ensureResolved(compiler); | 894 cls.ensureResolved(compiler); |
895 cls.forEachMember((ClassElement classElement, Element member) { | 895 cls.forEachMember((ClassElement classElement, Element member) { |
896 if (member.name == Compiler.CALL_OPERATOR_NAME) { | 896 if (member.name == Identifiers.call) { |
897 compiler.reportError( | 897 compiler.reportError( |
898 member, | 898 member, |
899 MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS); | 899 MessageKind.CALL_NOT_SUPPORTED_ON_NATIVE_CLASS); |
900 return; | 900 return; |
901 } | 901 } |
902 if (member.isSynthesized) return; | 902 if (member.isSynthesized) return; |
903 // All methods on [Object] are shadowed by [Interceptor]. | 903 // All methods on [Object] are shadowed by [Interceptor]. |
904 if (classElement == compiler.objectClass) return; | 904 if (classElement == compiler.objectClass) return; |
905 Set<Element> set = interceptedElements.putIfAbsent( | 905 Set<Element> set = interceptedElements.putIfAbsent( |
906 member.name, () => new Set<Element>()); | 906 member.name, () => new Set<Element>()); |
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1295 enqueueClass(compiler.enqueuer.resolution, compiler.stringClass, registry); | 1295 enqueueClass(compiler.enqueuer.resolution, compiler.stringClass, registry); |
1296 } | 1296 } |
1297 | 1297 |
1298 void registerNoSuchMethod(FunctionElement noSuchMethod) { | 1298 void registerNoSuchMethod(FunctionElement noSuchMethod) { |
1299 noSuchMethodRegistry.registerNoSuchMethod(noSuchMethod); | 1299 noSuchMethodRegistry.registerNoSuchMethod(noSuchMethod); |
1300 } | 1300 } |
1301 | 1301 |
1302 void enableNoSuchMethod(Enqueuer world) { | 1302 void enableNoSuchMethod(Enqueuer world) { |
1303 enqueue(world, getCreateInvocationMirror(), compiler.globalDependencies); | 1303 enqueue(world, getCreateInvocationMirror(), compiler.globalDependencies); |
1304 world.registerInvocation( | 1304 world.registerInvocation( |
1305 new UniverseSelector(compiler.noSuchMethodSelector, null)); | 1305 new UniverseSelector(Selectors.noSuchMethod_, null)); |
1306 } | 1306 } |
1307 | 1307 |
1308 void enableIsolateSupport(Enqueuer enqueuer) { | 1308 void enableIsolateSupport(Enqueuer enqueuer) { |
1309 // TODO(floitsch): We should also ensure that the class IsolateMessage is | 1309 // TODO(floitsch): We should also ensure that the class IsolateMessage is |
1310 // instantiated. Currently, just enabling isolate support works. | 1310 // instantiated. Currently, just enabling isolate support works. |
1311 if (compiler.mainFunction != null) { | 1311 if (compiler.mainFunction != null) { |
1312 // The JavaScript backend implements [Isolate.spawn] by looking up | 1312 // The JavaScript backend implements [Isolate.spawn] by looking up |
1313 // top-level functions by name. So all top-level function tear-off | 1313 // top-level functions by name. So all top-level function tear-off |
1314 // closures have a private name field. | 1314 // closures have a private name field. |
1315 // | 1315 // |
(...skipping 1731 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3047 registerBackendStaticInvocation(backend.getThrowRuntimeError(), registry); | 3047 registerBackendStaticInvocation(backend.getThrowRuntimeError(), registry); |
3048 // Also register the types of the arguments passed to this method. | 3048 // Also register the types of the arguments passed to this method. |
3049 registerBackendInstantiation(backend.compiler.stringClass, registry); | 3049 registerBackendInstantiation(backend.compiler.stringClass, registry); |
3050 } | 3050 } |
3051 | 3051 |
3052 void onSuperNoSuchMethod(Registry registry) { | 3052 void onSuperNoSuchMethod(Registry registry) { |
3053 assert(registry.isForResolution); | 3053 assert(registry.isForResolution); |
3054 registerBackendStaticInvocation( | 3054 registerBackendStaticInvocation( |
3055 backend.getCreateInvocationMirror(), registry); | 3055 backend.getCreateInvocationMirror(), registry); |
3056 registerBackendStaticInvocation( | 3056 registerBackendStaticInvocation( |
3057 backend.compiler.objectClass.lookupLocalMember(Compiler.NO_SUCH_METHOD), | 3057 backend.compiler.objectClass.lookupLocalMember( |
| 3058 Identifiers.noSuchMethod_), |
3058 registry); | 3059 registry); |
3059 registerBackendInstantiation(backend.compiler.listClass, registry); | 3060 registerBackendInstantiation(backend.compiler.listClass, registry); |
3060 registerBackendInstantiation(backend.compiler.stringClass, registry); | 3061 registerBackendInstantiation(backend.compiler.stringClass, registry); |
3061 } | 3062 } |
3062 | 3063 |
3063 void onMapLiteral(ResolutionRegistry registry, | 3064 void onMapLiteral(ResolutionRegistry registry, |
3064 DartType type, | 3065 DartType type, |
3065 bool isConstant) { | 3066 bool isConstant) { |
3066 assert(registry.isForResolution); | 3067 assert(registry.isForResolution); |
3067 void enqueue(String name) { | 3068 void enqueue(String name) { |
(...skipping 21 matching lines...) Expand all Loading... |
3089 } | 3090 } |
3090 } | 3091 } |
3091 | 3092 |
3092 /// Records that [constant] is used by the element behind [registry]. | 3093 /// Records that [constant] is used by the element behind [registry]. |
3093 class Dependency { | 3094 class Dependency { |
3094 final ConstantValue constant; | 3095 final ConstantValue constant; |
3095 final Element annotatedElement; | 3096 final Element annotatedElement; |
3096 | 3097 |
3097 const Dependency(this.constant, this.annotatedElement); | 3098 const Dependency(this.constant, this.annotatedElement); |
3098 } | 3099 } |
OLD | NEW |