OLD | NEW |
| (Empty) |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | |
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. | |
4 | |
5 import "package:expect/expect.dart"; | |
6 import "dart:typed_data"; | |
7 | |
8 // Test that optimized indexing and slow path indexing produce the same error. | |
9 | |
10 @NoInline() | |
11 @AssumeDynamic() | |
12 confuse(x) => x; | |
13 | |
14 class TooHigh { | |
15 static load1() { | |
16 var a = confuse(true) ? 'AB' : 'ABCDE'; | |
17 try { | |
18 return confuse(a)[3]; // dynamic receiver for indexer. | |
19 } catch (e) { | |
20 return e; | |
21 } | |
22 Expect.fail('unreached'); | |
23 } | |
24 | |
25 static load2() { | |
26 try { | |
27 confuse(load2x)(3); | |
28 } catch (e) { | |
29 return e; | |
30 } | |
31 Expect.fail('unreached'); | |
32 } | |
33 static load2x(i) { | |
34 var a = confuse(true) ? 'AB' : 'ABCDE'; | |
35 return a[i]; // 'a' is String of unknown length. | |
36 } | |
37 | |
38 static test() { | |
39 var e1 = load1(); | |
40 var e2 = load2(); | |
41 print(" A: '$e1'\n B: '$e2'"); | |
42 Expect.equals('$e1', '$e2'); | |
43 } | |
44 } | |
45 | |
46 class Negative { | |
47 static load1() { | |
48 var a = confuse(true) ? 'AB' : 'ABCDE'; | |
49 try { | |
50 return confuse(a)[-3]; // dynamic receiver for indexer. | |
51 } catch (e) { | |
52 return e; | |
53 } | |
54 Expect.fail('unreached'); | |
55 } | |
56 | |
57 static load2() { | |
58 try { | |
59 confuse(load2x)(-3); | |
60 } catch (e) { | |
61 return e; | |
62 } | |
63 Expect.fail('unreached'); | |
64 } | |
65 static load2x(i) { | |
66 var a = confuse(true) ? 'AB' : 'ABCDE'; | |
67 return a[i]; // 'a' is String of unknown length. | |
68 } | |
69 | |
70 static test() { | |
71 var e1 = load1(); | |
72 var e2 = load2(); | |
73 print(" A: '$e1'\n B: '$e2'"); | |
74 Expect.equals('$e1', '$e2'); | |
75 } | |
76 } | |
77 | |
78 class Empty { | |
79 static load1() { | |
80 var a = confuse(true) ? '' : 'ABCDE'; | |
81 try { | |
82 return confuse(a)[-3]; // dynamic receiver for indexer. | |
83 } catch (e) { | |
84 return e; | |
85 } | |
86 Expect.fail('unreached'); | |
87 } | |
88 | |
89 static load2() { | |
90 try { | |
91 confuse(load2x)(-3); | |
92 } catch (e) { | |
93 return e; | |
94 } | |
95 Expect.fail('unreached'); | |
96 } | |
97 static load2x(i) { | |
98 var a = confuse(true) ? '' : 'ABCDE'; | |
99 return a[i]; // 'a' is String of unknown length. | |
100 } | |
101 | |
102 static test() { | |
103 var e1 = load1(); | |
104 var e2 = load2(); | |
105 print(" A: '$e1'\n B: '$e2'"); | |
106 Expect.equals('$e1', '$e2'); | |
107 } | |
108 } | |
109 | |
110 class BadType { | |
111 static load1() { | |
112 var a = confuse(true) ? 'AB' : 'ABCDE'; | |
113 try { | |
114 return confuse(a)['a']; // dynamic receiver for indexer. | |
115 } catch (e) { | |
116 return e; | |
117 } | |
118 Expect.fail('unreached'); | |
119 } | |
120 | |
121 static load2() { | |
122 try { | |
123 confuse(load2x)('a'); | |
124 } catch (e) { | |
125 return e; | |
126 } | |
127 Expect.fail('unreached'); | |
128 } | |
129 static load2x(i) { | |
130 var a = confuse(true) ? 'AB' : 'ABCDE'; | |
131 return a[i]; // 'a' is String of unknown length. | |
132 } | |
133 | |
134 static test() { | |
135 var e1 = load1(); | |
136 var e2 = load2(); | |
137 print(" A: '$e1'\n B: '$e2'"); | |
138 Expect.equals('$e1', '$e2'); | |
139 } | |
140 } | |
141 | |
142 main() { | |
143 TooHigh.test(); | |
144 Negative.test(); | |
145 Empty.test(); | |
146 BadType.test(); | |
147 } | |
OLD | NEW |