Files
sdk/pkg/front_end/parser_testcases/patterns/issue_51230.dart
T
Jens Johansen 76e2c48428 [parser] Support record type in variable pattern
When seing a '(' after a var/final in `parseVariablePattern` require a
type --- the only allowed thing is a record type, but we can't
generally allow for instance `() async =>` as a record type as that
normally means something else.

Fixes #51230

Bug: https://github.com/dart-lang/sdk/issues/51230
Change-Id: I2e4797595b545d4cb726e36ce4e70a4d775e7e25
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280720
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
2023-02-06 09:12:54 +00:00

43 lines
1.4 KiB
Dart

method1(o) => switch (o) {
final int a => 'working',
final String a => 'working',
final () a => 'working',
final (int, String) a => 'working',
final int a? => 'working',
final String a? => 'working',
final () a? => 'working',
final (int, String) a? => 'working',
(:final () a) => 'working',
(:final (int, String) a) => 'working',
(:final int a?) => 'working',
(:final String a?) => 'working',
(:final () a?) => 'working',
(:final (int, String) a?) => 'working',
_ => '',
};
method2(o) => switch (o) {
final int async => 'working',
final String async => 'working',
// Notice how `() async => ` means something here...
final () async => 'working',
final (int, String) async => 'working',
final int async? => 'working',
final String async? => 'working',
final () async? => 'working',
final (int, String) async? => 'working',
(:final () async) => 'working',
(:final (int, String) async) => 'working',
(:final int async?) => 'working',
(:final String async?) => 'working',
(:final () async?) => 'working',
(:final (int, String) async?) => 'working',
_ => '',
};
void foo() {
// ...and the same thing something different here!
() async => print("async unnamed taking 0 parameters");
(int x) async => print("async unnamed taking 1 parameter");
(int x, int y) async => print("async unnamed taking 2 parameters");
}