| // Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file | |
| // for details. All rights reserved. Use of this source code is governed by a | |
| // BSD-style license that can be found in the LICENSE file. | |
| main() { | |
| // Error to assign to pattern variables in guard. | |
| switch (false) { | |
| case bool x when x = true: | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| print(x); | |
| default: | |
| } | |
| print(switch (false) { | |
| bool x when x = true => x, | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| _ => false, | |
| }); | |
| if (false case bool x when x = true) { | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| print(x); | |
| } | |
| print([ | |
| if (false case bool x when x = true) | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| x, | |
| ]); | |
| // Error even if assignment is nested inside closure. | |
| switch (false) { | |
| case var x | |
| when () { | |
| return x = true; | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| }(): | |
| print(x); | |
| default: | |
| } | |
| print(switch (false) { | |
| var x | |
| when (() { | |
| return x = true; | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| })() => | |
| x, | |
| _ => false, | |
| }); | |
| if (false case var x | |
| when (() { | |
| return x = true; | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| })()) { | |
| print(x); | |
| } | |
| print([ | |
| if (false case var x | |
| when (() { | |
| return x = true; | |
| // ^ | |
| // [analyzer] COMPILE_TIME_ERROR.PATTERN_VARIABLE_ASSIGNMENT_INSIDE_GUARD | |
| // [cfe] Pattern variables can't be assigned inside the guard of the enclosing guarded pattern. | |
| })()) | |
| x, | |
| ]); | |
| // Not an error to assign to other variables. | |
| var local = false; | |
| switch (false) { | |
| case var x when local = true: | |
| // No error. | |
| print(x); | |
| default: | |
| } | |
| print(switch (false) { | |
| var x when local = true => x, // No error. | |
| _ => 0, | |
| }); | |
| if (false case var x when local = true) { | |
| // No error. | |
| print(x); | |
| } | |
| print([ | |
| if (false case var x when local = true) x, // No error. | |
| ]); | |
| // Not an error to assign to pattern variables from other pattern. | |
| switch (false) { | |
| case bool x: | |
| switch (false) { | |
| case bool y when x = true: | |
| // No error. | |
| print(y); | |
| default: | |
| } | |
| print(switch (false) { | |
| bool y when x = true => y, // No error. | |
| _ => 0, | |
| }); | |
| if (false case bool y when x = true) { | |
| // No error. | |
| print(y); | |
| } | |
| print([ | |
| if (false case bool y when x = true) x, // No error. | |
| ]); | |
| } | |
| } |