| Index: sdk/lib/_internal/compiler/implementation/native_handler.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/native_handler.dart b/sdk/lib/_internal/compiler/implementation/native_handler.dart
|
| index 0c1579b538351b24c9572dfdf7ea94f6632210af..8de208fbf826c224fa23617670c0dccaa7569c2f 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/native_handler.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/native_handler.dart
|
| @@ -296,6 +296,8 @@ class NativeCodegenEnqueuer extends NativeEnqueuerBase {
|
|
|
| final CodeEmitterTask emitter;
|
|
|
| + final Set<ClassElement> doneAddSubtypes = new Set<ClassElement>();
|
| +
|
| NativeCodegenEnqueuer(Enqueuer world, Compiler compiler, this.emitter)
|
| : super(world, compiler, compiler.enableNativeLiveTypeAnalysis);
|
|
|
| @@ -320,6 +322,14 @@ class NativeCodegenEnqueuer extends NativeEnqueuerBase {
|
| }
|
|
|
| void addSubtypes(ClassElement cls, NativeEmitter emitter) {
|
| + if (!cls.isNative()) return;
|
| + if (doneAddSubtypes.contains(cls)) return;
|
| + doneAddSubtypes.add(cls);
|
| +
|
| + // Walk the superclass chain since classes on the superclass chain might not
|
| + // be instantiated (abstract or simply unused).
|
| + addSubtypes(cls.superclass, emitter);
|
| +
|
| for (DartType type in cls.allSupertypes) {
|
| List<Element> subtypes = emitter.subtypes.putIfAbsent(
|
| type.element,
|
|
|