| Index: pkg/compiler/lib/src/native/enqueue.dart
|
| diff --git a/pkg/compiler/lib/src/native/enqueue.dart b/pkg/compiler/lib/src/native/enqueue.dart
|
| index e15f185cbee361d1669c4b225f0fdabedc79d9f5..f38ccc43f10663e59d0e43ec2f63206d2c9ead90 100644
|
| --- a/pkg/compiler/lib/src/native/enqueue.dart
|
| +++ b/pkg/compiler/lib/src/native/enqueue.dart
|
| @@ -520,12 +520,23 @@ abstract class NativeEnqueuerBase implements NativeEnqueuer {
|
| .isSubtype(type, backend.listImplementation.rawType)) {
|
| backend.registerInstantiatedType(type, world, registry);
|
| }
|
| + // TODO(johnniwinther): Improve spec string precision to handle type
|
| + // arguments and implements relations that preserve generics. Currently
|
| + // we cannot distinguish between `List`, `List<dynamic>`, and
|
| + // `List<int>` and take all to mean `List<E>`; in effect not including
|
| + // any native subclasses of generic classes.
|
| + // TODO(johnniwinther,sra): Find and replace uses of `List` with the
|
| + // actual implementation classes such as `JSArray` et al.
|
| + enqueueUnusedClassesMatching((ClassElement nativeClass) {
|
| + InterfaceType nativeType = nativeClass.thisType;
|
| + InterfaceType specType = type.element.thisType;
|
| + return compiler.types.isSubtype(nativeType, specType);
|
| + }, cause, 'subtypeof($type)');
|
| + } else if (type.isDynamic) {
|
| + enqueueUnusedClassesMatching((_) => true, cause, 'subtypeof($type)');
|
| + } else {
|
| + assert(type is VoidType);
|
| }
|
| - assert(type is DartType);
|
| - enqueueUnusedClassesMatching(
|
| - (nativeClass) => compiler.types.isSubtype(nativeClass.thisType, type),
|
| - cause,
|
| - 'subtypeof($type)');
|
| }
|
|
|
| // Give an info so that library developers can compile with -v to find why
|
|
|