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 'dart:async' show Future; | 7 import 'dart:async' show Future; |
8 | 8 |
9 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; | 9 import 'package:js_runtime/shared/embedded_names.dart' as embeddedNames; |
10 | 10 |
(...skipping 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1285 return impactBuilder; | 1285 return impactBuilder; |
1286 } | 1286 } |
1287 | 1287 |
1288 onResolutionComplete( | 1288 onResolutionComplete( |
1289 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) { | 1289 ClosedWorld closedWorld, ClosedWorldRefiner closedWorldRefiner) { |
1290 for (Entity entity in compiler.enqueuer.resolution.processedEntities) { | 1290 for (Entity entity in compiler.enqueuer.resolution.processedEntities) { |
1291 processAnnotations(entity, closedWorldRefiner); | 1291 processAnnotations(entity, closedWorldRefiner); |
1292 } | 1292 } |
1293 computeMembersNeededForReflection(closedWorld); | 1293 computeMembersNeededForReflection(closedWorld); |
1294 rti.computeClassesNeedingRti( | 1294 rti.computeClassesNeedingRti( |
1295 compiler.enqueuer.resolution.universe, closedWorld); | 1295 compiler.enqueuer.resolution.worldBuilder, closedWorld); |
1296 _registeredMetadata.clear(); | 1296 _registeredMetadata.clear(); |
1297 } | 1297 } |
1298 | 1298 |
1299 onTypeInferenceComplete() { | 1299 onTypeInferenceComplete() { |
1300 super.onTypeInferenceComplete(); | 1300 super.onTypeInferenceComplete(); |
1301 noSuchMethodRegistry.onTypeInferenceComplete(); | 1301 noSuchMethodRegistry.onTypeInferenceComplete(); |
1302 } | 1302 } |
1303 | 1303 |
1304 /// Called to register that an instantiated generic class has a call method. | 1304 /// Called to register that an instantiated generic class has a call method. |
1305 /// Any backend specific [WorldImpact] of this is returned. | 1305 /// Any backend specific [WorldImpact] of this is returned. |
(...skipping 736 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2042 void computeMembersNeededForReflection(ClosedWorld closedWorld) { | 2042 void computeMembersNeededForReflection(ClosedWorld closedWorld) { |
2043 if (_membersNeededForReflection != null) return; | 2043 if (_membersNeededForReflection != null) return; |
2044 if (closedWorld.commonElements.mirrorsLibrary == null) { | 2044 if (closedWorld.commonElements.mirrorsLibrary == null) { |
2045 _membersNeededForReflection = const ImmutableEmptySet<Element>(); | 2045 _membersNeededForReflection = const ImmutableEmptySet<Element>(); |
2046 return; | 2046 return; |
2047 } | 2047 } |
2048 // Compute a mapping from class to the closures it contains, so we | 2048 // Compute a mapping from class to the closures it contains, so we |
2049 // can include the correct ones when including the class. | 2049 // can include the correct ones when including the class. |
2050 Map<ClassElement, List<LocalFunctionElement>> closureMap = | 2050 Map<ClassElement, List<LocalFunctionElement>> closureMap = |
2051 new Map<ClassElement, List<LocalFunctionElement>>(); | 2051 new Map<ClassElement, List<LocalFunctionElement>>(); |
2052 for (LocalFunctionElement closure in compiler.resolverWorld.allClosures) { | 2052 for (LocalFunctionElement closure |
| 2053 in compiler.resolutionWorldBuilder.allClosures) { |
2053 closureMap.putIfAbsent(closure.enclosingClass, () => []).add(closure); | 2054 closureMap.putIfAbsent(closure.enclosingClass, () => []).add(closure); |
2054 } | 2055 } |
2055 bool foundClosure = false; | 2056 bool foundClosure = false; |
2056 Set<Element> reflectableMembers = new Set<Element>(); | 2057 Set<Element> reflectableMembers = new Set<Element>(); |
2057 ResolutionEnqueuer resolution = compiler.enqueuer.resolution; | 2058 ResolutionEnqueuer resolution = compiler.enqueuer.resolution; |
2058 for (ClassElement cls in resolution.universe.directlyInstantiatedClasses) { | 2059 for (ClassElement cls |
| 2060 in resolution.worldBuilder.directlyInstantiatedClasses) { |
2059 // Do not process internal classes. | 2061 // Do not process internal classes. |
2060 if (cls.library.isInternalLibrary || cls.isInjected) continue; | 2062 if (cls.library.isInternalLibrary || cls.isInjected) continue; |
2061 if (referencedFromMirrorSystem(cls)) { | 2063 if (referencedFromMirrorSystem(cls)) { |
2062 Set<Name> memberNames = new Set<Name>(); | 2064 Set<Name> memberNames = new Set<Name>(); |
2063 // 1) the class (should be resolved) | 2065 // 1) the class (should be resolved) |
2064 assert(invariant(cls, cls.isResolved)); | 2066 assert(invariant(cls, cls.isResolved)); |
2065 reflectableMembers.add(cls); | 2067 reflectableMembers.add(cls); |
2066 // 2) its constructors (if resolved) | 2068 // 2) its constructors (if resolved) |
2067 cls.constructors.forEach((Element constructor) { | 2069 cls.constructors.forEach((Element constructor) { |
2068 if (resolution.hasBeenProcessed(constructor)) { | 2070 if (resolution.hasBeenProcessed(constructor)) { |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2151 reflectableMembers.add(closure); | 2153 reflectableMembers.add(closure); |
2152 foundClosure = true; | 2154 foundClosure = true; |
2153 } | 2155 } |
2154 } | 2156 } |
2155 } | 2157 } |
2156 // As we do not think about closures as classes, yet, we have to make sure | 2158 // As we do not think about closures as classes, yet, we have to make sure |
2157 // their superclasses are available for reflection manually. | 2159 // their superclasses are available for reflection manually. |
2158 if (foundClosure) { | 2160 if (foundClosure) { |
2159 reflectableMembers.add(helpers.closureClass); | 2161 reflectableMembers.add(helpers.closureClass); |
2160 } | 2162 } |
2161 Set<Element> closurizedMembers = compiler.resolverWorld.closurizedMembers; | 2163 Set<Element> closurizedMembers = |
| 2164 compiler.resolutionWorldBuilder.closurizedMembers; |
2162 if (closurizedMembers.any(reflectableMembers.contains)) { | 2165 if (closurizedMembers.any(reflectableMembers.contains)) { |
2163 reflectableMembers.add(helpers.boundClosureClass); | 2166 reflectableMembers.add(helpers.boundClosureClass); |
2164 } | 2167 } |
2165 // Add typedefs. | 2168 // Add typedefs. |
2166 reflectableMembers | 2169 reflectableMembers |
2167 .addAll(closedWorld.allTypedefs.where(referencedFromMirrorSystem)); | 2170 .addAll(closedWorld.allTypedefs.where(referencedFromMirrorSystem)); |
2168 // Register all symbols of reflectable elements | 2171 // Register all symbols of reflectable elements |
2169 for (Element element in reflectableMembers) { | 2172 for (Element element in reflectableMembers) { |
2170 symbolsUsed.add(element.name); | 2173 symbolsUsed.add(element.name); |
2171 } | 2174 } |
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2387 message: "ClosedWorld has not be set yet.")); | 2390 message: "ClosedWorld has not be set yet.")); |
2388 return _closedWorldCache; | 2391 return _closedWorldCache; |
2389 } | 2392 } |
2390 | 2393 |
2391 void set _closedWorld(ClosedWorld value) { | 2394 void set _closedWorld(ClosedWorld value) { |
2392 _closedWorldCache = value; | 2395 _closedWorldCache = value; |
2393 } | 2396 } |
2394 | 2397 |
2395 WorldImpact onCodegenStart(ClosedWorld closedWorld) { | 2398 WorldImpact onCodegenStart(ClosedWorld closedWorld) { |
2396 _closedWorld = closedWorld; | 2399 _closedWorld = closedWorld; |
2397 _namer = determineNamer(_closedWorld, compiler.codegenWorld); | 2400 _namer = determineNamer(_closedWorld, compiler.codegenWorldBuilder); |
2398 tracer = new Tracer(_closedWorld, namer, compiler.outputProvider); | 2401 tracer = new Tracer(_closedWorld, namer, compiler.outputProvider); |
2399 emitter.createEmitter(_namer, _closedWorld); | 2402 emitter.createEmitter(_namer, _closedWorld); |
2400 lookupMapAnalysis.onCodegenStart(); | 2403 lookupMapAnalysis.onCodegenStart(); |
2401 if (hasIsolateSupport) { | 2404 if (hasIsolateSupport) { |
2402 return enableIsolateSupport(forResolution: false); | 2405 return enableIsolateSupport(forResolution: false); |
2403 } | 2406 } |
2404 return const WorldImpact(); | 2407 return const WorldImpact(); |
2405 } | 2408 } |
2406 | 2409 |
2407 void onCodegenEnd() { | 2410 void onCodegenEnd() { |
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3277 @override | 3280 @override |
3278 bool isNativeClass(ClassElement element) { | 3281 bool isNativeClass(ClassElement element) { |
3279 return helpers.backend.isNative(element); | 3282 return helpers.backend.isNative(element); |
3280 } | 3283 } |
3281 | 3284 |
3282 @override | 3285 @override |
3283 bool isNativeMember(MemberElement element) { | 3286 bool isNativeMember(MemberElement element) { |
3284 return helpers.backend.isNative(element); | 3287 return helpers.backend.isNative(element); |
3285 } | 3288 } |
3286 } | 3289 } |
OLD | NEW |