| 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 | |
| 9 | |
| 10 import "package:expect/expect.dart"; | 8 import "package:expect/expect.dart"; |
| 11 import "if_null_assignment_helper.dart" as h; | 9 import "if_null_assignment_helper.dart" as h; |
| 12 | 10 |
| 13 bad() { | 11 bad() { |
| 14 Expect.fail('Should not be executed'); | 12 Expect.fail('Should not be executed'); |
| 15 } | 13 } |
| 16 | 14 |
| 17 var xGetValue = null; | 15 var xGetValue = null; |
| 18 | 16 |
| 19 get x { | 17 get x { |
| (...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 197 xGetValue = new C('x'); yGetValue = 1; zGetValue = 2; /// 25: ok | 195 xGetValue = new C('x'); yGetValue = 1; zGetValue = 2; /// 25: ok |
| 198 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 |
| 199 | 197 |
| 200 // e1?.v ??= e2 is equivalent to ((x) => x == null ? null : x.v ??= e2)(e1). | 198 // e1?.v ??= e2 is equivalent to ((x) => x == null ? null : x.v ??= e2)(e1). |
| 201 check(null, () => x?.v ??= bad(), ['x']); /// 26: ok | 199 check(null, () => x?.v ??= bad(), ['x']); /// 26: ok |
| 202 xGetValue = new C('x'); xGetValue.vGetValue = 1; /// 27: ok | 200 xGetValue = new C('x'); xGetValue.vGetValue = 1; /// 27: ok |
| 203 check(1, () => x?.v ??= bad(), ['x', 'x.v']); /// 27: continued | 201 check(1, () => x?.v ??= bad(), ['x', 'x.v']); /// 27: continued |
| 204 xGetValue = new C('x'); yGetValue = 1; /// 28: ok | 202 xGetValue = new C('x'); yGetValue = 1; /// 28: ok |
| 205 check(1, () => x?.v ??= y, ['x', 'x.v', 'y', 'x.v=1']); /// 28: continued | 203 check(1, () => x?.v ??= y, ['x', 'x.v', 'y', 'x.v=1']); /// 28: continued |
| 206 } | 204 } |
| OLD | NEW |