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..28b9d990097bfabb7d2b2c4c6ea1c4a760dcf76a 100644 |
--- a/pkg/compiler/lib/src/native/enqueue.dart |
+++ b/pkg/compiler/lib/src/native/enqueue.dart |
@@ -520,12 +520,19 @@ 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. |
sra1
2016/05/31 20:47:05
Add comment that we should hunt down uses of `List
Johnni Winther
2016/06/02 08:19:20
Done.
|
+ enqueueUnusedClassesMatching((ClassElement nativeClass) { |
+ InterfaceType nativeType = nativeClass.thisType; |
+ InterfaceType specType = type.element.thisType; |
+ return compiler.types.isSubtype(nativeType, specType); |
+ }, cause, 'subtypeof($type)'); |
+ return; |
} |
- assert(type is DartType); |
- enqueueUnusedClassesMatching( |
- (nativeClass) => compiler.types.isSubtype(nativeClass.thisType, type), |
- cause, |
- 'subtypeof($type)'); |
+ assert(type is VoidType || type is DynamicType); |
} |
// Give an info so that library developers can compile with -v to find why |