// Copyright (c) 2023, 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. /// A variable declared by a pattern is in scope in the pattern but can't be /// used in constant expression inside the pattern. void testSwitchStatement(int x) { switch (x) { case var a && == a: // ^ // [analyzer] unspecified // [cfe] unspecified 'error'; case == b && var b: // ^ // [analyzer] unspecified // [cfe] unspecified 'error'; } } void testSwitchStatementInScope(int x) { const a = 'outer'; const b = 'outer'; switch (x) { case var a && == a: // ^ // [analyzer] unspecified // [cfe] unspecified 'error'; case == b && var b: // ^ // [analyzer] unspecified // [cfe] unspecified 'error'; } } String testSwitchExpression(int x) { return switch (x) { var a && == a => 'error', // ^ // [analyzer] unspecified // [cfe] unspecified == b && var b => 'error', // ^ // [analyzer] unspecified // [cfe] unspecified _ => 'other' }; } String testSwitchExpressionInScope(int x) { const a = 'outer'; const b = 'outer'; return switch (x) { var a && == a => 'error', // ^ // [analyzer] unspecified // [cfe] unspecified == b && var b => 'error', // ^ // [analyzer] unspecified // [cfe] unspecified _ => 'other' }; } void testIfCaseStatement(int x) { if (x case var a && == a) {} // ^ // [analyzer] unspecified // [cfe] unspecified if (x case == b && var b) {} // ^ // [analyzer] unspecified // [cfe] unspecified } void testIfCaseStatementInScope(int x) { const a = 'outer'; const b = 'outer'; if (x case var a && == a) {} // ^ // [analyzer] unspecified // [cfe] unspecified if (x case == b && var b) {} // ^ // [analyzer] unspecified // [cfe] unspecified } List testIfCaseElement(int x) { return [ if (x case var a && == a) 'one', // ^ // [analyzer] unspecified // [cfe] unspecified if (x case == b && var b) 'two' // ^ // [analyzer] unspecified // [cfe] unspecified ]; } List testIfCaseElementInScope(int x) { const a = 'outer'; const b = 'outer'; return [ if (x case var a && == a) 'one', // ^ // [analyzer] unspecified // [cfe] unspecified if (x case == b && var b) 'two' // ^ // [analyzer] unspecified // [cfe] unspecified ]; }