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 // Test type promotion of functions. | 5 // Test type promotion of functions. |
6 | 6 |
7 class A {} | 7 class A {} |
8 class B extends A {} | 8 class B extends A {} |
9 class C {} | 9 class C {} |
10 | 10 |
(...skipping 17 matching lines...) Expand all Loading... |
28 testFuncAtoDyn(); | 28 testFuncAtoDyn(); |
29 testFuncDynToDyn(); | 29 testFuncDynToDyn(); |
30 testFuncDynToVoid(); | 30 testFuncDynToVoid(); |
31 testFuncDynToA(); | 31 testFuncDynToA(); |
32 } | 32 } |
33 | 33 |
34 testFuncAtoDyn() { | 34 testFuncAtoDyn() { |
35 FuncAtoDyn funcAtoDyn = func; | 35 FuncAtoDyn funcAtoDyn = func; |
36 a = funcAtoDyn(new A()); | 36 a = funcAtoDyn(new A()); |
37 b = funcAtoDyn(new B()); | 37 b = funcAtoDyn(new B()); |
38 c = funcAtoDyn(new C()); /// 01: static type warning | 38 c = funcAtoDyn(new C()); //# 01: static type warning |
39 | 39 |
40 if (funcAtoDyn is FuncDynToDyn) { | 40 if (funcAtoDyn is FuncDynToDyn) { |
41 // No promotion: FuncDynToDyn !<< FuncAtoDyn. | 41 // No promotion: FuncDynToDyn !<< FuncAtoDyn. |
42 a = funcAtoDyn(new A()); | 42 a = funcAtoDyn(new A()); |
43 b = funcAtoDyn(new B()); | 43 b = funcAtoDyn(new B()); |
44 c = funcAtoDyn(new C()); /// 11: static type warning | 44 c = funcAtoDyn(new C()); //# 11: static type warning |
45 } | 45 } |
46 } | 46 } |
47 | 47 |
48 testFuncDynToDyn() { | 48 testFuncDynToDyn() { |
49 FuncDynToDyn funcDynToDyn = func; | 49 FuncDynToDyn funcDynToDyn = func; |
50 a = funcDynToDyn(new A()); | 50 a = funcDynToDyn(new A()); |
51 b = funcDynToDyn(new B()); | 51 b = funcDynToDyn(new B()); |
52 c = funcDynToDyn(new C()); | 52 c = funcDynToDyn(new C()); |
53 | 53 |
54 if (funcDynToDyn is FuncAtoDyn) { // Promotion: FuncAtoDyn << FuncDynToDyn. | 54 if (funcDynToDyn is FuncAtoDyn) { // Promotion: FuncAtoDyn << FuncDynToDyn. |
55 a = funcDynToDyn(new A()); | 55 a = funcDynToDyn(new A()); |
56 b = funcDynToDyn(new B()); | 56 b = funcDynToDyn(new B()); |
57 c = funcDynToDyn(new C()); /// 09: static type warning | 57 c = funcDynToDyn(new C()); //# 09: static type warning |
58 } | 58 } |
59 | 59 |
60 if (funcDynToDyn is FuncDynToVoid) { | 60 if (funcDynToDyn is FuncDynToVoid) { |
61 // Promotion: FuncDynToVoid << FuncDynToDyn. | 61 // Promotion: FuncDynToVoid << FuncDynToDyn. |
62 a = funcDynToDyn(new A()); /// 12: static type warning | 62 a = funcDynToDyn(new A()); //# 12: static type warning |
63 b = funcDynToDyn(new B()); /// 13: static type warning | 63 b = funcDynToDyn(new B()); //# 13: static type warning |
64 c = funcDynToDyn(new C()); /// 14: static type warning | 64 c = funcDynToDyn(new C()); //# 14: static type warning |
65 } | 65 } |
66 | 66 |
67 if (funcDynToDyn is FuncDynToA) { // Promotion: FuncDynToA << FuncDynToDyn. | 67 if (funcDynToDyn is FuncDynToA) { // Promotion: FuncDynToA << FuncDynToDyn. |
68 a = funcDynToDyn(new A()); | 68 a = funcDynToDyn(new A()); |
69 b = funcDynToDyn(new B()); | 69 b = funcDynToDyn(new B()); |
70 c = funcDynToDyn(new C()); /// 10: static type warning | 70 c = funcDynToDyn(new C()); //# 10: static type warning |
71 } | 71 } |
72 } | 72 } |
73 | 73 |
74 testFuncDynToVoid() { | 74 testFuncDynToVoid() { |
75 FuncDynToVoid funcDynToVoid = func; | 75 FuncDynToVoid funcDynToVoid = func; |
76 a = funcDynToVoid(new A()); /// 02: static type warning | 76 a = funcDynToVoid(new A()); //# 02: static type warning |
77 b = funcDynToVoid(new B()); /// 03: static type warning | 77 b = funcDynToVoid(new B()); //# 03: static type warning |
78 c = funcDynToVoid(new C()); /// 04: static type warning | 78 c = funcDynToVoid(new C()); //# 04: static type warning |
79 | 79 |
80 if (funcDynToVoid is FuncDynToDyn) { | 80 if (funcDynToVoid is FuncDynToDyn) { |
81 // Promotion: FuncDynToDyn << FuncDynToVoid. | 81 // Promotion: FuncDynToDyn << FuncDynToVoid. |
82 a = funcDynToVoid(new A()); | 82 a = funcDynToVoid(new A()); |
83 b = funcDynToVoid(new B()); | 83 b = funcDynToVoid(new B()); |
84 c = funcDynToVoid(new C()); | 84 c = funcDynToVoid(new C()); |
85 } | 85 } |
86 | 86 |
87 if (funcDynToVoid is FuncDynToA) { // Promotion: FuncDynToA << FuncDynToVoid. | 87 if (funcDynToVoid is FuncDynToA) { // Promotion: FuncDynToA << FuncDynToVoid. |
88 a = funcDynToVoid(new A()); | 88 a = funcDynToVoid(new A()); |
89 b = funcDynToVoid(new B()); | 89 b = funcDynToVoid(new B()); |
90 c = funcDynToVoid(new C()); /// 05: static type warning | 90 c = funcDynToVoid(new C()); //# 05: static type warning |
91 } | 91 } |
92 } | 92 } |
93 | 93 |
94 testFuncDynToA() { | 94 testFuncDynToA() { |
95 FuncDynToA funcDynToA = func; | 95 FuncDynToA funcDynToA = func; |
96 a = funcDynToA(new A()); | 96 a = funcDynToA(new A()); |
97 b = funcDynToA(new B()); | 97 b = funcDynToA(new B()); |
98 c = funcDynToA(new C()); /// 06: static type warning | 98 c = funcDynToA(new C()); //# 06: static type warning |
99 | 99 |
100 if (funcDynToA is FuncDynToDyn) { | 100 if (funcDynToA is FuncDynToDyn) { |
101 // No promotion: FuncDynToDyn !<< FuncDynToA. | 101 // No promotion: FuncDynToDyn !<< FuncDynToA. |
102 a = funcDynToA(new A()); | 102 a = funcDynToA(new A()); |
103 b = funcDynToA(new B()); | 103 b = funcDynToA(new B()); |
104 c = funcDynToA(new C()); /// 08: static type warning | 104 c = funcDynToA(new C()); //# 08: static type warning |
105 } | 105 } |
106 | 106 |
107 if (funcDynToA is FuncDynToVoid) { | 107 if (funcDynToA is FuncDynToVoid) { |
108 // No promotion: FuncDynToVoid !<< FuncDynToA. | 108 // No promotion: FuncDynToVoid !<< FuncDynToA. |
109 a = funcDynToA(new A()); | 109 a = funcDynToA(new A()); |
110 b = funcDynToA(new B()); | 110 b = funcDynToA(new B()); |
111 c = funcDynToA(new C()); /// 07: static type warning | 111 c = funcDynToA(new C()); //# 07: static type warning |
112 } | 112 } |
113 } | 113 } |
OLD | NEW |