front_end: make use of TypeAnalyzer.analyzeConstantPattern.

This will allow the front end to take advantage of flow analysis
implied by a constant pattern (e.g. `case null` cause the scrutinee to
be promoted in later cases).

Fixes #51206.

Change-Id: Ic8516abb4e051ffca0d4e7698339282812020cae
Bug: https://github.com/dart-lang/sdk/issues/51206
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/281261
Commit-Queue: Paul Berry <paulberry@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Chloe Stefantsova <cstefantsova@google.com>
This commit is contained in:
Paul Berry 2023-02-09 18:41:01 +00:00 committed by Commit Queue
parent 403d5c93c3
commit 0f11c4ed5a
46 changed files with 252 additions and 81 deletions

View file

@ -369,8 +369,10 @@ mixin TypeAnalyzer<
///
/// See [dispatchPattern] for the meaning of [context].
///
/// Returns the static type of [expression].
///
/// Stack effect: pushes (Expression).
void analyzeConstantPattern(
Type analyzeConstantPattern(
MatchContext<Node, Expression, Pattern, Type, Variable> context,
Node node,
Expression expression) {
@ -382,8 +384,8 @@ mixin TypeAnalyzer<
errors?.refutablePatternInIrrefutableContext(node, irrefutableContext);
}
Type matchedType = flow.getMatchedValueType();
Type staticType = analyzeExpression(expression, matchedType);
flow.constantPattern_end(expression, staticType,
Type expressionType = analyzeExpression(expression, matchedType);
flow.constantPattern_end(expression, expressionType,
patternsEnabled: options.patternsEnabled);
// Stack: (Expression)
if (errors != null && !options.patternsEnabled) {
@ -391,18 +393,19 @@ mixin TypeAnalyzer<
if (switchScrutinee != null) {
bool nullSafetyEnabled = options.nullSafetyEnabled;
bool matches = nullSafetyEnabled
? operations.isSubtypeOf(staticType, matchedType)
: operations.isAssignableTo(staticType, matchedType);
? operations.isSubtypeOf(expressionType, matchedType)
: operations.isAssignableTo(expressionType, matchedType);
if (!matches) {
errors.caseExpressionTypeMismatch(
caseExpression: expression,
scrutinee: switchScrutinee,
caseExpressionType: staticType,
caseExpressionType: expressionType,
scrutineeType: matchedType,
nullSafetyEnabled: nullSafetyEnabled);
}
}
}
return expressionType;
}
/// Computes the type schema for a constant pattern.

View file

@ -9523,8 +9523,8 @@ class InferenceVisitorImpl extends InferenceVisitorBase
int? stackBase;
assert(checkStackBase(node, stackBase = stackHeight));
DartType matchedType = flow.getMatchedValueType();
node.expressionType = analyzeExpression(node.expression, matchedType);
node.expressionType =
analyzeConstantPattern(context, node, node.expression);
assert(checkStack(node, stackBase, [
/* expression = */ ValueKinds.Expression,

View file

@ -35,5 +35,5 @@ method(x, y, z) {
definitelyAssignedFinal] = y; // Error
Class(field1: definitelyAssignedLateFinal, // Error
field2: [[notDefinitelyAssignedFinal, _], // Error
[1, notDefinitelyAssignedLateFinal]]) = z; // Ok
[_, notDefinitelyAssignedLateFinal]]) = z; // Ok
}

View file

@ -108,12 +108,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#3#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t12 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t13 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t14 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t13 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t14 = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t15 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -108,14 +108,13 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#3#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t12 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t13 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} && (let final core::int? #t14 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t13 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t14 = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in true) && (let final core::int? #t15 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}
Extra constant evaluation status:

View file

@ -123,12 +123,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#3#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t9 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t10 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t11 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t10 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t11 = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t12 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -123,12 +123,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#3#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t9 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t10 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t11 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t10 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t11 = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t12 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -123,12 +123,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#3#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t9 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t10 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} && (let final core::int? #t11 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t10 = (#2#9#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16#func(){() → dynamic} is{ForNonNullableByDefault} core::List<dynamic> && (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t11 = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(0){(core::int) → dynamic} in true) && (let final core::int? #t12 = #notDefinitelyAssignedLateFinal = (#2#16#func(){() → dynamic} as{ForNonNullableByDefault} core::List<dynamic>).{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int? in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -22,6 +22,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
// String returnImplicit() /* error */ {
// ^
@ -42,6 +47,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
@ -125,6 +135,10 @@ static method caseReturn2(self::Enum e) → self::Enum {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
@ -194,6 +208,10 @@ static method localFunctions() → dynamic {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
core::bool b = false;
core::int? local1 = (() → core::int? {

View file

@ -22,6 +22,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
// String returnImplicit() /* error */ {
// ^
@ -42,6 +47,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
@ -125,6 +135,10 @@ static method caseReturn2(self::Enum e) → self::Enum {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
@ -194,6 +208,10 @@ static method localFunctions() → dynamic {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
core::bool b = false;
core::int? local1 = (() → core::int? {

View file

@ -22,6 +22,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
// String returnImplicit() /* error */ {
// ^
@ -42,6 +47,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
@ -125,6 +135,10 @@ static method caseReturn2(self::Enum e) → self::Enum {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
@ -194,6 +208,10 @@ static method localFunctions() → dynamic {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
core::bool b = false;
core::int? local1 = (() → core::int? {

View file

@ -22,6 +22,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
// String returnImplicit() /* error */ {
// ^
@ -42,6 +47,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
@ -125,6 +135,10 @@ static method caseReturn2(self::Enum e) → self::Enum {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
@ -194,6 +208,10 @@ static method localFunctions() → dynamic {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
core::bool b = false;
core::int? local1 = (() → core::int? {

View file

@ -22,6 +22,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
// String returnImplicit() /* error */ {
// ^
@ -42,6 +47,11 @@ library /*isNonNullableByDefault*/;
// FutureOr<int> returnAsync3() async {} // error
// ^
//
// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
// - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
// Enum caseReturn2(Enum e) /* error */ {
// ^
//
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
@ -125,6 +135,10 @@ static method caseReturn2(self::Enum e) → self::Enum {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
@ -194,6 +208,10 @@ static method localFunctions() → dynamic {
else {
}
}
return invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
- 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
Enum caseReturn2(Enum e) /* error */ {
^" in null;
}
core::bool b = false;
core::int? local1 = (() → core::int? {

View file

@ -33,7 +33,7 @@ static method test(dynamic x) → dynamic {
}
}
{
final dynamic #4#0 = x;
final core::int #4#0 = x{core::int};
if(let final dynamic #t8 = #4#0 as{ForNonNullableByDefault} core::String in true) {
return 4;
}

View file

@ -37,7 +37,7 @@ static method test(dynamic x) → dynamic {
}
}
{
final dynamic #4#0 = x;
final core::int #4#0 = x{core::int};
if(let final core::String #t8 = #4#0 as{ForNonNullableByDefault} core::String in true) {
return 4;
}

View file

@ -33,7 +33,7 @@ static method test(dynamic x) → dynamic {
}
}
{
final dynamic #4#0 = x;
final core::int #4#0 = x{core::int};
if(let final dynamic #t8 = #4#0 as{ForNonNullableByDefault} core::String in true) {
return 4;
}

View file

@ -33,7 +33,7 @@ static method test(dynamic x) → dynamic {
}
}
{
final dynamic #4#0 = x;
final core::int #4#0 = x{core::int};
if(let final dynamic #t8 = #4#0 as{ForNonNullableByDefault} core::String in true) {
return 4;
}

View file

@ -37,7 +37,7 @@ static method test(dynamic x) → dynamic {
}
}
{
final dynamic #4#0 = x;
final core::int #4#0 = x{core::int};
if(let final core::String #t8 = #4#0 as{ForNonNullableByDefault} core::String in true) {
return 4;
}

View file

@ -274,7 +274,7 @@ class Class extends core::Object /*hasConstConstructor*/ {
else
if(#1#0 is{ForNonNullableByDefault} void && (let final dynamic #t1 = fun = #1#0{void} in true)) {
{
() → Never {};
() → Null {};
invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:40:25: Error: This couldn't be parsed.
case void fun() {}: // Error
^";

View file

@ -274,7 +274,7 @@ class Class extends core::Object /*hasConstConstructor*/ {
else
if(#1#0 is{ForNonNullableByDefault} void && (let final void #t1 = fun = #1#0{void} in true)) {
{
() → Never {};
() → Null {};
invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:40:25: Error: This couldn't be parsed.
case void fun() {}: // Error
^";

View file

@ -274,7 +274,7 @@ class Class extends core::Object /*hasConstConstructor*/ {
else
if(#1#0 is{ForNonNullableByDefault} void && (let final dynamic #t1 = fun = #1#0{void} in true)) {
{
() → Never {};
() → Null {};
invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:40:25: Error: This couldn't be parsed.
case void fun() {}: // Error
^";

View file

@ -274,7 +274,7 @@ class Class extends core::Object /*hasConstConstructor*/ {
else
if(#1#0 is{ForNonNullableByDefault} void && (let final dynamic #t1 = fun = #1#0{void} in true)) {
{
() → Never {};
() → Null {};
invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:40:25: Error: This couldn't be parsed.
case void fun() {}: // Error
^";

View file

@ -274,7 +274,7 @@ class Class extends core::Object /*hasConstConstructor*/ {
else
if(#1#0 is{ForNonNullableByDefault} void && (let final void #t1 = fun = #1#0{void} in true)) {
{
() → Never {};
() → Null {};
invalid-expression "pkg/front_end/testcases/patterns/const_patterns.dart:40:25: Error: This couldn't be parsed.
case void fun() {}: // Error
^";

View file

@ -27,6 +27,11 @@ library /*isNonNullableByDefault*/;
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@ -67,7 +72,10 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t8 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
@ -77,5 +85,4 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
constants {
#C1 = 2
#C2 = 1
}

View file

@ -27,6 +27,11 @@ library /*isNonNullableByDefault*/;
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@ -73,7 +78,10 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t8 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
@ -83,5 +91,4 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
constants {
#C1 = 2
#C2 = 1
}

View file

@ -27,6 +27,11 @@ library /*isNonNullableByDefault*/;
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@ -67,7 +72,10 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t8 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
@ -77,5 +85,4 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
constants {
#C1 = 2
#C2 = 1
}

View file

@ -27,6 +27,11 @@ library /*isNonNullableByDefault*/;
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@ -67,7 +72,10 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t8 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
@ -77,5 +85,4 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
constants {
#C1 = 2
#C2 = 1
}

View file

@ -27,6 +27,11 @@ library /*isNonNullableByDefault*/;
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
// pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
// ^
//
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
@ -73,7 +78,10 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
if(!(#2#0 is{ForNonNullableByDefault} self::Class && (let final dynamic #t4 = a = #2#0{self::Class}.{self::Class::field1}{dynamic} in true) && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:34: Error: Variable 'e' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:42: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^") && (let final dynamic #t8 = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_declares.dart:14:49: Error: Variable 'f' can't be declared in a pattern assignment.
Try using a preexisting variable or changing the assignment to a pattern variable declaration.
Class(field1: a, field2: [[var e, _], [1, var f]]) = z;
^")))))
@ -83,5 +91,4 @@ Try using a preexisting variable or changing the assignment to a pattern variabl
constants {
#C1 = 2
#C2 = 1
}

View file

@ -35,5 +35,5 @@ method(x, y, z) {
definitelyAssignedFinal] = y; // Error
Class(field1: definitelyAssignedLateFinal, // Error
field2: [[notDefinitelyAssignedFinal, _], // Error
[1, notDefinitelyAssignedLateFinal]]) = z; // Ok
[_, notDefinitelyAssignedLateFinal]]) = z; // Ok
}

View file

@ -73,12 +73,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t8 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -79,12 +79,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final core::int #t7 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final core::int #t8 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -73,12 +73,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t8 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -73,12 +73,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final dynamic #t7 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final dynamic #t8 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -79,12 +79,11 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
Class(field1: definitelyAssignedLateFinal, // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^^") && (#2#3 is{ForNonNullableByDefault} core::List<dynamic> && #2#3{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#2#9 is{ForNonNullableByDefault} core::List<dynamic> && #2#9{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t5 = #2#9{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in invalid-expression "pkg/front_end/testcases/patterns/pattern_assignment_final.dart:37:17: Error: Final variable 'notDefinitelyAssignedFinal' might already be assigned at this point.
field2: [[notDefinitelyAssignedFinal, _], // Error
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && #C2 =={core::num::==}{(core::Object) → core::bool} #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} && (let final core::int #t7 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
^^^^^^^^^^^^^^^^^^^^^^^^^^") && (let final dynamic #t6 = #2#9{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} in true)) && (#2#16 is{ForNonNullableByDefault} core::List<dynamic> && #2#16{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t7 = #2#16{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true) && (let final core::int #t8 = notDefinitelyAssignedLateFinal = #2#16{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic} as{ForNonNullableByDefault} core::int in true)))))
throw new _in::ReachabilityError::•();
} =>#2#0;
}
constants {
#C1 = 2
#C2 = 1
}

View file

@ -1,11 +1,22 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// (null) = null;
// ^
//
import self as self;
import "dart:_internal" as _in;
static method main() → dynamic {
block {
final has-declared-initializer dynamic #0#0 = null;
if(!(#0#0 == null))
if(!invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
(null) = null;
^")
throw new _in::ReachabilityError::•();
} =>#0#0;
}

View file

@ -1,11 +1,22 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// (null) = null;
// ^
//
import self as self;
import "dart:_internal" as _in;
static method main() → dynamic {
block {
final has-declared-initializer dynamic #0#0 = null;
if(!(#0#0 == null))
if(!invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
(null) = null;
^")
throw new _in::ReachabilityError::•();
} =>#0#0;
}

View file

@ -1,11 +1,22 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// (null) = null;
// ^
//
import self as self;
import "dart:_internal" as _in;
static method main() → dynamic {
block {
final has-declared-initializer dynamic #0#0 = null;
if(!(#0#0 == null))
if(!invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
(null) = null;
^")
throw new _in::ReachabilityError::•();
} =>#0#0;
}

View file

@ -1,11 +1,22 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// (null) = null;
// ^
//
import self as self;
import "dart:_internal" as _in;
static method main() → dynamic {
block {
final has-declared-initializer dynamic #0#0 = null;
if(!(#0#0 == null))
if(!invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
(null) = null;
^")
throw new _in::ReachabilityError::•();
} =>#0#0;
}

View file

@ -1,11 +1,22 @@
library /*isNonNullableByDefault*/;
//
// Problems in library:
//
// pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
// Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
// (null) = null;
// ^
//
import self as self;
import "dart:_internal" as _in;
static method main() → dynamic {
block {
final has-declared-initializer dynamic #0#0 = null;
if(!(#0#0 == null))
if(!invalid-expression "pkg/front_end/testcases/rasta/malformed_function.dart:6:4: Error: Refutable patterns can't be used in an irrefutable context.
Try using an if-case, a 'switch' statement, or a 'switch' expression instead.
(null) = null;
^")
throw new _in::ReachabilityError::•();
} =>#0#0;
}

View file

@ -18,7 +18,7 @@ static method main() → void {
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #1#0) {
{
(() → Never {
(() → Null {
#L2:
{
core::int #t1 = -1;
@ -46,7 +46,7 @@ static method main() → void {
}
}
}
})(){() → Never};
})(){() → Null};
}
}
}

View file

@ -18,7 +18,7 @@ static method main() → void {
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #1#0) {
{
(() → Never {
(() → Null {
#L2:
{
core::int #t1 = -1;
@ -46,7 +46,7 @@ static method main() → void {
}
}
}
})(){() → Never};
})(){() → Null};
}
}
}

View file

@ -1,7 +1,6 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
static method main() → void {
core::List<core::String> whereWasI = <core::String>[];
@ -19,17 +18,17 @@ static method main() → void {
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #1#0) {
{
let final Never #t1 = (() → Never {
(() → Null {
#L2:
{
core::int #t2 = -1;
core::int #t1 = -1;
final core::int #0#0 = inner;
if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0)
#t2 = 0;
#t1 = 0;
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #0#0)
#t2 = 1;
switch(#t2) {
#t1 = 1;
switch(#t1) {
#L3:
case #C1:
{
@ -47,7 +46,7 @@ static method main() → void {
}
}
}
})(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
})(){() → Null};
}
}
}

View file

@ -1,7 +1,6 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
static method main() → void {
core::List<core::String> whereWasI = <core::String>[];
@ -19,17 +18,17 @@ static method main() → void {
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #1#0) {
{
let final Never #t1 = (() → Never {
(() → Null {
#L2:
{
core::int #t2 = -1;
core::int #t1 = -1;
final core::int #0#0 = inner;
if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0)
#t2 = 0;
#t1 = 0;
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #0#0)
#t2 = 1;
switch(#t2) {
#t1 = 1;
switch(#t1) {
#L3:
case #C1:
{
@ -47,7 +46,7 @@ static method main() → void {
}
}
}
})(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
})(){() → Null};
}
}
}

View file

@ -1,7 +1,6 @@
library /*isNonNullableByDefault*/;
import self as self;
import "dart:core" as core;
import "dart:_internal" as _in;
static method main() → void {
core::List<core::String> whereWasI = core::_GrowableList::•<core::String>(0);
@ -19,17 +18,17 @@ static method main() → void {
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #1#0) {
{
let final Never #t1 = (() → Never {
(() → Null {
#L2:
{
core::int #t2 = -1;
core::int #t1 = -1;
final core::int #0#0 = inner;
if(#C1 =={core::num::==}{(core::Object) → core::bool} #0#0)
#t2 = 0;
#t1 = 0;
else
if(#C2 =={core::num::==}{(core::Object) → core::bool} #0#0)
#t2 = 1;
switch(#t2) {
#t1 = 1;
switch(#t1) {
#L3:
case #C1:
{
@ -47,7 +46,7 @@ static method main() → void {
}
}
}
})(){() → Never} in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
})(){() → Null};
}
}
}

View file

@ -172,6 +172,7 @@ rasta/issue_000041: RuntimeError
rasta/issue_000042: RuntimeError
rasta/issue_000044: RuntimeError
rasta/malformed_const_constructor: RuntimeError
rasta/malformed_function: RuntimeError
rasta/parser_error: RuntimeError
rasta/static: RuntimeError
rasta/super: RuntimeError

View file

@ -254,6 +254,7 @@ rasta/issue_000041: RuntimeError
rasta/issue_000042: RuntimeError
rasta/issue_000044: RuntimeError
rasta/malformed_const_constructor: RuntimeError
rasta/malformed_function: RuntimeError
rasta/parser_error: RuntimeError
rasta/static: RuntimeError
rasta/super: RuntimeError
@ -276,7 +277,6 @@ regress/issue_35260: RuntimeError # Expected
regress/issue_35266: RuntimeError # Expected
regress/issue_37285: RuntimeError
regress/issue_39091_2: RuntimeError
regress/issue_39040: RuntimeError # https://github.com/dart-lang/sdk/issues/51206
runtime_checks_new/contravariant_generic_return_with_compound_assign_implicit_downcast: RuntimeError
runtime_checks_new/mixin_forwarding_stub_getter: TypeCheckError
set_literals/disambiguation_rule2: RuntimeError