blob: 5e12a233de7d73c94e0cb65672cce317fef71af3 [file] [log] [blame] [edit]
// 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.
/// @assertion constantPattern ::= booleanLiteral
/// | nullLiteral
/// | '-'? numericLiteral
/// | stringLiteral
/// | symbolLiteral
/// | identifier
/// | qualifiedName
/// | constObjectExpression
/// | 'const' typeArguments? '[' elements? ']'
/// | 'const' typeArguments? '{' elements? '}'
/// | 'const' '(' expression ')'
///
/// A constant pattern determines if the matched value is equal to the
/// constant's value. We don't allow all expressions here because many
/// expression forms syntactically overlap other kinds of patterns. We avoid
/// ambiguity while supporting terse forms of the most common constant
/// expressions like so:
/// ...
/// It is a compile-time error if a constant pattern's value is not a valid
/// constant expression.
///
/// @description Check that a syntax error is emitted for a term which could be
/// derived from <caseHead> in Dart 2.19, but cannot be derived from <caseHead>
/// when patterns are added to Dart. Test if-case statement
/// @author sgrekhov22@gmail.com
main() {
Object value = Object();
if (value case 1 + 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 - 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 * 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 ^ 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 % 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 ~/ 2) {
// ^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 << 2) {
// ^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 >> 2) {
// ^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 >>> 2) {
// ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 > 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 >= 2) {
// ^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 < 2) {
// ^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
if (value case 1 <= 2) {
// ^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
}
}