Skip to content

Commit 624ff0b

Browse files
johnniwintherCommit Queue
authored and
Commit Queue
committed
[cfe] Update checkState to handle some error cases
Change-Id: Iadce61ac289b956f6f6012ec2bab5bf0bd1db15b Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/284702 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Johnni Winther <[email protected]>
1 parent 4f30b5c commit 624ff0b

10 files changed

+268
-1
lines changed

pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4448,6 +4448,7 @@ class BodyBuilder extends StackListenerImpl
44484448
ValueKinds.Expression,
44494449
ValueKinds.ProblemBuilder,
44504450
ValueKinds.NamedExpression,
4451+
ValueKinds.ParserRecovery,
44514452
]),
44524453
count)));
44534454

@@ -9307,7 +9308,12 @@ class BodyBuilder extends StackListenerImpl
93079308
ValueKinds.Generator,
93089309
ValueKinds.ProblemBuilder,
93099310
]),
9310-
ValueKinds.Pattern,
9311+
unionOfKinds([
9312+
ValueKinds.Expression,
9313+
ValueKinds.Generator,
9314+
ValueKinds.ProblemBuilder,
9315+
ValueKinds.Pattern
9316+
]),
93119317
ValueKinds.AnnotationListOrNull,
93129318
]));
93139319
Expression initializer = popForValue();
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
// Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
method() {
6+
final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
7+
8+
final (42) = 42;
9+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/patterns/error_cases.dart:6:9: Error: Expected ';' after this.
6+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
7+
// ^^^^^^
8+
//
9+
// pkg/front_end/testcases/patterns/error_cases.dart:6:16: Error: Expected an identifier, but got ':'.
10+
// Try inserting an identifier before ':'.
11+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
12+
// ^
13+
//
14+
// pkg/front_end/testcases/patterns/error_cases.dart:6:17: Error: Undefined name 'areaAsInt'.
15+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
16+
// ^^^^^^^^^
17+
//
18+
// pkg/front_end/testcases/patterns/error_cases.dart:6:38: Error: Expected an identifier, but got ':'.
19+
// Try inserting an identifier before ':'.
20+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
21+
// ^
22+
//
23+
// pkg/front_end/testcases/patterns/error_cases.dart:6:39: Error: Undefined name 'areaAsInt'.
24+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
25+
// ^^^^^^^^^
26+
//
27+
// pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
28+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
29+
// ^
30+
//
31+
// pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
32+
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
33+
// final (42) = 42;
34+
// ^
35+
//
36+
import self as self;
37+
import "dart:_internal" as _in;
38+
39+
static method method() → dynamic {
40+
final dynamic Square;
41+
invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
42+
final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
43+
^";
44+
if(!invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
45+
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
46+
final (42) = 42;
47+
^")
48+
throw new _in::ReachabilityError::•();
49+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/patterns/error_cases.dart:6:9: Error: Expected ';' after this.
6+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
7+
// ^^^^^^
8+
//
9+
// pkg/front_end/testcases/patterns/error_cases.dart:6:16: Error: Expected an identifier, but got ':'.
10+
// Try inserting an identifier before ':'.
11+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
12+
// ^
13+
//
14+
// pkg/front_end/testcases/patterns/error_cases.dart:6:17: Error: Undefined name 'areaAsInt'.
15+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
16+
// ^^^^^^^^^
17+
//
18+
// pkg/front_end/testcases/patterns/error_cases.dart:6:38: Error: Expected an identifier, but got ':'.
19+
// Try inserting an identifier before ':'.
20+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
21+
// ^
22+
//
23+
// pkg/front_end/testcases/patterns/error_cases.dart:6:39: Error: Undefined name 'areaAsInt'.
24+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
25+
// ^^^^^^^^^
26+
//
27+
// pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
28+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
29+
// ^
30+
//
31+
// pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
32+
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
33+
// final (42) = 42;
34+
// ^
35+
//
36+
import self as self;
37+
import "dart:_internal" as _in;
38+
39+
static method method() → dynamic {
40+
final dynamic Square;
41+
invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
42+
final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
43+
^";
44+
if(!invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
45+
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
46+
final (42) = 42;
47+
^")
48+
throw new _in::ReachabilityError::•();
49+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
method() {}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
method() {}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/patterns/error_cases.dart:6:9: Error: Expected ';' after this.
6+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
7+
// ^^^^^^
8+
//
9+
// pkg/front_end/testcases/patterns/error_cases.dart:6:16: Error: Expected an identifier, but got ':'.
10+
// Try inserting an identifier before ':'.
11+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
12+
// ^
13+
//
14+
// pkg/front_end/testcases/patterns/error_cases.dart:6:17: Error: Undefined name 'areaAsInt'.
15+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
16+
// ^^^^^^^^^
17+
//
18+
// pkg/front_end/testcases/patterns/error_cases.dart:6:38: Error: Expected an identifier, but got ':'.
19+
// Try inserting an identifier before ':'.
20+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
21+
// ^
22+
//
23+
// pkg/front_end/testcases/patterns/error_cases.dart:6:39: Error: Undefined name 'areaAsInt'.
24+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
25+
// ^^^^^^^^^
26+
//
27+
// pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
28+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
29+
// ^
30+
//
31+
// pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
32+
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
33+
// final (42) = 42;
34+
// ^
35+
//
36+
import self as self;
37+
import "dart:_internal" as _in;
38+
39+
static method method() → dynamic {
40+
final dynamic Square;
41+
invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
42+
final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
43+
^";
44+
if(!invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
45+
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
46+
final (42) = 42;
47+
^")
48+
throw new _in::ReachabilityError::•();
49+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/patterns/error_cases.dart:6:9: Error: Expected ';' after this.
6+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
7+
// ^^^^^^
8+
//
9+
// pkg/front_end/testcases/patterns/error_cases.dart:6:16: Error: Expected an identifier, but got ':'.
10+
// Try inserting an identifier before ':'.
11+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
12+
// ^
13+
//
14+
// pkg/front_end/testcases/patterns/error_cases.dart:6:17: Error: Undefined name 'areaAsInt'.
15+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
16+
// ^^^^^^^^^
17+
//
18+
// pkg/front_end/testcases/patterns/error_cases.dart:6:38: Error: Expected an identifier, but got ':'.
19+
// Try inserting an identifier before ':'.
20+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
21+
// ^
22+
//
23+
// pkg/front_end/testcases/patterns/error_cases.dart:6:39: Error: Undefined name 'areaAsInt'.
24+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
25+
// ^^^^^^^^^
26+
//
27+
// pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
28+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
29+
// ^
30+
//
31+
// pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
32+
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
33+
// final (42) = 42;
34+
// ^
35+
//
36+
import self as self;
37+
import "dart:_internal" as _in;
38+
39+
static method method() → dynamic {
40+
final dynamic Square;
41+
invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
42+
final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
43+
^";
44+
if(!invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
45+
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
46+
final (42) = 42;
47+
^")
48+
throw new _in::ReachabilityError::•();
49+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
library /*isNonNullableByDefault*/;
2+
import self as self;
3+
4+
static method method() → dynamic
5+
;
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
library /*isNonNullableByDefault*/;
2+
//
3+
// Problems in library:
4+
//
5+
// pkg/front_end/testcases/patterns/error_cases.dart:6:9: Error: Expected ';' after this.
6+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
7+
// ^^^^^^
8+
//
9+
// pkg/front_end/testcases/patterns/error_cases.dart:6:16: Error: Expected an identifier, but got ':'.
10+
// Try inserting an identifier before ':'.
11+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
12+
// ^
13+
//
14+
// pkg/front_end/testcases/patterns/error_cases.dart:6:17: Error: Undefined name 'areaAsInt'.
15+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
16+
// ^^^^^^^^^
17+
//
18+
// pkg/front_end/testcases/patterns/error_cases.dart:6:38: Error: Expected an identifier, but got ':'.
19+
// Try inserting an identifier before ':'.
20+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
21+
// ^
22+
//
23+
// pkg/front_end/testcases/patterns/error_cases.dart:6:39: Error: Undefined name 'areaAsInt'.
24+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
25+
// ^^^^^^^^^
26+
//
27+
// pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
28+
// final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
29+
// ^
30+
//
31+
// pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
32+
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
33+
// final (42) = 42;
34+
// ^
35+
//
36+
import self as self;
37+
import "dart:_internal" as _in;
38+
39+
static method method() → dynamic {
40+
final dynamic Square;
41+
invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:6:50: Error: Can't assign to this.
42+
final Square(:areaAsInt) || Square(:areaAsInt) = Square(2);
43+
^";
44+
if(!invalid-expression "pkg/front_end/testcases/patterns/error_cases.dart:8:10: Error: Refutable patterns can't be used in an irrefutable context.
45+
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
46+
final (42) = 42;
47+
^")
48+
throw new _in::ReachabilityError::•();
49+
}

0 commit comments

Comments
 (0)