// 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. import "package:expect/expect.dart"; main() { // Variables in shared cases must agree on finality if used in the body. switch ((0, 1)) { case (0, int x): case (1, final int x): print(x); // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] Variable pattern 'x' doesn't have the same type or finality in all cases. } switch ((0, 1)) { case (2, var x): case (3, final x): print(x); // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] Variable pattern 'x' doesn't have the same type or finality in all cases. } // Variables in shared cases must agree on type if used in the body. switch ((0, 1)) { case (0, int x): case (1, num x): print(x); // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] Variable pattern 'x' doesn't have the same type or finality in all cases. } switch ((0, 's')) { case (0, int x): case (2, var x): // Infer String. print(x); // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] Variable pattern 'x' doesn't have the same type or finality in all cases. } // Variables must be defined in all cases if used in body. switch ((0, 1)) { case (0, var unique): case (1, var inTwo): case (2, var inTwo): print(unique); // ^^^^^^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] The variable 'unique' is available in some, but not all cases that share this body. print(inTwo); // ^^^^^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] The variable 'inTwo' is available in some, but not all cases that share this body. } // Mismatched variable types because of inference from a promoted type. Object value = 1; // Promote value to int. if (value is int) { switch ((0, value)) { case (0, var a): case (1, Object a): print(a); // ^ // [analyzer] COMPILE_TIME_ERROR.INVALID_PATTERN_VARIABLE_IN_SHARED_CASE_SCOPE // [cfe] Variable pattern 'a' doesn't have the same type or finality in all cases. } } }