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

Unified Diff: pkg/compiler/lib/src/dart_backend/backend.dart

Issue 1397043002: Introduce BackendImpact to separate enqueueing from data. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comments. Created 5 years, 2 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 side-by-side diff with in-line comments
Download patch
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..2f28068e10ca776d6b7fc89dbc7809ac75073283 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 members of [type] that implement members
+ /// 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 {
« no previous file with comments | « pkg/compiler/lib/src/cps_ir/type_propagation.dart ('k') | pkg/compiler/lib/src/inferrer/simple_types_inferrer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698