Index: pkg/compiler/lib/src/enqueue.dart |
diff --git a/pkg/compiler/lib/src/enqueue.dart b/pkg/compiler/lib/src/enqueue.dart |
index 6ad51775b4ac6b19960671dd5d468bf98ac0e970..fb90b10ef215cd17b53b06755066386469cda022 100644 |
--- a/pkg/compiler/lib/src/enqueue.dart |
+++ b/pkg/compiler/lib/src/enqueue.dart |
@@ -194,7 +194,13 @@ abstract class Enqueuer { |
ClassElement cls = type.element; |
registry.registerDependency(cls); |
cls.ensureResolved(compiler); |
- universe.registerTypeInstantiation(type, byMirrors: mirrorUsage); |
+ universe.registerTypeInstantiation( |
+ type, |
+ byMirrors: mirrorUsage, |
+ onImplemented: (ClassElement cls) { |
+ compiler.backend.registerImplementedClass( |
+ cls, this, compiler.globalDependencies); |
+ }); |
processInstantiatedClass(cls); |
compiler.backend.registerInstantiatedType(type, registry); |
}); |
@@ -336,10 +342,9 @@ abstract class Enqueuer { |
compiler.backend.registerInstantiatedClass( |
cls, this, compiler.globalDependencies); |
} |
- processClass(cls); |
- for (Link<DartType> supertypes = cls.allSupertypes; |
- !supertypes.isEmpty; supertypes = supertypes.tail) { |
- processClass(supertypes.head.element); |
+ while (cls != null) { |
+ processClass(cls); |
+ cls = cls.superclass; |
} |
}); |
} |