| OLD | NEW | 
|---|
| 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 import "package:expect/expect.dart"; | 5 import "package:expect/expect.dart"; | 
| 6 | 6 | 
| 7 class I<T> { } | 7 class I<T> {} | 
| 8 | 8 | 
| 9 class J<T> { } | 9 class J<T> {} | 
| 10 | 10 | 
| 11 class K<T> { } | 11 class K<T> {} | 
| 12 | 12 | 
| 13 class S<T> { } | 13 class S<T> {} | 
| 14 | 14 | 
| 15 class M<T> { | 15 class M<T> { | 
| 16   m() { return T; } | 16   m() { | 
|  | 17     return T; | 
|  | 18   } | 
| 17 } | 19 } | 
| 18 | 20 | 
| 19 class A<U, V> = Object with M implements I<V>;  // M is raw. | 21 class A<U, V> = Object with M implements I<V>; // M is raw. | 
| 20 | 22 | 
| 21 class B<T> = Object with A implements J<T>;  // A is raw. | 23 class B<T> = Object with A implements J<T>; // A is raw. | 
| 22 | 24 | 
| 23 class C<T> = S<List<T>> with B implements K<T>;  // B is raw. | 25 class C<T> = S<List<T>> with B implements K<T>; // B is raw. | 
| 24 | 26 | 
| 25 @NoInline() @AssumeDynamic() | 27 @NoInline() | 
|  | 28 @AssumeDynamic() | 
| 26 dyn(x) => x; | 29 dyn(x) => x; | 
| 27 | 30 | 
| 28 main() { | 31 main() { | 
| 29   var c = new C<int>(); | 32   var c = new C<int>(); | 
| 30   Expect.equals("dynamic", c.m().toString()); | 33   Expect.equals("dynamic", c.m().toString()); | 
| 31   Expect.isTrue(c is K<int>); | 34   Expect.isTrue(c is K<int>); | 
| 32   Expect.isTrue(c is J); | 35   Expect.isTrue(c is J); | 
| 33   Expect.isTrue(c is I); | 36   Expect.isTrue(c is I); | 
| 34   Expect.isTrue(c is S<List<int>>); | 37   Expect.isTrue(c is S<List<int>>); | 
| 35   Expect.isTrue(c is A); | 38   Expect.isTrue(c is A); | 
| 36   Expect.isTrue(c is M); | 39   Expect.isTrue(c is M); | 
| 37 | 40 | 
| 38   Expect.equals("dynamic", dyn(c).m().toString()); | 41   Expect.equals("dynamic", dyn(c).m().toString()); | 
| 39   Expect.isTrue(dyn(c) is K<int>); | 42   Expect.isTrue(dyn(c) is K<int>); | 
| 40   Expect.isTrue(dyn(c) is J); | 43   Expect.isTrue(dyn(c) is J); | 
| 41   Expect.isTrue(dyn(c) is I); | 44   Expect.isTrue(dyn(c) is I); | 
| 42   Expect.isTrue(dyn(c) is S<List<int>>); | 45   Expect.isTrue(dyn(c) is S<List<int>>); | 
| 43   Expect.isTrue(dyn(c) is A); | 46   Expect.isTrue(dyn(c) is A); | 
| 44   Expect.isTrue(dyn(c) is M); | 47   Expect.isTrue(dyn(c) is M); | 
| 45 |  | 
| 46 } | 48 } | 
| OLD | NEW | 
|---|