Chromium Code Reviews| 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 |