OLD | NEW |
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 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 | 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 // Verify semantics of the ??= operator, including order of operations, by | 5 // Verify semantics of the ??= operator, including order of operations, by |
6 // keeping track of the operations performed. | 6 // keeping track of the operations performed. |
7 | 7 |
8 // SharedOptions=--enable-null-aware-operators | 8 // SharedOptions=--enable-null-aware-operators |
9 | 9 |
10 import "package:expect/expect.dart"; | 10 import "package:expect/expect.dart"; |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 check(1, () => f().v ??= bad(), ['f()', 'f().v']); /// 22: continued | 187 check(1, () => f().v ??= bad(), ['f()', 'f().v']); /// 22: continued |
188 fValue = new C('f()'); yGetValue = 1; /// 23: ok | 188 fValue = new C('f()'); yGetValue = 1; /// 23: ok |
189 check(1, () => f().v ??= y, ['f()', 'f().v', 'y', 'f().v=1']); /// 23: continu
ed | 189 check(1, () => f().v ??= y, ['f()', 'f().v', 'y', 'f().v=1']); /// 23: continu
ed |
190 | 190 |
191 // e1[e2] ??= e3 is equivalent to | 191 // e1[e2] ??= e3 is equivalent to |
192 // ((a, i) => ((x) => x == null ? a[i] = e3 : x)(a[i]))(e1, e2) | 192 // ((a, i) => ((x) => x == null ? a[i] = e3 : x)(a[i]))(e1, e2) |
193 xGetValue = new C('x'); yGetValue = 1; xGetValue.indexGetValue = 2; /// 24: ok | 193 xGetValue = new C('x'); yGetValue = 1; xGetValue.indexGetValue = 2; /// 24: ok |
194 check(2, () => x[y] ??= bad(), ['x', 'y', 'x[1]']); /// 24: co
ntinued | 194 check(2, () => x[y] ??= bad(), ['x', 'y', 'x[1]']); /// 24: co
ntinued |
195 xGetValue = new C('x'); yGetValue = 1; zGetValue = 2; /// 25: ok | 195 xGetValue = new C('x'); yGetValue = 1; zGetValue = 2; /// 25: ok |
196 check(2, () => x[y] ??= z, ['x', 'y', 'x[1]', 'z', 'x[1]=2']); /// 25: continu
ed | 196 check(2, () => x[y] ??= z, ['x', 'y', 'x[1]', 'z', 'x[1]=2']); /// 25: continu
ed |
| 197 |
| 198 // e1?.v ??= e2 is equivalent to ((x) => x == null ? null : x.v ??= e2)(e1). |
| 199 check(null, () => x?.v ??= bad(), ['x']); /// 26: ok |
| 200 xGetValue = new C('x'); xGetValue.vGetValue = 1; /// 27: ok |
| 201 check(1, () => x?.v ??= bad(), ['x', 'x.v']); /// 27: continued |
| 202 xGetValue = new C('x'); yGetValue = 1; /// 28: ok |
| 203 check(1, () => x?.v ??= y, ['x', 'x.v', 'y', 'x.v=1']); /// 28: continued |
197 } | 204 } |
OLD | NEW |