Files
sdk/pkg/front_end/testcases/patterns/const_patterns_binary.dart
Johnni Winther 0937087af8 [parser] Improve error recovery for constant patterns
This allows the parser to parse constant patterns at lower precedence
level in order to recognize more expressions in this context. To
support this, _parsePrecedenceExpressionLoop special cases a few cases
that should _not_ be parsed as expression in a constant pattern context.

Closes #50996

Change-Id: I43bb0ce52d366bd2dfcf47e12eec5883402f668a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/282100
Commit-Queue: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jens Johansen <jensj@google.com>
2023-02-15 13:49:37 +00:00

87 lines
2.4 KiB
Dart

// 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.
import 'const_patterns_binary.dart' as prefix;
const value = 1;
class Class {
static const value = 2;
}
method<T>(o) {
switch (o) {
case 1 || 2: // Ok
case 1 && 2: // Ok
case 1 as T: // Ok
case const Object(): // Ok
case 1 + 2: // Error
case 1 - 2: // Error
case 1 * 2: // Error
case 1 / 2: // Error
case 1 ~/ 2: // Error
case 1 % 2: // Error
case 1 == 2: // Error
case 1 != 2: // Error
case 1 ^ 2: // Error
case 1 & 2: // Error
case 1 | 2: // Error
case 1 < 2: // Error
case 1 <= 2: // Error
case 1 > 2: // Error
case 1 >= 2: // Error
case 1 << 2: // Error
case 1 >> 2: // Error
case 1 >>> 2: // Error
case 1 + 2 + 3: // Error
case prefix.value as T: // Ok
case prefix.Class.value as T: // Ok
case const 1 as int: // Error
case const 1 + 2: // Error
case const 1 - 2: // Error
case const 1 * 2: // Error
case const 1 / 2: // Error
case const 1 ~/ 2: // Error
case const 1 % 2: // Error
case const 1 == 2: // Error
case const 1 != 2: // Error
case const 1 ^ 2: // Error
case const 1 & 2: // Error
case const 1 | 2: // Error
case const 1 < 2: // Error
case const 1 <= 2: // Error
case const 1 > 2: // Error
case const 1 >= 2: // Error
case const 1 << 2: // Error
case const 1 >> 2: // Error
case const 1 >>> 2: // Error
case const 1 + 2 + 3: // Error
case const Object() == 2: // Error
case const <int>[] as List<T>: // Ok
case const (1 + 2): // Ok
case const (1 - 2): // Ok
case const (1 * 2): // Ok
case const (1 / 2): // Ok
case const (1 ~/ 2): // Ok
case const (1 % 2): // Ok
case const (1 == 2): // Ok
case const (1 != 2): // Ok
case const (1 ^ 2): // Ok
case const (1 & 2): // Ok
case const (1 | 2): // Ok
case const (1 < 2): // Ok
case const (1 <= 2): // Ok
case const (1 > 2): // Ok
case const (1 >= 2): // Ok
case const (1 << 2): // Ok
case const (1 >> 2): // Ok
case const (1 >>> 2): // Ok
case const (1 + 2 + 3): // Ok
case 1 ?? 2: // Error
case o++: // Error
case o--: // Error
case ++o: // Error
case --o: // Error
}
}