Chromium Code Reviews| Index: pkg/compiler/lib/src/dart_backend/backend.dart |
| diff --git a/pkg/compiler/lib/src/dart_backend/backend.dart b/pkg/compiler/lib/src/dart_backend/backend.dart |
| index 85427b14e81738fd717766325a6c79534860d19c..22c6e6b819020480039ac0030448c7e2aa385890 100644 |
| --- a/pkg/compiler/lib/src/dart_backend/backend.dart |
| +++ b/pkg/compiler/lib/src/dart_backend/backend.dart |
| @@ -263,6 +263,22 @@ class DartBackend extends Backend { |
| Enqueuer enqueuer, |
| Registry registry, |
| {bool mirrorUsage: false}) { |
| + registerPlatformMembers(type, |
| + registerGetter: registry.registerDynamicGetter, |
| + registerSetter: registry.registerDynamicSetter, |
| + registerInvocation: registry.registerDynamicInvocation); |
| + super.registerInstantiatedType( |
| + type, enqueuer, registry, mirrorUsage: mirrorUsage); |
| + } |
| + |
| + /// Register dynamic access of member of [type] that implement members |
|
sigurdm
2015/10/09 10:55:37
member -> members
Johnni Winther
2015/10/09 11:35:56
Done.
|
| + /// of types defined in the platform libraries. |
| + void registerPlatformMembers( |
| + InterfaceType type, |
| + {void registerGetter(UniverseSelector selector), |
| + void registerSetter(UniverseSelector selector), |
| + void registerInvocation(UniverseSelector selector)}) { |
| + |
| // Without patching, dart2dart has no way of performing sound tree-shaking |
| // in face external functions. Therefore we employ another scheme: |
| // |
| @@ -314,13 +330,13 @@ class DartBackend extends Backend { |
| element.computeType(resolution); |
| Selector selector = new Selector.fromElement(element); |
| if (selector.isGetter) { |
| - registry.registerDynamicGetter( |
| + registerGetter( |
| new UniverseSelector(selector, null)); |
| } else if (selector.isSetter) { |
| - registry.registerDynamicSetter( |
| + registerSetter( |
| new UniverseSelector(selector, null)); |
| } else { |
| - registry.registerDynamicInvocation( |
| + registerInvocation( |
| new UniverseSelector(selector, null)); |
| } |
| }); |
| @@ -328,8 +344,6 @@ class DartBackend extends Backend { |
| } |
| } |
| } |
| - super.registerInstantiatedType( |
| - type, enqueuer, registry, mirrorUsage: mirrorUsage); |
| } |
| @override |
| @@ -351,24 +365,21 @@ class DartResolutionCallbacks extends ResolutionCallbacks { |
| TransformedWorldImpact transformed = |
| new TransformedWorldImpact(worldImpact); |
| for (DartType typeLiteral in worldImpact.typeLiterals) { |
| - onTypeLiteral(typeLiteral, transformed); |
| + if (typeLiteral.isInterfaceType) { |
| + backend.usedTypeLiterals.add(typeLiteral.element); |
| + } |
| } |
| for (InterfaceType instantiatedType in worldImpact.instantiatedTypes) { |
| // TODO(johnniwinther): Remove this when dependency tracking is done on |
| // the world impact itself. |
| - transformed.registerInstantiation(instantiatedType); |
| - backend.registerInstantiatedType( |
| - instantiatedType, backend.compiler.enqueuer.resolution, transformed); |
| + transformed.registerInstantiatedType(instantiatedType); |
| + backend.registerPlatformMembers(instantiatedType, |
| + registerGetter: transformed.registerDynamicGetter, |
| + registerSetter: transformed.registerDynamicSetter, |
| + registerInvocation: transformed.registerDynamicInvocation); |
| } |
| return transformed; |
| } |
| - |
| - @override |
| - void onTypeLiteral(DartType type, Registry registry) { |
| - if (type.isInterfaceType) { |
| - backend.usedTypeLiterals.add(type.element); |
| - } |
| - } |
| } |
| class EmitterUnparser extends Unparser { |