Revert "[cfe] Handle conditional await in CFE"
This reverts commit 14032a6209e091dcd755582aa0edfa6a860427da.
Reason for revert : Several customer flutter tests are failing because
of the change in behavior.
TEST=revert of previous CL.
Change-Id: Ia235aa93b9c81fbab066803dc0625856f93acceb
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/181860
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
diff --git a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
index 4029c5c..78dc0c5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/closure_context.dart
@@ -546,75 +546,30 @@
statement.expression.fileOffset,
noLength)
..parent = statement;
- } else {
- DartType futureOrType =
- inferrer.computeGreatestClosure2(_returnContext);
- if (flattenedExpressionType is! VoidType &&
- !inferrer.typeSchemaEnvironment
- .performNullabilityAwareSubtypeCheck(
- flattenedExpressionType, futureValueType)
- .isSubtypeWhenUsingNullabilities()) {
- // It is a compile-time error if s is `return e;`, flatten(S) is not
- // void, S is not assignable to T_v, and flatten(S) is not a subtype
- // of T_v.
- statement.expression = inferrer.ensureAssignable(
- futureValueType, expressionType, statement.expression,
- fileOffset: statement.expression.fileOffset,
- runtimeCheckedType: futureOrType,
- declaredContextType: returnType,
- isVoidAllowed: false,
- errorTemplate: templateInvalidReturnAsync,
- nullabilityErrorTemplate: templateInvalidReturnAsyncNullability,
- nullabilityPartErrorTemplate:
- templateInvalidReturnAsyncPartNullability,
- nullabilityNullErrorTemplate:
- templateInvalidReturnAsyncNullabilityNull,
- nullabilityNullTypeErrorTemplate:
- templateInvalidReturnAsyncNullabilityNullType)
- ..parent = statement;
- }
- // For `return e`:
- // When `f` is an asynchronous non-generator with future value type
- // T_v, evaluation proceeds as follows:
- //
- // The expression `e` is evaluated to an object `o`.
- // If the run-time type of `o` is a subtype of `Future<T_v>`,
- // let `v` be a fresh variable bound to `o` and
- // evaluate `await v` to an object `r`;
- // otherwise let `r` be `o`.
- // A dynamic error occurs unless the dynamic type of `r`
- // is a subtype of the actual value of T_v.
- // Then the return statement `s` completes returning `r`.
- DartType futureType = new InterfaceType(
- inferrer.coreTypes.futureClass,
- Nullability.nonNullable,
- [futureValueType]);
- VariableDeclaration variable;
- Expression isOperand;
- Expression awaitOperand;
- Expression resultExpression;
- if (isPureExpression(statement.expression)) {
- isOperand = clonePureExpression(statement.expression);
- awaitOperand = clonePureExpression(statement.expression);
- resultExpression = statement.expression;
- } else {
- variable = createVariable(statement.expression, expressionType);
- isOperand = createVariableGet(variable);
- awaitOperand = createVariableGet(variable);
- resultExpression = createVariableGet(variable);
- }
- Expression replacement = new ConditionalExpression(
- new IsExpression(isOperand, futureType)
- ..fileOffset = statement.fileOffset,
- new AwaitExpression(awaitOperand)
- ..fileOffset = statement.fileOffset,
- resultExpression,
- futureOrType)
- ..fileOffset = statement.fileOffset;
- if (variable != null) {
- replacement = createLet(variable, replacement);
- }
- statement.expression = replacement..parent = statement;
+ } else if (flattenedExpressionType is! VoidType &&
+ !inferrer.typeSchemaEnvironment
+ .performNullabilityAwareSubtypeCheck(
+ flattenedExpressionType, futureValueType)
+ .isSubtypeWhenUsingNullabilities()) {
+ // It is a compile-time error if s is `return e;`, flatten(S) is not
+ // void, S is not assignable to T_v, and flatten(S) is not a subtype
+ // of T_v.
+ statement.expression = inferrer.ensureAssignable(
+ futureValueType, expressionType, statement.expression,
+ fileOffset: statement.expression.fileOffset,
+ runtimeCheckedType:
+ inferrer.computeGreatestClosure2(_returnContext),
+ declaredContextType: returnType,
+ isVoidAllowed: false,
+ errorTemplate: templateInvalidReturnAsync,
+ nullabilityErrorTemplate: templateInvalidReturnAsyncNullability,
+ nullabilityPartErrorTemplate:
+ templateInvalidReturnAsyncPartNullability,
+ nullabilityNullErrorTemplate:
+ templateInvalidReturnAsyncNullabilityNull,
+ nullabilityNullTypeErrorTemplate:
+ templateInvalidReturnAsyncNullabilityNullType)
+ ..parent = statement;
}
}
} else {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 4dd7287..0b50fbb 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -2514,13 +2514,16 @@
// `void` if `B’` contains no `yield` expressions. Otherwise, let `M` be
// the least upper bound of the types of the `return` expressions in `B’`,
// or `void` if `B’` contains no `return` expressions.
+ DartType inferredReturnType;
if (needToSetReturnType) {
- DartType inferredReturnType = closureContext.inferReturnType(this,
+ inferredReturnType = closureContext.inferReturnType(this,
hasImplicitReturn: flowAnalysis.isReachable);
+ }
- // Then the result of inference is `<T0, ..., Tn>(R0 x0, ..., Rn xn) B`
- // with type `<T0, ..., Tn>(R0, ..., Rn) -> M'` (with some of the `Ri` and
- // `xi` denoted as optional or named parameters, if appropriate).
+ // Then the result of inference is `<T0, ..., Tn>(R0 x0, ..., Rn xn) B` with
+ // type `<T0, ..., Tn>(R0, ..., Rn) -> M’` (with some of the `Ri` and `xi`
+ // denoted as optional or named parameters, if appropriate).
+ if (needToSetReturnType) {
instrumentation?.record(uriForInstrumentation, fileOffset, 'returnType',
new InstrumentationValueForType(inferredReturnType));
function.returnType = inferredReturnType;
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index e422e9d..572493d 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -868,7 +868,6 @@
printf
println
proc
-proceeds
producers
product
progresses
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index d3bc3e1a..55be1a1 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -737,7 +737,6 @@
unassignment
unawaited
unbreak
-uncaught
unconverted
uncover
uncovers
diff --git a/pkg/front_end/test/text_representation/data/expressions.dart b/pkg/front_end/test/text_representation/data/expressions.dart
index 4d70d21..bf8c23c 100644
--- a/pkg/front_end/test/text_representation/data/expressions.dart
+++ b/pkg/front_end/test/text_representation/data/expressions.dart
@@ -382,9 +382,7 @@
exprMap() => {0: "foo", 1: "bar"};
/*member: exprAwait:await o*/
-exprAwait(o) async {
- await o;
-}
+exprAwait(o) async => await o;
/*member: exprLoadLibrary:prefix.loadLibrary()*/
exprLoadLibrary() => prefix.loadLibrary();
diff --git a/pkg/front_end/test/text_representation/text_representation_test.dart b/pkg/front_end/test/text_representation/text_representation_test.dart
index d9019d0..f804385 100644
--- a/pkg/front_end/test/text_representation/text_representation_test.dart
+++ b/pkg/front_end/test/text_representation/text_representation_test.dart
@@ -156,16 +156,14 @@
@override
String computeMemberValue(Id id, Member node) {
+ if (node.name.text == 'stmtVariableDeclarationMulti') {
+ print(node);
+ }
if (node.name.text.startsWith(expressionMarker)) {
if (node is Procedure) {
Statement body = node.function.body;
if (body is ReturnStatement) {
return body.expression.toText(strategy);
- } else if (body is Block &&
- body.statements.isNotEmpty &&
- body.statements.first is ExpressionStatement) {
- ExpressionStatement statement = body.statements.first;
- return statement.expression.toText(strategy);
}
} else if (node is Field && node.initializer != null) {
return node.initializer.toText(strategy);
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
index 74694bf..0b84933 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.expect
@@ -134,28 +134,28 @@
await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
core::print(s);
}
- return let final core::String #t8 = "hest" in #t8 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t8 : #t8;
+ return "hest";
}
static method fisk() → dynamic async {
lowered core::String? #s1;
function #s1#get() → core::String
- return let final core::String? #t9 = #s1 in #t9.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+ return let final core::String? #t8 = #s1 in #t8.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
late String s1 = await hest(); // Error.
- ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t9{core::String};
- function #s1#set(core::String #t10) → dynamic
- return #s1 = #t10;
+ ^^^^^" as{TypeError,ForDynamic,ForNonNullableByDefault} core::String : #t8{core::String};
+ function #s1#set(core::String #t9) → dynamic
+ return #s1 = #t9;
lowered core::String? #s2;
function #s2#get() → core::String
- return let final core::String? #t11 = #s2 in #t11.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+ return let final core::String? #t10 = #s2 in #t10.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
- ^^^^^"}${#C1}" : #t11{core::String};
- function #s2#set(core::String #t12) → dynamic
- return #s2 = #t12;
+ ^^^^^"}${#C1}" : #t10{core::String};
+ function #s2#set(core::String #t11) → dynamic
+ return #s2 = #t11;
lowered core::Function? #f;
function #f#get() → core::Function
- return let final core::Function? #t13 = #f in #t13.==(null) ?{core::Function} #f = () → asy::Future<dynamic> async => let final dynamic #t14 = await self::hest() in #t14 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t14 : #t14 : #t13{core::Function};
- function #f#set(core::Function #t15) → dynamic
- return #f = #t15;
+ return let final core::Function? #t12 = #f in #t12.==(null) ?{core::Function} #f = () → asy::Future<dynamic> async => await self::hest() : #t12{core::Function};
+ function #f#set(core::Function #t13) → dynamic
+ return #f = #t13;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
index 09236c4..12f0ed3 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.strong.transformed.expect
@@ -148,8 +148,6 @@
dynamic :saved_try_context_var1;
dynamic :exception0;
dynamic :stack_trace0;
- FutureOr<dynamic>:async_temporary_0;
- FutureOr<dynamic>:async_temporary_1;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -177,15 +175,7 @@
:result;
}
}
- final core::String #t11 = "hest";
- if(#t11 is asy::Future<dynamic>) {
- [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_1 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_1 = #t11;
- }
- :return_value = :async_temporary_1;
+ :return_value = "hest";
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -214,21 +204,21 @@
{
lowered core::String? #s1;
function #s1#get() → core::String
- return let final core::String? #t13 = #s1 in #t13.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
+ return let final core::String? #t11 = #s1 in #t11.==(null) ?{core::String} #s1 = invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:40:20: Error: `await` expressions are not supported in late local initializers.
late String s1 = await hest(); // Error.
- ^^^^^" : #t13{core::String};
- function #s1#set(core::String #t14) → dynamic
- return #s1 = #t14;
+ ^^^^^" : #t11{core::String};
+ function #s1#set(core::String #t12) → dynamic
+ return #s1 = #t12;
lowered core::String? #s2;
function #s2#get() → core::String
- return let final core::String? #t15 = #s2 in #t15.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
+ return let final core::String? #t13 = #s2 in #t13.==(null) ?{core::String} #s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/late_lowering/later.dart:41:30: Error: `await` expressions are not supported in late local initializers.
late String s2 = '\${fisk}\${await hest()}\${fisk}'; // Error.
- ^^^^^"}${#C1}" : #t15{core::String};
- function #s2#set(core::String #t16) → dynamic
- return #s2 = #t16;
+ ^^^^^"}${#C1}" : #t13{core::String};
+ function #s2#set(core::String #t14) → dynamic
+ return #s2 = #t14;
lowered core::Function? #f;
function #f#get() → core::Function
- return let final core::Function? #t17 = #f in #t17.==(null) ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
+ return let final core::Function? #t15 = #f in #t15.==(null) ?{core::Function} #f = () → asy::Future<dynamic> /* originally async */ {
final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
core::bool* :is_sync = false;
FutureOr<dynamic>? :return_value;
@@ -237,21 +227,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- [yield] let dynamic #t18 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t19 = :result;
- if(#t19 is asy::Future<dynamic>) {
- [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t19;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t16 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -265,9 +246,9 @@
:async_op.call();
:is_sync = true;
return :async_future;
- } : #t17{core::Function};
- function #f#set(core::Function #t21) → dynamic
- return #f = #t21;
+ } : #t15{core::Function};
+ function #f#set(core::Function #t17) → dynamic
+ return #f = #t17;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
@@ -289,4 +270,4 @@
Extra constant evaluation status:
Evaluated: VariableGet @ org-dartlang-testcase:///later.dart:46:18 -> IntConstant(42)
-Extra constant evaluation: evaluated: 234, effectively constant: 1
+Extra constant evaluation: evaluated: 207, effectively constant: 1
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index 0d0243b..7123dd80 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -154,7 +154,7 @@
await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
core::print(s);
}
- return let final core::String #t8 = "hest" in #t8 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t8 : #t8;
+ return "hest";
}
static method fisk() → dynamic async {
lowered core::String? #s1;
@@ -168,9 +168,9 @@
}
return #s1{core::String};
}
- function #s1#set(core::String #t9) → dynamic {
+ function #s1#set(core::String #t8) → dynamic {
#s1#isSet = true;
- return #s1 = #t9;
+ return #s1 = #t8;
}
lowered core::String? #s2;
lowered core::bool #s2#isSet = false;
@@ -183,22 +183,22 @@
}
return #s2{core::String};
}
- function #s2#set(core::String #t10) → dynamic {
+ function #s2#set(core::String #t9) → dynamic {
#s2#isSet = true;
- return #s2 = #t10;
+ return #s2 = #t9;
}
lowered core::Function? #f;
lowered core::bool #f#isSet = false;
function #f#get() → core::Function {
if(!#f#isSet) {
- #f = () → asy::Future<dynamic> async => let final dynamic #t11 = await self::hest() in #t11 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t11 : #t11;
+ #f = () → asy::Future<dynamic> async => await self::hest();
#f#isSet = true;
}
return #f{core::Function};
}
- function #f#set(core::Function #t12) → dynamic {
+ function #f#set(core::Function #t10) → dynamic {
#f#isSet = true;
- return #f = #t12;
+ return #f = #t10;
}
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index 7fe5b1b..3bcf2b7 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -168,8 +168,6 @@
dynamic :saved_try_context_var1;
dynamic :exception0;
dynamic :stack_trace0;
- FutureOr<dynamic>:async_temporary_0;
- FutureOr<dynamic>:async_temporary_1;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -197,15 +195,7 @@
:result;
}
}
- final core::String #t11 = "hest";
- if(#t11 is asy::Future<dynamic>) {
- [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_1 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_1 = #t11;
- }
- :return_value = :async_temporary_1;
+ :return_value = "hest";
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -243,9 +233,9 @@
}
return #s1{core::String};
}
- function #s1#set(core::String #t13) → dynamic {
+ function #s1#set(core::String #t11) → dynamic {
#s1#isSet = true;
- return #s1 = #t13;
+ return #s1 = #t11;
}
lowered core::String? #s2;
lowered core::bool #s2#isSet = false;
@@ -258,9 +248,9 @@
}
return #s2{core::String};
}
- function #s2#set(core::String #t14) → dynamic {
+ function #s2#set(core::String #t12) → dynamic {
#s2#isSet = true;
- return #s2 = #t14;
+ return #s2 = #t12;
}
lowered core::Function? #f;
lowered core::bool #f#isSet = false;
@@ -275,21 +265,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- [yield] let dynamic #t15 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t16 = :result;
- if(#t16 is asy::Future<dynamic>) {
- [yield] let dynamic #t17 = asy::_awaitHelper(#t16, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t16;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t13 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -308,9 +289,9 @@
}
return #f{core::Function};
}
- function #f#set(core::Function #t18) → dynamic {
+ function #f#set(core::Function #t14) → dynamic {
#f#isSet = true;
- return #f = #t18;
+ return #f = #t14;
}
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
index 6769397..0e66be9 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.expect
@@ -263,35 +263,35 @@
}
function local() → FutureOr<self::A> async {
if(true) {
- return let final self::B? #t6 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+ return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
- ^" in x as{TypeError,ForNonNullableByDefault} self::A in #t6 is asy::Future<self::A> ?{FutureOr<self::A>} await #t6 : #t6;
+ ^" in x as{TypeError,ForNonNullableByDefault} self::A;
}
else {
- return let final asy::Future<self::B?> #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+ return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<B?>.value(x); // Error.
- ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A in #t8 is asy::Future<self::A> ?{FutureOr<self::A>} await #t8 : #t8;
+ ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
}
}
- return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A;
}
static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
- self::barContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ self::barContext(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
barContext(x); // Error.
^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
- core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ core::List<self::A> y = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,16 +314,16 @@
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
<List<A>, List<A>>{...m}; // Error.
^"};
- for (final core::List<self::B?> #t13 in l) {
- core::List<self::A> y = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ for (final core::List<self::B?> #t11 in l) {
+ core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
Try changing the type of the variable.
for (List<A> y in l) {} // Error.
- ^" in #t13 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+ ^" in #t11 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
}
- return let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -331,52 +331,52 @@
^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
}
static method baz(self::C c) → void {
- self::bazContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+ self::bazContext(let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
bazContext(c);
- ^" in (let final self::C #t17 = c in #t17.==(null) ?{() → core::num?} null : #t17.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+ ^" in (let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
}
static method boz(Null x) → self::A {
- self::fooContext(let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(x); // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A);
- self::fooContext(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(null); // Error.
^" in null as{TypeError,ForNonNullableByDefault} self::A);
- self::A a1 = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ self::A a1 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a1 = x; // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A;
- self::A a2 = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ self::A a2 = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a2 = null; // Error.
^" in null as{TypeError,ForNonNullableByDefault} self::A;
if(true) {
- return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A;
}
else {
- return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
^" in null as{TypeError,ForNonNullableByDefault} self::A;
}
function local() → FutureOr<self::A> async {
if(true) {
- return let final Null #t24 = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+ return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
- ^" in null as{TypeError,ForNonNullableByDefault} self::A in #t24 is asy::Future<self::A> ?{FutureOr<self::A>} await #t24 : #t24;
+ ^" in null as{TypeError,ForNonNullableByDefault} self::A;
}
else {
- return let final asy::Future<Null> #t26 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+ return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<Null>.value(null); // Error.
- ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A in #t26 is asy::Future<self::A> ?{FutureOr<self::A>} await #t26 : #t26;
+ ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
}
}
}
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
index c855781..bdd60d8 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.strong.transformed.expect
@@ -180,7 +180,6 @@
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
-import "dart:_internal" as _in;
import "dart:async";
@@ -281,45 +280,25 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<self::A>:async_temporary_0;
- FutureOr<self::A>:async_temporary_1;
- FutureOr<self::A>:async_temporary_2;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
if(true) {
- final self::B? #t10 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+ :return_value = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
- ^" in let self::B? #t12 = x in #t12.==(null) ?{self::A} #t12 as{TypeError,ForNonNullableByDefault} self::A : #t12{self::A};
- if(#t10 is asy::Future<self::A>) {
- [yield] let dynamic #t13 = asy::_awaitHelper(#t10, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<self::B?>(:result);
- }
- else {
- :async_temporary_0 = #t10;
- }
- :return_value = :async_temporary_0;
+ ^" in let self::B? #t11 = x in #t11.==(null) ?{self::A} #t11 as{TypeError,ForNonNullableByDefault} self::A : #t11{self::A};
break #L4;
}
else {
- final asy::Future<self::B?> #t14 = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+ :return_value = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<B?>.value(x); // Error.
^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
- if(#t14 is asy::Future<self::A>) {
- [yield] let dynamic #t16 = asy::_awaitHelper(#t14, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<self::B?>(:result);
- }
- else {
- :async_temporary_2 = #t14;
- }
- :return_value = :async_temporary_2;
break #L4;
}
}
@@ -335,20 +314,20 @@
:is_sync = true;
return :async_future;
}
- return let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
- ^" in let self::B? #t18 = x in #t18.==(null) ?{self::A} #t18 as{TypeError,ForNonNullableByDefault} self::A : #t18{self::A};
+ ^" in let self::B? #t14 = x in #t14.==(null) ?{self::A} #t14 as{TypeError,ForNonNullableByDefault} self::A : #t14{self::A};
}
static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
- self::barContext(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ self::barContext(let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
barContext(x); // Error.
^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
- core::List<self::A> y = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ core::List<self::A> y = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -374,19 +353,19 @@
{
core::Iterator<core::List<self::B?>> :sync-for-iterator = l.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
- final core::List<self::B?> #t21 = :sync-for-iterator.{core::Iterator::current};
+ final core::List<self::B?> #t17 = :sync-for-iterator.{core::Iterator::current};
{
- core::List<self::A> y = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ core::List<self::A> y = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
Try changing the type of the variable.
for (List<A> y in l) {} // Error.
- ^" in #t21 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+ ^" in #t17 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
}
}
}
- return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -394,38 +373,38 @@
^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
}
static method baz(self::C c) → void {
- self::bazContext(let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+ self::bazContext(let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
bazContext(c);
- ^" in (let final self::C #t25 = c in #t25.==(null) ?{() → core::num?} null : #t25.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+ ^" in (let final self::C #t21 = c in #t21.==(null) ?{() → core::num?} null : #t21.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
}
static method boz(Null x) → self::A {
- self::fooContext(let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(x); // Error.
- ^" in let Null #t27 = x in #t27.==(null) ?{self::A} #t27 as{TypeError,ForNonNullableByDefault} self::A : #t27{self::A});
- self::fooContext(let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ ^" in let Null #t23 = x in #t23.==(null) ?{self::A} #t23 as{TypeError,ForNonNullableByDefault} self::A : #t23{self::A});
+ self::fooContext(let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(null); // Error.
- ^" in let Null #t29 = null in #t29.==(null) ?{self::A} #t29 as{TypeError,ForNonNullableByDefault} self::A : #t29{self::A});
- self::A a1 = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ ^" in let Null #t25 = null in #t25.==(null) ?{self::A} #t25 as{TypeError,ForNonNullableByDefault} self::A : #t25{self::A});
+ self::A a1 = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a1 = x; // Error.
- ^" in let Null #t31 = x in #t31.==(null) ?{self::A} #t31 as{TypeError,ForNonNullableByDefault} self::A : #t31{self::A};
- self::A a2 = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ ^" in let Null #t27 = x in #t27.==(null) ?{self::A} #t27 as{TypeError,ForNonNullableByDefault} self::A : #t27{self::A};
+ self::A a2 = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a2 = null; // Error.
- ^" in let Null #t33 = null in #t33.==(null) ?{self::A} #t33 as{TypeError,ForNonNullableByDefault} self::A : #t33{self::A};
+ ^" in let Null #t29 = null in #t29.==(null) ?{self::A} #t29 as{TypeError,ForNonNullableByDefault} self::A : #t29{self::A};
if(true) {
- return let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
- ^" in let Null #t35 = x in #t35.==(null) ?{self::A} #t35 as{TypeError,ForNonNullableByDefault} self::A : #t35{self::A};
+ ^" in let Null #t31 = x in #t31.==(null) ?{self::A} #t31 as{TypeError,ForNonNullableByDefault} self::A : #t31{self::A};
}
else {
- return let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
- ^" in let Null #t37 = null in #t37.==(null) ?{self::A} #t37 as{TypeError,ForNonNullableByDefault} self::A : #t37{self::A};
+ ^" in let Null #t33 = null in #t33.==(null) ?{self::A} #t33 as{TypeError,ForNonNullableByDefault} self::A : #t33{self::A};
}
function local() → FutureOr<self::A> /* originally async */ {
final asy::_Future<self::A> :async_future = new asy::_Future::•<self::A>();
@@ -435,43 +414,23 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<self::A>:async_temporary_0;
- FutureOr<self::A>:async_temporary_1;
- FutureOr<self::A>:async_temporary_2;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L5:
{
if(true) {
- final Null #t38 = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+ :return_value = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
- ^" in let Null #t40 = null in #t40.==(null) ?{self::A} #t40 as{TypeError,ForNonNullableByDefault} self::A : #t40{self::A};
- if(#t38 is asy::Future<self::A>) {
- [yield] let dynamic #t41 = asy::_awaitHelper(#t38, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t38;
- }
- :return_value = :async_temporary_0;
+ ^" in let Null #t35 = null in #t35.==(null) ?{self::A} #t35 as{TypeError,ForNonNullableByDefault} self::A : #t35{self::A};
break #L5;
}
else {
- final asy::Future<Null> #t42 = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+ :return_value = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<Null>.value(null); // Error.
^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
- if(#t42 is asy::Future<self::A>) {
- [yield] let dynamic #t44 = asy::_awaitHelper(#t42, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_2 = #t42;
- }
- :return_value = :async_temporary_2;
break #L5;
}
}
@@ -507,7 +466,7 @@
Evaluated: MethodInvocation @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> BoolConstant(true)
Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> NullConstant(null)
Evaluated: VariableGet @ org-dartlang-testcase:///assignability_error_messages.dart:77:14 -> NullConstant(null)
-Extra constant evaluation: evaluated: 266, effectively constant: 12
+Extra constant evaluation: evaluated: 210, effectively constant: 12
Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
index 6769397..0e66be9 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.expect
@@ -263,35 +263,35 @@
}
function local() → FutureOr<self::A> async {
if(true) {
- return let final self::B? #t6 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+ return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
- ^" in x as{TypeError,ForNonNullableByDefault} self::A in #t6 is asy::Future<self::A> ?{FutureOr<self::A>} await #t6 : #t6;
+ ^" in x as{TypeError,ForNonNullableByDefault} self::A;
}
else {
- return let final asy::Future<self::B?> #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+ return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<B?>.value(x); // Error.
- ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A in #t8 is asy::Future<self::A> ?{FutureOr<self::A>} await #t8 : #t8;
+ ^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
}
}
- return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A;
}
static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
- self::barContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ self::barContext(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
barContext(x); // Error.
^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>);
- core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ core::List<self::A> y = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -314,16 +314,16 @@
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
<List<A>, List<A>>{...m}; // Error.
^"};
- for (final core::List<self::B?> #t13 in l) {
- core::List<self::A> y = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ for (final core::List<self::B?> #t11 in l) {
+ core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
Try changing the type of the variable.
for (List<A> y in l) {} // Error.
- ^" in #t13 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
+ ^" in #t11 as{TypeError,ForNonNullableByDefault} core::List<self::A>;
}
- return let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -331,52 +331,52 @@
^" in x as{TypeError,ForNonNullableByDefault} core::List<self::A>;
}
static method baz(self::C c) → void {
- self::bazContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+ self::bazContext(let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
bazContext(c);
- ^" in (let final self::C #t17 = c in #t17.==(null) ?{() → core::num?} null : #t17.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
+ ^" in (let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call}) as{TypeError,ForNonNullableByDefault} () → core::num);
}
static method boz(Null x) → self::A {
- self::fooContext(let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(x); // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A);
- self::fooContext(let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(null); // Error.
^" in null as{TypeError,ForNonNullableByDefault} self::A);
- self::A a1 = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ self::A a1 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a1 = x; // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A;
- self::A a2 = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ self::A a2 = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a2 = null; // Error.
^" in null as{TypeError,ForNonNullableByDefault} self::A;
if(true) {
- return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x as{TypeError,ForNonNullableByDefault} self::A;
}
else {
- return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
^" in null as{TypeError,ForNonNullableByDefault} self::A;
}
function local() → FutureOr<self::A> async {
if(true) {
- return let final Null #t24 = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+ return let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
- ^" in null as{TypeError,ForNonNullableByDefault} self::A in #t24 is asy::Future<self::A> ?{FutureOr<self::A>} await #t24 : #t24;
+ ^" in null as{TypeError,ForNonNullableByDefault} self::A;
}
else {
- return let final asy::Future<Null> #t26 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+ return let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<Null>.value(null); // Error.
- ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A in #t26 is asy::Future<self::A> ?{FutureOr<self::A>} await #t26 : #t26;
+ ^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
}
}
}
diff --git a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
index 242b2b4..4ba3fa1 100644
--- a/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability_error_messages.dart.weak.transformed.expect
@@ -180,7 +180,6 @@
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
-import "dart:_internal" as _in;
import "dart:async";
@@ -281,45 +280,25 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<self::A>:async_temporary_0;
- FutureOr<self::A>:async_temporary_1;
- FutureOr<self::A>:async_temporary_2;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
if(true) {
- final self::B? #t6 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
+ :return_value = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:43:14: Error: A value of type 'B?' can't be returned from an async function with return type 'FutureOr<A>' because 'B?' is nullable and 'FutureOr<A>' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x;
- if(#t6 is asy::Future<self::A>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<self::B?>(:result);
- }
- else {
- :async_temporary_0 = #t6;
- }
- :return_value = :async_temporary_0;
break #L4;
}
else {
- final asy::Future<self::B?> #t9 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
+ :return_value = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:45:18: Error: A value of type 'Future<B?>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<B?>.value(x); // Error.
^" in asy::Future::value<self::B?>(x) as{TypeError,ForNonNullableByDefault} self::A;
- if(#t9 is asy::Future<self::A>) {
- [yield] let dynamic #t11 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<self::B?>(:result);
- }
- else {
- :async_temporary_2 = #t9;
- }
- :return_value = :async_temporary_2;
break #L4;
}
}
@@ -335,20 +314,20 @@
:is_sync = true;
return :async_future;
}
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:49:10: Error: A value of type 'B?' can't be returned from a function with return type 'A' because 'B?' is nullable and 'A' isn't.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x;
}
static method bar(core::List<self::B?> x, core::List<core::List<self::B?>> l, core::Map<core::List<self::B?>, core::List<self::B?>> m) → core::List<self::A> {
- self::barContext(let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ self::barContext(let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:53:14: Error: The argument type 'List<B?>' can't be assigned to the parameter type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
barContext(x); // Error.
^" in x);
- core::List<self::A> y = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ core::List<self::A> y = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:54:15: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -374,19 +353,19 @@
{
core::Iterator<core::List<self::B?>> :sync-for-iterator = l.{core::Iterable::iterator};
for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
- final core::List<self::B?> #t15 = :sync-for-iterator.{core::Iterator::current};
+ final core::List<self::B?> #t11 = :sync-for-iterator.{core::Iterator::current};
{
- core::List<self::A> y = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ core::List<self::A> y = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:57:16: Error: A value of type 'List<B?>' can't be assigned to a variable of type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
Try changing the type of the variable.
for (List<A> y in l) {} // Error.
- ^" in #t15;
+ ^" in #t11;
}
}
}
- return let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
+ return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:58:10: Error: A value of type 'List<B?>' can't be returned from a function with return type 'List<A>' because 'B?' is nullable and 'A' isn't.
- 'List' is from 'dart:core'.
- 'B' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
@@ -394,35 +373,35 @@
^" in x;
}
static method baz(self::C c) → void {
- self::bazContext(let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
+ self::bazContext(let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:62:14: Error: The argument type 'num? Function()' can't be assigned to the parameter type 'num Function()' because 'num?' is nullable and 'num' isn't.
bazContext(c);
- ^" in let final self::C #t19 = c in #t19.==(null) ?{() → core::num?} null : #t19.{self::C::call});
+ ^" in let final self::C #t15 = c in #t15.==(null) ?{() → core::num?} null : #t15.{self::C::call});
}
static method boz(Null x) → self::A {
- self::fooContext(let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:66:14: Error: The argument type 'Null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(x); // Error.
^" in x);
- self::fooContext(let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
+ self::fooContext(let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:67:14: Error: The value 'null' can't be assigned to the parameter type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
fooContext(null); // Error.
^" in null);
- self::A a1 = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ self::A a1 = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:68:10: Error: A value of type 'Null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a1 = x; // Error.
^" in x;
- self::A a2 = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
+ self::A a2 = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:69:10: Error: The value 'null' can't be assigned to a variable of type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
A a2 = null; // Error.
^" in null;
if(true) {
- return let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:71:12: Error: A value of type 'Null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return x; // Error.
^" in x;
}
else {
- return let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
+ return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:73:12: Error: The value 'null' can't be returned from a function with return type 'A' because 'A' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
^" in null;
@@ -435,43 +414,23 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<self::A>:async_temporary_0;
- FutureOr<self::A>:async_temporary_1;
- FutureOr<self::A>:async_temporary_2;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L5:
{
if(true) {
- final Null #t26 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
+ :return_value = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:77:14: Error: The value 'null' can't be returned from an async function with return type 'FutureOr<A>' because 'FutureOr<A>' is not nullable.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return null; // Error.
^" in null;
- if(#t26 is asy::Future<self::A>) {
- [yield] let dynamic #t28 = asy::_awaitHelper(#t26, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t26;
- }
- :return_value = :async_temporary_0;
break #L5;
}
else {
- final asy::Future<Null> #t29 = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
+ :return_value = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability_error_messages.dart:79:18: Error: A value of type 'Future<Null>' can't be returned from an async function with return type 'FutureOr<A>'.
- 'Future' is from 'dart:async'.
- 'A' is from 'pkg/front_end/testcases/nnbd/assignability_error_messages.dart'.
return new Future<Null>.value(null); // Error.
^" in asy::Future::value<Null>(null) as{TypeError,ForNonNullableByDefault} self::A;
- if(#t29 is asy::Future<self::A>) {
- [yield] let dynamic #t31 = asy::_awaitHelper(#t29, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_2 = #t29;
- }
- :return_value = :async_temporary_2;
break #L5;
}
}
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
index bda20dd..f39bdfbd 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.expect
@@ -21,7 +21,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- return let final self::TestMixin::T% #t1 = result in #t1 is asy::Future<self::TestMixin::T%> ?{FutureOr<self::TestMixin::T%>} await #t1 : #t1;
+ return result;
}
}
class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
index e23e8dd..76b3473 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.strong.transformed.expect
@@ -14,7 +14,6 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<self::TestMixin::T%>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -36,15 +35,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- final self::TestMixin::T% #t2 = result;
- if(#t2 is asy::Future<self::TestMixin::T%>) {
- [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<self::TestMixin::T%>(:result);
- }
- else {
- :async_temporary_0 = #t2;
- }
- :return_value = :async_temporary_0;
+ :return_value = result;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -91,12 +82,11 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
- [yield] let dynamic #t4 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+ [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
core::String result;
if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -113,15 +103,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- final core::String #t5 = result;
- if(#t5 is asy::Future<core::String>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_0 = #t5;
- }
- :return_value = :async_temporary_0;
+ :return_value = result;
break #L2;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,12 +141,11 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L3:
{
- [yield] let dynamic #t7 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+ [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
core::String result;
if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -181,15 +162,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- final core::String #t8 = result;
- if(#t8 is asy::Future<core::String>) {
- [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_0 = #t8;
- }
- :return_value = :async_temporary_0;
+ :return_value = result;
break #L3;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
index bda20dd..f39bdfbd 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.expect
@@ -21,7 +21,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- return let final self::TestMixin::T% #t1 = result in #t1 is asy::Future<self::TestMixin::T%> ?{FutureOr<self::TestMixin::T%>} await #t1 : #t1;
+ return result;
}
}
class PagingResponse<T extends core::Object? = dynamic> extends core::Object {
diff --git a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
index e23e8dd..76b3473 100644
--- a/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/flutter_issue64155.dart.weak.transformed.expect
@@ -14,7 +14,6 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<self::TestMixin::T%>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -36,15 +35,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- final self::TestMixin::T% #t2 = result;
- if(#t2 is asy::Future<self::TestMixin::T%>) {
- [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<self::TestMixin::T%>(:result);
- }
- else {
- :async_temporary_0 = #t2;
- }
- :return_value = :async_temporary_0;
+ :return_value = result;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -91,12 +82,11 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
- [yield] let dynamic #t4 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+ [yield] let dynamic #t2 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
final self::Response<core::String> response = _in::unsafeCast<self::Response<core::String>>(:result);
core::String result;
if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -113,15 +103,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- final core::String #t5 = result;
- if(#t5 is asy::Future<core::String>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_0 = #t5;
- }
- :return_value = :async_temporary_0;
+ :return_value = result;
break #L2;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,12 +141,11 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L3:
{
- [yield] let dynamic #t7 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
+ [yield] let dynamic #t3 = asy::_awaitHelper(fetch, :async_op_then, :async_op_error, :async_op) in null;
final self::PagingResponse<core::String> response = _in::unsafeCast<self::PagingResponse<core::String>>(:result);
core::String result;
if(response is{ForNonNullableByDefault} self::Response<dynamic>) {
@@ -181,15 +162,7 @@
else {
throw core::Exception::•("Invalid response type");
}
- final core::String #t8 = result;
- if(#t8 is asy::Future<core::String>) {
- [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_0 = #t8;
- }
- :return_value = :async_temporary_0;
+ :return_value = result;
break #L3;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
index ca6b488..11217a1 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.expect
@@ -55,19 +55,19 @@
(core::int) → core::String x6 = (core::int v) → Never {
return self::throwing();
};
- (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => let final Never #t1 = throw v in #t1 is asy::Future<Never> ?{FutureOr<core::String>} await #t1 : #t1;
+ (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
(core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
throw v;
};
(core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
- return let final Never #t2 = throw v in #t2 is asy::Future<Never> ?{FutureOr<core::String>} await #t2 : #t2;
+ return throw v;
};
- (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t3 = self::throwing() in #t3 is asy::Future<Never> ?{FutureOr<core::String>} await #t3 : #t3;
+ (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => self::throwing();
(core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
self::throwing();
};
(core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
- return let final Never #t4 = self::throwing() in #t4 is asy::Future<Never> ?{FutureOr<core::String>} await #t4 : #t4;
+ return self::throwing();
};
}
static method errors() → void async {
@@ -77,7 +77,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x2 = (int v) /* error */ {
^" in null;
};
@@ -87,7 +87,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x3 = (int v) /* error */ {
^" in null;
};
@@ -97,7 +97,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x5 = (int v) /* error */ {
^" in null;
};
@@ -107,7 +107,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x6 = (int v) /* error */ {
^" in null;
};
@@ -117,17 +117,17 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y2 = (int v) async /* error */ {
^" in null;
};
(core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
try {
- return let final Never #t10 = throw v in #t10 is asy::Future<core::String> ?{FutureOr<core::String>} await #t10 : #t10;
+ return throw v;
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y3 = (int v) async /* error */ {
^" in null;
};
@@ -137,17 +137,17 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y5 = (int v) async /* error */ {
^" in null;
};
(core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
try {
- return let final Never #t13 = self::throwing() in #t13 is asy::Future<core::String> ?{FutureOr<core::String>} await #t13 : #t13;
+ return self::throwing();
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y6 = (int v) async /* error */ {
^" in null;
};
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
index 515ceec..3e9bef1 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.strong.transformed.expect
@@ -37,7 +37,6 @@
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
-import "dart:_internal" as _in;
static method throwing() → Never
return throw "";
@@ -64,21 +63,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
{
- final Never #t1 = throw v;
- if(#t1 is asy::Future<Never>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
+ :return_value = throw v;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -127,21 +116,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L3:
{
- final Never #t3 = throw v;
- if(#t3 is asy::Future<Never>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t3;
- }
- :return_value = :async_temporary_0;
+ :return_value = throw v;
break #L3;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -164,21 +143,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- final Never #t5 = self::throwing();
- if(#t5 is asy::Future<Never>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t5;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::throwing();
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -227,21 +196,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L6:
{
- final Never #t7 = self::throwing();
- if(#t7 is asy::Future<Never>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t7;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::throwing();
break #L6;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -275,7 +234,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x2 = (int v) /* error */ {
^" in null;
};
@@ -285,7 +244,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x3 = (int v) /* error */ {
^" in null;
};
@@ -295,7 +254,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x5 = (int v) /* error */ {
^" in null;
};
@@ -305,7 +264,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x6 = (int v) /* error */ {
^" in null;
};
@@ -326,7 +285,7 @@
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y2 = (int v) async /* error */ {
^" in null;
break #L8;
@@ -351,28 +310,17 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L9:
{
try {
- final Never #t14 = throw v;
- if(#t14 is asy::Future<core::String>) {
- [yield] let dynamic #t15 = asy::_awaitHelper(#t14, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t14;
- }
- :return_value = :async_temporary_0;
+ :return_value = throw v;
break #L9;
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y3 = (int v) async /* error */ {
^" in null;
break #L9;
@@ -406,7 +354,7 @@
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y5 = (int v) async /* error */ {
^" in null;
break #L10;
@@ -431,28 +379,17 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L11:
{
try {
- final Never #t18 = self::throwing();
- if(#t18 is asy::Future<core::String>) {
- [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t18;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::throwing();
break #L11;
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y6 = (int v) async /* error */ {
^" in null;
break #L11;
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
index 344471e..3ced126 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.expect
@@ -56,19 +56,19 @@
(core::int) → core::String x6 = (core::int v) → Never {
return let final Never #t3 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
};
- (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => let final Never #t4 = throw v in #t4 is asy::Future<Never> ?{FutureOr<core::String>} await #t4 : #t4;
+ (core::int) → asy::Future<core::String> y1 = (core::int v) → asy::Future<Never> async => throw v;
(core::int) → asy::Future<core::String> y2 = (core::int v) → asy::Future<Never> async {
throw v;
};
(core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<Never> async {
- return let final Never #t5 = throw v in #t5 is asy::Future<Never> ?{FutureOr<core::String>} await #t5 : #t5;
+ return throw v;
};
- (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t6 = let final Never #t7 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t6 is asy::Future<Never> ?{FutureOr<core::String>} await #t6 : #t6;
+ (core::int) → asy::Future<core::String> y4 = (core::int v) → asy::Future<Never> async => let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
(core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<Never> async {
- let final Never #t8 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
};
(core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<Never> async {
- return let final Never #t9 = let final Never #t10 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t9 is asy::Future<Never> ?{FutureOr<core::String>} await #t9 : #t9;
+ return let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
};
}
static method errors() → void async {
@@ -78,7 +78,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x2 = (int v) /* error */ {
^" in null;
};
@@ -88,27 +88,27 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x3 = (int v) /* error */ {
^" in null;
};
(core::int) → core::String x5 = (core::int v) → core::String {
try {
- let final Never #t13 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x5 = (int v) /* error */ {
^" in null;
};
(core::int) → core::String x6 = (core::int v) → core::String {
try {
- return let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ return let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x6 = (int v) /* error */ {
^" in null;
};
@@ -118,37 +118,37 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y2 = (int v) async /* error */ {
^" in null;
};
(core::int) → asy::Future<core::String> y3 = (core::int v) → asy::Future<core::String> async {
try {
- return let final Never #t18 = throw v in #t18 is asy::Future<core::String> ?{FutureOr<core::String>} await #t18 : #t18;
+ return throw v;
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y3 = (int v) async /* error */ {
^" in null;
};
(core::int) → asy::Future<core::String> y5 = (core::int v) → asy::Future<core::String> async {
try {
- let final Never #t20 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y5 = (int v) async /* error */ {
^" in null;
};
(core::int) → asy::Future<core::String> y6 = (core::int v) → asy::Future<core::String> async {
try {
- return let final Never #t22 = let final Never #t23 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.") in #t22 is asy::Future<core::String> ?{FutureOr<core::String>} await #t22 : #t22;
+ return let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y6 = (int v) async /* error */ {
^" in null;
};
diff --git a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
index 5ebb180..e3ff8f7 100644
--- a/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41156.dart.weak.transformed.expect
@@ -64,21 +64,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
{
- final Never #t4 = throw v;
- if(#t4 is asy::Future<Never>) {
- [yield] let dynamic #t5 = asy::_awaitHelper(#t4, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t4;
- }
- :return_value = :async_temporary_0;
+ :return_value = throw v;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -127,21 +117,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L3:
{
- final Never #t6 = throw v;
- if(#t6 is asy::Future<Never>) {
- [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t6;
- }
- :return_value = :async_temporary_0;
+ :return_value = throw v;
break #L3;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -164,21 +144,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- final Never #t8 = let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
- if(#t8 is asy::Future<Never>) {
- [yield] let dynamic #t10 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t8;
- }
- :return_value = :async_temporary_0;
+ :return_value = let final Never #t4 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -205,7 +175,7 @@
try {
#L5:
{
- let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ let final Never #t5 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
return;
@@ -227,21 +197,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L6:
{
- final Never #t12 = let final Never #t13 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
- if(#t12 is asy::Future<Never>) {
- [yield] let dynamic #t14 = asy::_awaitHelper(#t12, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t12;
- }
- :return_value = :async_temporary_0;
+ :return_value = let final Never #t6 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
break #L6;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -275,7 +235,7 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:39:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x2 = (int v) /* error */ {
^" in null;
};
@@ -285,27 +245,27 @@
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:44:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x3 = (int v) /* error */ {
^" in null;
};
(core::int) → core::String x5 = (core::int v) → core::String {
try {
- let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ let final Never #t9 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:49:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x5 = (int v) /* error */ {
^" in null;
};
(core::int) → core::String x6 = (core::int v) → core::String {
try {
- return let final Never #t19 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ return let final Never #t11 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:54:29: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String Function(int) x6 = (int v) /* error */ {
^" in null;
};
@@ -326,7 +286,7 @@
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:59:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y2 = (int v) async /* error */ {
^" in null;
break #L8;
@@ -351,28 +311,17 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L9:
{
try {
- final Never #t22 = throw v;
- if(#t22 is asy::Future<core::String>) {
- [yield] let dynamic #t23 = asy::_awaitHelper(#t22, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t22;
- }
- :return_value = :async_temporary_0;
+ :return_value = throw v;
break #L9;
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:64:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y3 = (int v) async /* error */ {
^" in null;
break #L9;
@@ -402,11 +351,11 @@
#L10:
{
try {
- let final Never #t25 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
+ let final Never #t15 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:69:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y5 = (int v) async /* error */ {
^" in null;
break #L10;
@@ -431,28 +380,17 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- FutureOr<core::String>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L11:
{
try {
- final Never #t27 = let final Never #t28 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
- if(#t27 is asy::Future<core::String>) {
- [yield] let dynamic #t29 = asy::_awaitHelper(#t27, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Never>(:result);
- }
- else {
- :async_temporary_0 = #t27;
- }
- :return_value = :async_temporary_0;
+ :return_value = let final Never #t17 = self::throwing() in throw new _in::ReachabilityError::•("`null` encountered as the result from expression with type `Never`.");
break #L11;
}
on core::Object catch(final core::Object _) {
}
- :return_value = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ :return_value = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/issue41156.dart:74:37: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
Future<String> Function(int) y6 = (int v) async /* error */ {
^" in null;
break #L11;
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
index d7881ae..fbcd99e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.expect
@@ -34,61 +34,61 @@
static method getNull() → dynamic
return null;
static method getFutureNull() → asy::Future<dynamic> async {
- return let final Null #t1 = null in #t1 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t1 : #t1;
+ return null;
}
static method getFutureBool() → asy::Future<core::bool> async {
- return let final core::bool #t2 = true in #t2 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t2 : #t2;
+ return true;
}
static method test1() → asy::Future<core::bool> async
- return let final dynamic #t3 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t3 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t3 : #t3;
+ return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
static method test2() → asy::Future<core::bool>
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
static method test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
static method test4() → asy::Future<core::bool> async
- return let final dynamic #t4 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t4 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t4 : #t4;
+ return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
static method test5() → asy::Future<core::bool>
- return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
static method test6() → asy::Future<core::bool>
return self::getFutureBool();
static method test7() → asy::Future<core::bool> async
- return let final asy::Future<core::bool> #t6 = self::getFutureBool() in #t6 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t6 : #t6;
+ return self::getFutureBool();
static method test() → dynamic async {
function test1() → asy::Future<core::bool> async
- return let final dynamic #t7 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t7 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t7 : #t7;
+ return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
function test2() → asy::Future<core::bool>
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
function test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
function test4() → asy::Future<core::bool> async
- return let final dynamic #t8 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t8 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t8 : #t8;
+ return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
function test5() → asy::Future<core::bool>
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
function test6() → asy::Future<core::bool>
return self::getFutureBool();
function test7() → asy::Future<core::bool> async
- return let final asy::Future<core::bool> #t10 = self::getFutureBool() in #t10 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t10 : #t10;
- asy::Future<core::bool> var1 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ return self::getFutureBool();
+ asy::Future<core::bool> var1 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var1 = (() async => await getNull())(); // error
- ^" in (() → asy::Future<dynamic> async => let final dynamic #t12 = await self::getNull() in #t12 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t12 : #t12).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+ ^" in (() → asy::Future<dynamic> async => await self::getNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
- asy::Future<core::bool> var4 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var4 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var4 = (() async => await getFutureNull())(); // error
- ^" in (() → asy::Future<dynamic> async => let final dynamic #t14 = await self::getFutureNull() in #t14 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t14 : #t14).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
- asy::Future<core::bool> var5 = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ ^" in (() → asy::Future<dynamic> async => await self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+ asy::Future<core::bool> var5 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var5 = (() => getFutureNull())(); // error
^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
- asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => let final asy::Future<core::bool> #t16 = self::getFutureBool() in #t16 is asy::Future<core::bool> ?{FutureOr<dynamic>} await #t16 : #t16).call();
+ asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool()).call();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
index 2b35c4f..b4ab7d2 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.strong.transformed.expect
@@ -30,7 +30,6 @@
import self as self;
import "dart:async" as asy;
import "dart:core" as core;
-import "dart:_internal" as _in;
static method getNull() → dynamic
return null;
@@ -42,21 +41,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
{
- final Null #t1 = null;
- if(#t1 is asy::Future<dynamic>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
+ :return_value = null;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -79,21 +68,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
- final core::bool #t3 = true;
- if(#t3 is asy::Future<core::bool>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t3;
- }
- :return_value = :async_temporary_0;
+ :return_value = true;
break #L2;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -117,21 +96,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L3:
{
- [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t6 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t6 is asy::Future<core::bool>) {
- [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t6;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L3;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,21 +129,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- [yield] let dynamic #t8 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t9 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t9 is asy::Future<core::bool>) {
- [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t9;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -189,7 +150,7 @@
return :async_future;
}
static method test5() → asy::Future<core::bool>
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -203,21 +164,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L5:
{
- final asy::Future<core::bool> #t12 = self::getFutureBool();
- if(#t12 is asy::Future<core::bool>) {
- [yield] let dynamic #t13 = asy::_awaitHelper(#t12, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t12;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::getFutureBool();
break #L5;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,21 +204,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L7:
{
- [yield] let dynamic #t14 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t15 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t15 is asy::Future<core::bool>) {
- [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t15;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t4 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L7;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -295,21 +237,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L8:
{
- [yield] let dynamic #t17 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t18 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t18 is asy::Future<core::bool>) {
- [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t18;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t5 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L8;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -325,7 +258,7 @@
return :async_future;
}
function test5() → asy::Future<core::bool>
- return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -339,21 +272,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L9:
{
- final asy::Future<core::bool> #t21 = self::getFutureBool();
- if(#t21 is asy::Future<core::bool>) {
- [yield] let dynamic #t22 = asy::_awaitHelper(#t21, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t21;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::getFutureBool();
break #L9;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -368,7 +291,7 @@
:is_sync = true;
return :async_future;
}
- asy::Future<core::bool> var1 = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var1 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var1 = (() async => await getNull())(); // error
^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -380,21 +303,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L10:
{
- [yield] let dynamic #t24 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t25 = :result;
- if(#t25 is asy::Future<dynamic>) {
- [yield] let dynamic #t26 = asy::_awaitHelper(#t25, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t25;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t8 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L10;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -411,7 +325,7 @@
}).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
- asy::Future<core::bool> var4 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var4 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var4 = (() async => await getFutureNull())(); // error
^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -423,21 +337,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L11:
{
- [yield] let dynamic #t28 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t29 = :result;
- if(#t29 is asy::Future<dynamic>) {
- [yield] let dynamic #t30 = asy::_awaitHelper(#t29, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t29;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t10 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L11;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -452,7 +357,7 @@
:is_sync = true;
return :async_future;
}).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
- asy::Future<core::bool> var5 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var5 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var5 = (() => getFutureNull())(); // error
^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -465,21 +370,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L12:
{
- final asy::Future<core::bool> #t32 = self::getFutureBool();
- if(#t32 is asy::Future<core::bool>) {
- [yield] let dynamic #t33 = asy::_awaitHelper(#t32, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t32;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::getFutureBool();
break #L12;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
index d7881ae..fbcd99e 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.expect
@@ -34,61 +34,61 @@
static method getNull() → dynamic
return null;
static method getFutureNull() → asy::Future<dynamic> async {
- return let final Null #t1 = null in #t1 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t1 : #t1;
+ return null;
}
static method getFutureBool() → asy::Future<core::bool> async {
- return let final core::bool #t2 = true in #t2 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t2 : #t2;
+ return true;
}
static method test1() → asy::Future<core::bool> async
- return let final dynamic #t3 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t3 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t3 : #t3;
+ return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
static method test2() → asy::Future<core::bool>
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
static method test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
static method test4() → asy::Future<core::bool> async
- return let final dynamic #t4 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t4 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t4 : #t4;
+ return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
static method test5() → asy::Future<core::bool>
- return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
static method test6() → asy::Future<core::bool>
return self::getFutureBool();
static method test7() → asy::Future<core::bool> async
- return let final asy::Future<core::bool> #t6 = self::getFutureBool() in #t6 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t6 : #t6;
+ return self::getFutureBool();
static method test() → dynamic async {
function test1() → asy::Future<core::bool> async
- return let final dynamic #t7 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t7 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t7 : #t7;
+ return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
function test2() → asy::Future<core::bool>
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
function test3() → core::bool
return self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
function test4() → asy::Future<core::bool> async
- return let final dynamic #t8 = await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool> in #t8 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t8 : #t8;
+ return await self::getFutureNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
function test5() → asy::Future<core::bool>
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
function test6() → asy::Future<core::bool>
return self::getFutureBool();
function test7() → asy::Future<core::bool> async
- return let final asy::Future<core::bool> #t10 = self::getFutureBool() in #t10 is asy::Future<core::bool> ?{FutureOr<core::bool>} await #t10 : #t10;
- asy::Future<core::bool> var1 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ return self::getFutureBool();
+ asy::Future<core::bool> var1 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var1 = (() async => await getNull())(); // error
- ^" in (() → asy::Future<dynamic> async => let final dynamic #t12 = await self::getNull() in #t12 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t12 : #t12).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+ ^" in (() → asy::Future<dynamic> async => await self::getNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
- asy::Future<core::bool> var4 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var4 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var4 = (() async => await getFutureNull())(); // error
- ^" in (() → asy::Future<dynamic> async => let final dynamic #t14 = await self::getFutureNull() in #t14 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t14 : #t14).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
- asy::Future<core::bool> var5 = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ ^" in (() → asy::Future<dynamic> async => await self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
+ asy::Future<core::bool> var5 = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var5 = (() => getFutureNull())(); // error
^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
asy::Future<core::bool> var6 = (() → asy::Future<core::bool> => self::getFutureBool()).call();
- asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => let final asy::Future<core::bool> #t16 = self::getFutureBool() in #t16 is asy::Future<core::bool> ?{FutureOr<dynamic>} await #t16 : #t16).call();
+ asy::Future<core::bool> var7 = (() → asy::Future<core::bool> async => self::getFutureBool()).call();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
index 2b35c4f..b4ab7d2 100644
--- a/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41437a.dart.weak.transformed.expect
@@ -30,7 +30,6 @@
import self as self;
import "dart:async" as asy;
import "dart:core" as core;
-import "dart:_internal" as _in;
static method getNull() → dynamic
return null;
@@ -42,21 +41,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
{
- final Null #t1 = null;
- if(#t1 is asy::Future<dynamic>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
+ :return_value = null;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -79,21 +68,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
- final core::bool #t3 = true;
- if(#t3 is asy::Future<core::bool>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t3;
- }
- :return_value = :async_temporary_0;
+ :return_value = true;
break #L2;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -117,21 +96,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L3:
{
- [yield] let dynamic #t5 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t6 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t6 is asy::Future<core::bool>) {
- [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t6;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L3;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -159,21 +129,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- [yield] let dynamic #t8 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t9 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t9 is asy::Future<core::bool>) {
- [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t9;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t2 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -189,7 +150,7 @@
return :async_future;
}
static method test5() → asy::Future<core::bool>
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:18:25: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -203,21 +164,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L5:
{
- final asy::Future<core::bool> #t12 = self::getFutureBool();
- if(#t12 is asy::Future<core::bool>) {
- [yield] let dynamic #t13 = asy::_awaitHelper(#t12, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t12;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::getFutureBool();
break #L5;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -253,21 +204,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L7:
{
- [yield] let dynamic #t14 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t15 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t15 is asy::Future<core::bool>) {
- [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t15;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t4 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L7;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -295,21 +237,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L8:
{
- [yield] let dynamic #t17 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::bool>#t18 = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
- if(#t18 is asy::Future<core::bool>) {
- [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t18;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t5 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::bool>;
break #L8;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -325,7 +258,7 @@
return :async_future;
}
function test5() → asy::Future<core::bool>
- return let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
+ return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:27:27: Error: A value of type 'Future<dynamic>' can't be returned from a function with return type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> test5() => getFutureNull(); // error
^" in self::getFutureNull() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -339,21 +272,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::bool>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L9:
{
- final asy::Future<core::bool> #t21 = self::getFutureBool();
- if(#t21 is asy::Future<core::bool>) {
- [yield] let dynamic #t22 = asy::_awaitHelper(#t21, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t21;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::getFutureBool();
break #L9;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -368,7 +291,7 @@
:is_sync = true;
return :async_future;
}
- asy::Future<core::bool> var1 = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var1 = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:31:52: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var1 = (() async => await getNull())(); // error
^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -380,21 +303,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L10:
{
- [yield] let dynamic #t24 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t25 = :result;
- if(#t25 is asy::Future<dynamic>) {
- [yield] let dynamic #t26 = asy::_awaitHelper(#t25, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t25;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t8 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L10;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -411,7 +325,7 @@
}).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
asy::Future<core::bool> var2 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<core::bool>;
core::bool var3 = (() → dynamic => self::getNull()).call() as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool;
- asy::Future<core::bool> var4 = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var4 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:34:58: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var4 = (() async => await getFutureNull())(); // error
^" in (() → asy::Future<dynamic> /* originally async */ {
@@ -423,21 +337,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L11:
{
- [yield] let dynamic #t28 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t29 = :result;
- if(#t29 is asy::Future<dynamic>) {
- [yield] let dynamic #t30 = asy::_awaitHelper(#t29, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t29;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t10 = asy::_awaitHelper(self::getFutureNull(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L11;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -452,7 +357,7 @@
:is_sync = true;
return :async_future;
}).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
- asy::Future<core::bool> var5 = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
+ asy::Future<core::bool> var5 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41437a.dart:35:46: Error: A value of type 'Future<dynamic>' can't be assigned to a variable of type 'Future<bool>'.
- 'Future' is from 'dart:async'.
Future<bool> var5 = (() => getFutureNull())(); // error
^" in (() → asy::Future<dynamic> => self::getFutureNull()).call() as{TypeError,ForNonNullableByDefault} asy::Future<core::bool>;
@@ -465,21 +370,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L12:
{
- final asy::Future<core::bool> #t32 = self::getFutureBool();
- if(#t32 is asy::Future<core::bool>) {
- [yield] let dynamic #t33 = asy::_awaitHelper(#t32, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::bool>(:result);
- }
- else {
- :async_temporary_0 = #t32;
- }
- :return_value = :async_temporary_0;
+ :return_value = self::getFutureBool();
break #L12;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
index 58eebef..f0b15fb 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.expect
@@ -34,23 +34,23 @@
return s.{core::num::+}(1);
};
<S extends FutureOr<core::num> = FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num> = FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
- return let final core::num #t1 = (await t).{core::num::+}(1) in #t1 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t1 : #t1;
+ return (await t).{core::num::+}(1);
};
}
static method test2(self::C<core::num?> c) → dynamic {
<S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
- return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
return s + 1; // error
^" in s.{core::num::+}(1);
};
<S extends FutureOr<core::num?> = FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?> = FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
- return let final core::num #t3 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
return (await t) + 1; // error
- ^" in (await t).{core::num::+}(1) in #t3 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t3 : #t3;
+ ^" in (await t).{core::num::+}(1);
};
}
static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
- return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
test3<S extends num?>(S s) => s + 1; // error
^" in s.{core::num::+}(1);
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
index b08be8f..b287a57 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.strong.transformed.expect
@@ -43,21 +43,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
{
[yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
- final core::num #t2 = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
- if(#t2 is asy::Future<core::num>) {
- [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::num>(:result);
- }
- else {
- :async_temporary_0 = #t2;
- }
- :return_value = :async_temporary_0;
+ :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -75,7 +66,7 @@
}
static method test2(self::C<core::num?> c) → dynamic {
<S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
- return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
return s + 1; // error
^" in s.{core::num::+}(1);
};
@@ -88,24 +79,15 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
- final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+ final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
return (await t) + 1; // error
^";
- [yield] let dynamic #t6 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
- final core::num #t7 = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
- if(#t7 is asy::Future<core::num>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::num>(:result);
- }
- else {
- :async_temporary_0 = #t7;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
break #L2;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -122,7 +104,7 @@
};
}
static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
test3<S extends num?>(S s) => s + 1; // error
^" in s.{core::num::+}(1);
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
index 58eebef..f0b15fb 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.expect
@@ -34,23 +34,23 @@
return s.{core::num::+}(1);
};
<S extends FutureOr<core::num> = FutureOr<core::num>>(S, FutureOr<core::num>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num> = FutureOr<core::num>>(S s, FutureOr<core::num>t) → asy::Future<core::num> async {
- return let final core::num #t1 = (await t).{core::num::+}(1) in #t1 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t1 : #t1;
+ return (await t).{core::num::+}(1);
};
}
static method test2(self::C<core::num?> c) → dynamic {
<S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
- return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
return s + 1; // error
^" in s.{core::num::+}(1);
};
<S extends FutureOr<core::num?> = FutureOr<core::num?>>(S%, FutureOr<core::num?>) → asy::Future<core::num> f2 = c.{self::C::field2} = <S extends FutureOr<core::num?> = FutureOr<core::num?>>(S% s, FutureOr<core::num?>t) → asy::Future<core::num> async {
- return let final core::num #t3 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
return (await t) + 1; // error
- ^" in (await t).{core::num::+}(1) in #t3 is asy::Future<core::num> ?{FutureOr<dynamic>} await #t3 : #t3;
+ ^" in (await t).{core::num::+}(1);
};
}
static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
- return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
test3<S extends num?>(S s) => s + 1; // error
^" in s.{core::num::+}(1);
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
index b08be8f..b287a57 100644
--- a/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue41697.dart.weak.transformed.expect
@@ -43,21 +43,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
{
[yield] let dynamic #t1 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
- final core::num #t2 = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
- if(#t2 is asy::Future<core::num>) {
- [yield] let dynamic #t3 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::num>(:result);
- }
- else {
- :async_temporary_0 = #t2;
- }
- :return_value = :async_temporary_0;
+ :return_value = _in::unsafeCast<core::num>(:result).{core::num::+}(1);
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -75,7 +66,7 @@
}
static method test2(self::C<core::num?> c) → dynamic {
<S extends core::num? = core::num?>(S%) → core::num f1 = c.{self::C::field1} = <S extends core::num? = core::num?>(S% s) → core::num {
- return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:33:14: Error: Operator '+' cannot be called on 'S' because it is potentially null.
return s + 1; // error
^" in s.{core::num::+}(1);
};
@@ -88,24 +79,15 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
- final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
+ final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:36:22: Error: Operator '+' cannot be called on 'num?' because it is potentially null.
return (await t) + 1; // error
^";
- [yield] let dynamic #t6 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
- final core::num #t7 = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
- if(#t7 is asy::Future<core::num>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::num>(:result);
- }
- else {
- :async_temporary_0 = #t7;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t4 = asy::_awaitHelper(t, :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = _in::unsafeCast<core::num?>(:result).{core::num::+}(1);
break #L2;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -122,7 +104,7 @@
};
}
static method test3<S extends core::num? = core::num?>(self::test3::S% s) → dynamic
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
+ return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/issue41697.dart:40:33: Error: Operator '+' cannot be called on 'S' because it is potentially null.
test3<S extends num?>(S s) => s + 1; // error
^" in s.{core::num::+}(1);
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
index c1d787d..aaf931d 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.expect
@@ -7,6 +7,6 @@
return null;
static method fn() → asy::Future<core::Object> async {
core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
- return let final dynamic #t1 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> in #t1 is asy::Future<core::Object> ?{FutureOr<core::Object>} await #t1 : #t1;
+ return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
index b5edde0..4e127a6 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.strong.transformed.expect
@@ -2,7 +2,6 @@
import self as self;
import "dart:async" as asy;
import "dart:core" as core;
-import "dart:_internal" as _in;
static method getNull() → dynamic
return null;
@@ -15,7 +14,6 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::Object>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -23,15 +21,7 @@
[yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
core::Object o = let dynamic #t2 = :result in #t2.==(null) ?{core::Object} #t2 as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object : #t2{core::Object};
[yield] let dynamic #t3 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::Object>#t4 = let dynamic #t5 = :result in #t5.==(null) ?{FutureOr<core::Object>} #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t5{FutureOr<core::Object>};
- if(#t4 is asy::Future<core::Object>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t4, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::Object>(:result);
- }
- else {
- :async_temporary_0 = #t4;
- }
- :return_value = :async_temporary_0;
+ :return_value = let dynamic #t4 = :result in #t4.==(null) ?{FutureOr<core::Object>} #t4 as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> : #t4{FutureOr<core::Object>};
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
index c1d787d..aaf931d 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.expect
@@ -7,6 +7,6 @@
return null;
static method fn() → asy::Future<core::Object> async {
core::Object o = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
- return let final dynamic #t1 = await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object> in #t1 is asy::Future<core::Object> ?{FutureOr<core::Object>} await #t1 : #t1;
+ return await self::getNull() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::Object>;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
index 36497a3..e61b30d 100644
--- a/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42540.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
import self as self;
import "dart:async" as asy;
import "dart:core" as core;
-import "dart:_internal" as _in;
static method getNull() → dynamic
return null;
@@ -15,7 +14,6 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<core::Object>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -23,15 +21,7 @@
[yield] let dynamic #t1 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
core::Object o = :result;
[yield] let dynamic #t2 = asy::_awaitHelper(self::getNull(), :async_op_then, :async_op_error, :async_op) in null;
- final FutureOr<core::Object>#t3 = :result;
- if(#t3 is asy::Future<core::Object>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::Object>(:result);
- }
- else {
- :async_temporary_0 = #t3;
- }
- :return_value = :async_temporary_0;
+ :return_value = :result;
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
index e446f7c..e5372a7 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.expect
@@ -42,11 +42,11 @@
- 'Future' is from 'dart:async'.
- 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+ ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
- 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- 'Future' is from 'dart:async'.
Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>> in #t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> ?{FutureOr<dynamic>} await #t2 : #t2).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+ ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
deleted file mode 100644
index 5ae2bec..0000000
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.strong.transformed.expect
+++ /dev/null
@@ -1,126 +0,0 @@
-library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
-// - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-// - 'Future' is from 'dart:async'.
-// Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-// ^
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
-// - 'Future' is from 'dart:async'.
-// - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-// Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-// ^
-//
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
- synthetic constructor •() → self::Divergent<self::Divergent::T%>
- : super core::Object::•()
- ;
- method noSuchMethod(core::Invocation invocation) → dynamic
- return super.{core::Object::noSuchMethod}(invocation);
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-}
-static method test() → dynamic /* originally async */ {
- final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
- core::bool* :is_sync = false;
- FutureOr<dynamic>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L1:
- {
- asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
- - 'Future' is from 'dart:async'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
- final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
- core::bool* :is_sync = false;
- FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L2:
- {
- final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- - 'Future' is from 'dart:async'.
- Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
- if(#t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<self::Divergent<self::Divergent<core::int>>>(:result);
- }
- else {
- :async_temporary_0 = #t2;
- }
- :return_value = :async_temporary_0;
- break #L2;
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
- }).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method main() → dynamic {}
-
-constants {
- #C1 = null
- #C2 = #catchError
- #C3 = <core::Type*>[]
- #C4 = #test
- #C5 = #whenComplete
- #C6 = <dynamic>[]
- #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
- #C8 = #timeout
- #C9 = #onTimeout
- #C10 = #then
- #C11 = #onError
- #C12 = #asStream
-}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
index e446f7c..e5372a7 100644
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.expect
@@ -42,11 +42,11 @@
- 'Future' is from 'dart:async'.
- 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
+ ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> async => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
- 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- 'Future' is from 'dart:async'.
Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>> in #t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> ?{FutureOr<dynamic>} await #t2 : #t2).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
+ ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
deleted file mode 100644
index 5ae2bec..0000000
--- a/pkg/front_end/testcases/nnbd/issue42546.dart.weak.transformed.expect
+++ /dev/null
@@ -1,126 +0,0 @@
-library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
-// - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-// - 'Future' is from 'dart:async'.
-// Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-// ^
-//
-// pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
-// - 'Future' is from 'dart:async'.
-// - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
-// Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
-// ^
-//
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-class Divergent<T extends core::Object? = dynamic> extends core::Object implements asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>> {
- synthetic constructor •() → self::Divergent<self::Divergent::T%>
- : super core::Object::•()
- ;
- method noSuchMethod(core::Invocation invocation) → dynamic
- return super.{core::Object::noSuchMethod}(invocation);
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ catchError(core::Function onError, {(core::Object) →? core::bool test = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onError)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C4: test}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ whenComplete(() → FutureOr<void>action) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C5, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(action)), core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ timeout(core::Duration timeLimit, {generic-covariant-impl () →? FutureOr<self::Divergent<self::Divergent<self::Divergent::T%>>>onTimeout = #C1}) → asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C8, 0, #C3, core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(timeLimit)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C9: onTimeout}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<self::Divergent::T%>>>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ then<R extends core::Object? = dynamic>((self::Divergent<self::Divergent<self::Divergent::T%>>) → FutureOr<self::Divergent::then::R%>onValue, {core::Function? onError = #C1}) → asy::Future<self::Divergent::then::R%>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C10, 0, core::List::unmodifiable<core::Type*>(core::_GrowableList::_literal1<core::Type*>(self::Divergent::then::R%)), core::List::unmodifiable<dynamic>(core::_GrowableList::_literal1<dynamic>(onValue)), core::Map::unmodifiable<core::Symbol*, dynamic>(<core::Symbol*, dynamic>{#C11: onError}))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Future<self::Divergent::then::R%>;
- no-such-method-forwarder method /* from org-dartlang-sdk:///sdk/lib/async/future.dart */ asStream() → asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>
- return this.{self::Divergent::noSuchMethod}(new core::_InvocationMirror::_withType(#C12, 0, #C3, #C6, core::Map::unmodifiable<core::Symbol*, dynamic>(#C7))) as{TypeError,ForDynamic,ForNonNullableByDefault} asy::Stream<self::Divergent<self::Divergent<self::Divergent::T%>>>;
-}
-static method test() → dynamic /* originally async */ {
- final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
- core::bool* :is_sync = false;
- FutureOr<dynamic>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L1:
- {
- asy::Future<self::Divergent<self::Divergent<core::int>>> x = let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:75: Error: A value of type 'Future<Divergent<Divergent<Divergent<int>>>>' can't be assigned to a variable of type 'Future<Divergent<Divergent<int>>>'.
- - 'Future' is from 'dart:async'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in (() → asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> /* originally async */ {
- final asy::_Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>> :async_future = new asy::_Future::•<self::Divergent<self::Divergent<self::Divergent<core::int>>>>();
- core::bool* :is_sync = false;
- FutureOr<self::Divergent<self::Divergent<self::Divergent<core::int>>>>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L2:
- {
- final self::Divergent<core::int> #t2 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue42546.dart:14:58: Error: A value of type 'Divergent<int>' can't be returned from an async function with return type 'Future<Divergent<Divergent<Divergent<int>>>>'.
- - 'Divergent' is from 'pkg/front_end/testcases/nnbd/issue42546.dart'.
- - 'Future' is from 'dart:async'.
- Future<Divergent<Divergent<int>>> x = (() async => new Divergent<int>())();
- ^" in new self::Divergent::•<core::int>() as{TypeError,ForNonNullableByDefault} self::Divergent<self::Divergent<self::Divergent<core::int>>>;
- if(#t2 is asy::Future<self::Divergent<self::Divergent<self::Divergent<core::int>>>>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t2, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<self::Divergent<self::Divergent<core::int>>>(:result);
- }
- else {
- :async_temporary_0 = #t2;
- }
- :return_value = :async_temporary_0;
- break #L2;
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
- }).call() as{TypeError,ForNonNullableByDefault} asy::Future<self::Divergent<self::Divergent<core::int>>>;
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method main() → dynamic {}
-
-constants {
- #C1 = null
- #C2 = #catchError
- #C3 = <core::Type*>[]
- #C4 = #test
- #C5 = #whenComplete
- #C6 = <dynamic>[]
- #C7 = core::_ImmutableMap<core::Symbol*, dynamic> {_kvPairs:#C6}
- #C8 = #timeout
- #C9 = #onTimeout
- #C10 = #then
- #C11 = #onError
- #C12 = #asStream
-}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
index eaaabba4..1d21b07 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.expect
@@ -11,6 +11,6 @@
};
(dynamic _) → asy::Future<core::int?> async {
if(b)
- return let final core::int #t1 = 42 in #t1 is asy::Future<core::int?> ?{FutureOr<dynamic>} await #t1 : #t1;
+ return 42;
};
}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
index 1509333..0ab4a75 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.strong.transformed.expect
@@ -2,7 +2,6 @@
import self as self;
import "dart:async" as asy;
import "dart:core" as core;
-import "dart:_internal" as _in;
static method main() → dynamic /* originally async */ {
final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
@@ -29,22 +28,12 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
if(b) {
- final core::int #t1 = 42;
- if(#t1 is asy::Future<core::int?>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
+ :return_value = 42;
break #L2;
}
}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
index eaaabba4..1d21b07 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.expect
@@ -11,6 +11,6 @@
};
(dynamic _) → asy::Future<core::int?> async {
if(b)
- return let final core::int #t1 = 42 in #t1 is asy::Future<core::int?> ?{FutureOr<dynamic>} await #t1 : #t1;
+ return 42;
};
}
diff --git a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
index 1509333..0ab4a75 100644
--- a/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue42743.dart.weak.transformed.expect
@@ -2,7 +2,6 @@
import self as self;
import "dart:async" as asy;
import "dart:core" as core;
-import "dart:_internal" as _in;
static method main() → dynamic /* originally async */ {
final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
@@ -29,22 +28,12 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L2:
{
if(b) {
- final core::int #t1 = 42;
- if(#t1 is asy::Future<core::int?>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
+ :return_value = 42;
break #L2;
}
}
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
index 17dcee5..df47af6 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.expect
@@ -120,7 +120,7 @@
await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
core::print(s);
}
- return let final core::String #t2 = "hest" in #t2 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t2 : #t2;
+ return "hest";
}
static method fisk() → dynamic async {
late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
@@ -129,7 +129,7 @@
late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
late String s2 = '\${fisk}\${await hest()}\${fisk}';
^^^^^"}${#C1}";
- late core::Function f = () → asy::Future<dynamic> async => let final dynamic #t3 = await self::hest() in #t3 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t3 : #t3;
+ late core::Function f = () → asy::Future<dynamic> async => await self::hest();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
index 53a4028..2aba575 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.strong.transformed.expect
@@ -135,8 +135,6 @@
dynamic :saved_try_context_var1;
dynamic :exception0;
dynamic :stack_trace0;
- FutureOr<dynamic>:async_temporary_0;
- FutureOr<dynamic>:async_temporary_1;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -164,15 +162,7 @@
:result;
}
}
- final core::String #t5 = "hest";
- if(#t5 is asy::Future<dynamic>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_1 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_1 = #t5;
- }
- :return_value = :async_temporary_1;
+ :return_value = "hest";
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -219,21 +209,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- [yield] let dynamic #t7 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t8 = :result;
- if(#t8 is asy::Future<dynamic>) {
- [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t8;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index 17dcee5..df47af6 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -120,7 +120,7 @@
await for (core::String s in asy::Stream::fromIterable<core::String>(<core::String>["hest"])) {
core::print(s);
}
- return let final core::String #t2 = "hest" in #t2 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t2 : #t2;
+ return "hest";
}
static method fisk() → dynamic async {
late core::String s1 = invalid-expression "pkg/front_end/testcases/nnbd/later.dart:38:20: Error: `await` expressions are not supported in late local initializers.
@@ -129,7 +129,7 @@
late core::String s2 = "${#C1}${invalid-expression "pkg/front_end/testcases/nnbd/later.dart:39:30: Error: `await` expressions are not supported in late local initializers.
late String s2 = '\${fisk}\${await hest()}\${fisk}';
^^^^^"}${#C1}";
- late core::Function f = () → asy::Future<dynamic> async => let final dynamic #t3 = await self::hest() in #t3 is asy::Future<dynamic> ?{FutureOr<dynamic>} await #t3 : #t3;
+ late core::Function f = () → asy::Future<dynamic> async => await self::hest();
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index 53a4028..2aba575 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -135,8 +135,6 @@
dynamic :saved_try_context_var1;
dynamic :exception0;
dynamic :stack_trace0;
- FutureOr<dynamic>:async_temporary_0;
- FutureOr<dynamic>:async_temporary_1;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L1:
@@ -164,15 +162,7 @@
:result;
}
}
- final core::String #t5 = "hest";
- if(#t5 is asy::Future<dynamic>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_1 = _in::unsafeCast<core::String>(:result);
- }
- else {
- :async_temporary_1 = #t5;
- }
- :return_value = :async_temporary_1;
+ :return_value = "hest";
break #L1;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -219,21 +209,12 @@
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
dynamic :saved_try_context_var0;
- FutureOr<dynamic>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
{
- [yield] let dynamic #t7 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
- final dynamic #t8 = :result;
- if(#t8 is asy::Future<dynamic>) {
- [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = :result;
- }
- else {
- :async_temporary_0 = #t8;
- }
- :return_value = :async_temporary_0;
+ [yield] let dynamic #t5 = asy::_awaitHelper(self::hest(), :async_op_then, :async_op_error, :async_op) in null;
+ :return_value = :result;
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
index 7fe1ab7..2c50b42 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.expect
@@ -28,6 +28,6 @@
}, (core::Object e, core::StackTrace s) → void {
completer.{asy::Completer::completeError}(e, s);
});
- return let final asy::Future<void> #t1 = completer.{asy::Completer::future} in #t1 is asy::Future<void> ?{FutureOr<void>} await #t1 : #t1;
+ return completer.{asy::Completer::future};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
index d88bd46..b9094ae 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.strong.transformed.expect
@@ -106,8 +106,6 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<void>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
@@ -144,15 +142,7 @@
}, (core::Object e, core::StackTrace s) → void {
completer.{asy::Completer::completeError}(e, s);
});
- final asy::Future<void> #t7 = completer.{asy::Completer::future};
- if(#t7 is asy::Future<void>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<void>(:result);
- }
- else {
- :async_temporary_0 = #t7;
- }
- :return_value = :async_temporary_0;
+ :return_value = completer.{asy::Completer::future};
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
index 7fe1ab7..2c50b42 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.expect
@@ -28,6 +28,6 @@
}, (core::Object e, core::StackTrace s) → void {
completer.{asy::Completer::completeError}(e, s);
});
- return let final asy::Future<void> #t1 = completer.{asy::Completer::future} in #t1 is asy::Future<void> ?{FutureOr<void>} await #t1 : #t1;
+ return completer.{asy::Completer::future};
}
static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
index d88bd46..b9094ae 100644
--- a/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_async.dart.weak.transformed.expect
@@ -106,8 +106,6 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<void>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L4:
@@ -144,15 +142,7 @@
}, (core::Object e, core::StackTrace s) → void {
completer.{asy::Completer::completeError}(e, s);
});
- final asy::Future<void> #t7 = completer.{asy::Completer::future};
- if(#t7 is asy::Future<void>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<void>(:result);
- }
- else {
- :async_temporary_0 = #t7;
- }
- :return_value = :async_temporary_0;
+ :return_value = completer.{asy::Completer::future};
break #L4;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart b/pkg/front_end/testcases/nnbd/return_from_async.dart
deleted file mode 100644
index 93e646e..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart
+++ /dev/null
@@ -1,98 +0,0 @@
-// Copyright (c) 2020, 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 'dart:async';
-
-bool caughtFutureOrInt = false;
-
-FutureOr<int> throwFutureOrInt() async {
- throw 'FutureOr<int>';
-}
-
-Future<int> callFutureOrInt() async {
- try {
- return throwFutureOrInt();
- } catch (e) {
- print('Caught "$e"');
- caughtFutureOrInt = true;
- return 0;
- }
-}
-
-bool caughtInt = false;
-
-int throwInt() {
- throw 'int';
-}
-
-Future<int> callInt() async {
- try {
- return throwInt();
- } catch (e) {
- print('Caught "$e"');
- caughtInt = true;
- return 0;
- }
-}
-
-bool caughtFutureInt = false;
-
-Future<int> throwFutureInt() async {
- throw 'Future<int>';
-}
-
-Future<int> callFutureInt() async {
- try {
- return throwFutureInt();
- } catch (e) {
- print('Caught "$e"');
- caughtFutureInt = true;
- return 0;
- }
-}
-
-bool caughtDynamic = false;
-
-dynamic throwDynamic() {
- throw 'dynamic';
-}
-
-Future<int> callDynamic() async {
- try {
- return throwDynamic();
- } catch (e) {
- print('Caught "$e"');
- caughtDynamic = true;
- return 0;
- }
-}
-
-bool caughtFutureNum = false;
-
-Future<int> throwFutureNum() async {
- throw 'Future<num>';
-}
-
-Future<num> callFutureNum() async {
- try {
- return throwFutureNum();
- } catch (e) {
- print('Caught "$e"');
- caughtFutureNum = true;
- return 0;
- }
-}
-
-void main() async {
- await callFutureOrInt();
- if (!caughtFutureOrInt) throw 'Uncaught async return';
- await callInt();
- if (!caughtInt) throw 'Uncaught async return';
- await callFutureInt();
- if (!caughtFutureInt) throw 'Uncaught async return';
- await callDynamic();
- if (!caughtDynamic) throw 'Uncaught async return';
- await callFutureNum();
- if (!caughtFutureNum) throw 'Uncaught async return';
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.outline.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.outline.expect
deleted file mode 100644
index fce58f8..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.outline.expect
+++ /dev/null
@@ -1,34 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt;
-static field core::bool caughtInt;
-static field core::bool caughtFutureInt;
-static field core::bool caughtDynamic;
-static field core::bool caughtFutureNum;
-static method throwFutureOrInt() → FutureOr<core::int> async
- ;
-static method callFutureOrInt() → asy::Future<core::int> async
- ;
-static method throwInt() → core::int
- ;
-static method callInt() → asy::Future<core::int> async
- ;
-static method throwFutureInt() → asy::Future<core::int> async
- ;
-static method callFutureInt() → asy::Future<core::int> async
- ;
-static method throwDynamic() → dynamic
- ;
-static method callDynamic() → asy::Future<core::int> async
- ;
-static method throwFutureNum() → asy::Future<core::int> async
- ;
-static method callFutureNum() → asy::Future<core::num> async
- ;
-static method main() → void async
- ;
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.expect
deleted file mode 100644
index 07f9c6e..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.expect
+++ /dev/null
@@ -1,94 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> async {
- throw "FutureOr<int>";
-}
-static method callFutureOrInt() → asy::Future<core::int> async {
- try {
- return let final FutureOr<core::int>#t1 = self::throwFutureOrInt() in #t1 is asy::Future<core::int> ?{FutureOr<core::int>} await #t1 : #t1;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureOrInt = true;
- return let final core::int #t2 = 0 in #t2 is asy::Future<core::int> ?{FutureOr<core::int>} await #t2 : #t2;
- }
-}
-static method throwInt() → core::int {
- throw "int";
-}
-static method callInt() → asy::Future<core::int> async {
- try {
- return let final core::int #t3 = self::throwInt() in #t3 is asy::Future<core::int> ?{FutureOr<core::int>} await #t3 : #t3;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtInt = true;
- return let final core::int #t4 = 0 in #t4 is asy::Future<core::int> ?{FutureOr<core::int>} await #t4 : #t4;
- }
-}
-static method throwFutureInt() → asy::Future<core::int> async {
- throw "Future<int>";
-}
-static method callFutureInt() → asy::Future<core::int> async {
- try {
- return let final asy::Future<core::int> #t5 = self::throwFutureInt() in #t5 is asy::Future<core::int> ?{FutureOr<core::int>} await #t5 : #t5;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureInt = true;
- return let final core::int #t6 = 0 in #t6 is asy::Future<core::int> ?{FutureOr<core::int>} await #t6 : #t6;
- }
-}
-static method throwDynamic() → dynamic {
- throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> async {
- try {
- return let final dynamic #t7 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int> in #t7 is asy::Future<core::int> ?{FutureOr<core::int>} await #t7 : #t7;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtDynamic = true;
- return let final core::int #t8 = 0 in #t8 is asy::Future<core::int> ?{FutureOr<core::int>} await #t8 : #t8;
- }
-}
-static method throwFutureNum() → asy::Future<core::int> async {
- throw "Future<num>";
-}
-static method callFutureNum() → asy::Future<core::num> async {
- try {
- return let final asy::Future<core::int> #t9 = self::throwFutureNum() in #t9 is asy::Future<core::num> ?{FutureOr<core::num>} await #t9 : #t9;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureNum = true;
- return let final core::int #t10 = 0 in #t10 is asy::Future<core::num> ?{FutureOr<core::num>} await #t10 : #t10;
- }
-}
-static method main() → void async {
- await self::callFutureOrInt();
- if(!self::caughtFutureOrInt)
- throw "Uncaught async return";
- await self::callInt();
- if(!self::caughtInt)
- throw "Uncaught async return";
- await self::callFutureInt();
- if(!self::caughtFutureInt)
- throw "Uncaught async return";
- await self::callDynamic();
- if(!self::caughtDynamic)
- throw "Uncaught async return";
- await self::callFutureNum();
- if(!self::caughtFutureNum)
- throw "Uncaught async return";
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.transformed.expect
deleted file mode 100644
index 5bd5d9f..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.strong.transformed.expect
+++ /dev/null
@@ -1,433 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L1:
- {
- throw "FutureOr<int>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureOrInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L2:
- {
- try {
- final FutureOr<core::int>#t1 = self::throwFutureOrInt();
- if(#t1 is asy::Future<core::int>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
- break #L2;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureOrInt = true;
- final core::int #t3 = 0;
- if(#t3 is asy::Future<core::int>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t3;
- }
- :return_value = :async_temporary_2;
- break #L2;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwInt() → core::int {
- throw "int";
-}
-static method callInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L3:
- {
- try {
- final core::int #t5 = self::throwInt();
- if(#t5 is asy::Future<core::int>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t5;
- }
- :return_value = :async_temporary_0;
- break #L3;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtInt = true;
- final core::int #t7 = 0;
- if(#t7 is asy::Future<core::int>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t7;
- }
- :return_value = :async_temporary_2;
- break #L3;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwFutureInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L4:
- {
- throw "Future<int>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L5:
- {
- try {
- final asy::Future<core::int> #t9 = self::throwFutureInt();
- if(#t9 is asy::Future<core::int>) {
- [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t9;
- }
- :return_value = :async_temporary_0;
- break #L5;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureInt = true;
- final core::int #t11 = 0;
- if(#t11 is asy::Future<core::int>) {
- [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t11;
- }
- :return_value = :async_temporary_2;
- break #L5;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwDynamic() → dynamic {
- throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L6:
- {
- try {
- final FutureOr<core::int>#t13 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int>;
- if(#t13 is asy::Future<core::int>) {
- [yield] let dynamic #t14 = asy::_awaitHelper(#t13, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t13;
- }
- :return_value = :async_temporary_0;
- break #L6;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtDynamic = true;
- final core::int #t15 = 0;
- if(#t15 is asy::Future<core::int>) {
- [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t15;
- }
- :return_value = :async_temporary_2;
- break #L6;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwFutureNum() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L7:
- {
- throw "Future<num>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureNum() → asy::Future<core::num> /* originally async */ {
- final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
- core::bool* :is_sync = false;
- FutureOr<core::num>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::num>:async_temporary_0;
- FutureOr<core::num>:async_temporary_1;
- FutureOr<core::num>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L8:
- {
- try {
- final asy::Future<core::int> #t17 = self::throwFutureNum();
- if(#t17 is asy::Future<core::num>) {
- [yield] let dynamic #t18 = asy::_awaitHelper(#t17, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t17;
- }
- :return_value = :async_temporary_0;
- break #L8;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureNum = true;
- final core::int #t19 = 0;
- if(#t19 is asy::Future<core::num>) {
- [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t19;
- }
- :return_value = :async_temporary_2;
- break #L8;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method main() → void /* originally async */ {
- final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
- core::bool* :is_sync = false;
- FutureOr<dynamic>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L9:
- {
- [yield] let dynamic #t21 = asy::_awaitHelper(self::callFutureOrInt(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtFutureOrInt)
- throw "Uncaught async return";
- [yield] let dynamic #t22 = asy::_awaitHelper(self::callInt(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtInt)
- throw "Uncaught async return";
- [yield] let dynamic #t23 = asy::_awaitHelper(self::callFutureInt(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtFutureInt)
- throw "Uncaught async return";
- [yield] let dynamic #t24 = asy::_awaitHelper(self::callDynamic(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtDynamic)
- throw "Uncaught async return";
- [yield] let dynamic #t25 = asy::_awaitHelper(self::callFutureNum(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::num>(:result);
- if(!self::caughtFutureNum)
- throw "Uncaught async return";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline.expect
deleted file mode 100644
index bc32d23..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline.expect
+++ /dev/null
@@ -1,18 +0,0 @@
-import 'dart:async';
-
-bool caughtFutureOrInt = false;
-FutureOr<int> throwFutureOrInt() async {}
-Future<int> callFutureOrInt() async {}
-bool caughtInt = false;
-int throwInt() {}
-Future<int> callInt() async {}
-bool caughtFutureInt = false;
-Future<int> throwFutureInt() async {}
-Future<int> callFutureInt() async {}
-bool caughtDynamic = false;
-dynamic throwDynamic() {}
-Future<int> callDynamic() async {}
-bool caughtFutureNum = false;
-Future<int> throwFutureNum() async {}
-Future<num> callFutureNum() async {}
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline_modelled.expect
deleted file mode 100644
index 7a7e905..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,18 +0,0 @@
-import 'dart:async';
-
-Future<int> callDynamic() async {}
-Future<int> callFutureInt() async {}
-Future<int> callFutureOrInt() async {}
-Future<int> callInt() async {}
-Future<int> throwFutureInt() async {}
-Future<int> throwFutureNum() async {}
-Future<num> callFutureNum() async {}
-FutureOr<int> throwFutureOrInt() async {}
-bool caughtDynamic = false;
-bool caughtFutureInt = false;
-bool caughtFutureNum = false;
-bool caughtFutureOrInt = false;
-bool caughtInt = false;
-dynamic throwDynamic() {}
-int throwInt() {}
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.expect
deleted file mode 100644
index 07f9c6e..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.expect
+++ /dev/null
@@ -1,94 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> async {
- throw "FutureOr<int>";
-}
-static method callFutureOrInt() → asy::Future<core::int> async {
- try {
- return let final FutureOr<core::int>#t1 = self::throwFutureOrInt() in #t1 is asy::Future<core::int> ?{FutureOr<core::int>} await #t1 : #t1;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureOrInt = true;
- return let final core::int #t2 = 0 in #t2 is asy::Future<core::int> ?{FutureOr<core::int>} await #t2 : #t2;
- }
-}
-static method throwInt() → core::int {
- throw "int";
-}
-static method callInt() → asy::Future<core::int> async {
- try {
- return let final core::int #t3 = self::throwInt() in #t3 is asy::Future<core::int> ?{FutureOr<core::int>} await #t3 : #t3;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtInt = true;
- return let final core::int #t4 = 0 in #t4 is asy::Future<core::int> ?{FutureOr<core::int>} await #t4 : #t4;
- }
-}
-static method throwFutureInt() → asy::Future<core::int> async {
- throw "Future<int>";
-}
-static method callFutureInt() → asy::Future<core::int> async {
- try {
- return let final asy::Future<core::int> #t5 = self::throwFutureInt() in #t5 is asy::Future<core::int> ?{FutureOr<core::int>} await #t5 : #t5;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureInt = true;
- return let final core::int #t6 = 0 in #t6 is asy::Future<core::int> ?{FutureOr<core::int>} await #t6 : #t6;
- }
-}
-static method throwDynamic() → dynamic {
- throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> async {
- try {
- return let final dynamic #t7 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int> in #t7 is asy::Future<core::int> ?{FutureOr<core::int>} await #t7 : #t7;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtDynamic = true;
- return let final core::int #t8 = 0 in #t8 is asy::Future<core::int> ?{FutureOr<core::int>} await #t8 : #t8;
- }
-}
-static method throwFutureNum() → asy::Future<core::int> async {
- throw "Future<num>";
-}
-static method callFutureNum() → asy::Future<core::num> async {
- try {
- return let final asy::Future<core::int> #t9 = self::throwFutureNum() in #t9 is asy::Future<core::num> ?{FutureOr<core::num>} await #t9 : #t9;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureNum = true;
- return let final core::int #t10 = 0 in #t10 is asy::Future<core::num> ?{FutureOr<core::num>} await #t10 : #t10;
- }
-}
-static method main() → void async {
- await self::callFutureOrInt();
- if(!self::caughtFutureOrInt)
- throw "Uncaught async return";
- await self::callInt();
- if(!self::caughtInt)
- throw "Uncaught async return";
- await self::callFutureInt();
- if(!self::caughtFutureInt)
- throw "Uncaught async return";
- await self::callDynamic();
- if(!self::caughtDynamic)
- throw "Uncaught async return";
- await self::callFutureNum();
- if(!self::caughtFutureNum)
- throw "Uncaught async return";
-}
diff --git a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.transformed.expect
deleted file mode 100644
index 5bd5d9f..0000000
--- a/pkg/front_end/testcases/nnbd/return_from_async.dart.weak.transformed.expect
+++ /dev/null
@@ -1,433 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-
-import "dart:async";
-
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method throwFutureOrInt() → FutureOr<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L1:
- {
- throw "FutureOr<int>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureOrInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L2:
- {
- try {
- final FutureOr<core::int>#t1 = self::throwFutureOrInt();
- if(#t1 is asy::Future<core::int>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
- break #L2;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureOrInt = true;
- final core::int #t3 = 0;
- if(#t3 is asy::Future<core::int>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t3;
- }
- :return_value = :async_temporary_2;
- break #L2;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwInt() → core::int {
- throw "int";
-}
-static method callInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L3:
- {
- try {
- final core::int #t5 = self::throwInt();
- if(#t5 is asy::Future<core::int>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t5;
- }
- :return_value = :async_temporary_0;
- break #L3;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtInt = true;
- final core::int #t7 = 0;
- if(#t7 is asy::Future<core::int>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t7;
- }
- :return_value = :async_temporary_2;
- break #L3;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwFutureInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L4:
- {
- throw "Future<int>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L5:
- {
- try {
- final asy::Future<core::int> #t9 = self::throwFutureInt();
- if(#t9 is asy::Future<core::int>) {
- [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t9;
- }
- :return_value = :async_temporary_0;
- break #L5;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureInt = true;
- final core::int #t11 = 0;
- if(#t11 is asy::Future<core::int>) {
- [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t11;
- }
- :return_value = :async_temporary_2;
- break #L5;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwDynamic() → dynamic {
- throw "dynamic";
-}
-static method callDynamic() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L6:
- {
- try {
- final FutureOr<core::int>#t13 = self::throwDynamic() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int>;
- if(#t13 is asy::Future<core::int>) {
- [yield] let dynamic #t14 = asy::_awaitHelper(#t13, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t13;
- }
- :return_value = :async_temporary_0;
- break #L6;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtDynamic = true;
- final core::int #t15 = 0;
- if(#t15 is asy::Future<core::int>) {
- [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t15;
- }
- :return_value = :async_temporary_2;
- break #L6;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method throwFutureNum() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L7:
- {
- throw "Future<num>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureNum() → asy::Future<core::num> /* originally async */ {
- final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
- core::bool* :is_sync = false;
- FutureOr<core::num>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::num>:async_temporary_0;
- FutureOr<core::num>:async_temporary_1;
- FutureOr<core::num>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L8:
- {
- try {
- final asy::Future<core::int> #t17 = self::throwFutureNum();
- if(#t17 is asy::Future<core::num>) {
- [yield] let dynamic #t18 = asy::_awaitHelper(#t17, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t17;
- }
- :return_value = :async_temporary_0;
- break #L8;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureNum = true;
- final core::int #t19 = 0;
- if(#t19 is asy::Future<core::num>) {
- [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t19;
- }
- :return_value = :async_temporary_2;
- break #L8;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method main() → void /* originally async */ {
- final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
- core::bool* :is_sync = false;
- FutureOr<dynamic>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L9:
- {
- [yield] let dynamic #t21 = asy::_awaitHelper(self::callFutureOrInt(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtFutureOrInt)
- throw "Uncaught async return";
- [yield] let dynamic #t22 = asy::_awaitHelper(self::callInt(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtInt)
- throw "Uncaught async return";
- [yield] let dynamic #t23 = asy::_awaitHelper(self::callFutureInt(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtFutureInt)
- throw "Uncaught async return";
- [yield] let dynamic #t24 = asy::_awaitHelper(self::callDynamic(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtDynamic)
- throw "Uncaught async return";
- [yield] let dynamic #t25 = asy::_awaitHelper(self::callFutureNum(), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::num>(:result);
- if(!self::caughtFutureNum)
- throw "Uncaught async return";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
index dab461b..70d918b 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -103,7 +103,7 @@
static method returnAsync4() → FutureOr<core::int?> async {}
static method returnAsync5() → dynamic async {}
static method returnAsync6() → asy::Future<core::int?> async {
- return let final Null #t6 = null in #t6 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t6 : #t6;
+ return null;
}
static method returnAsync7() → asy::Future<core::int?> async {}
static method yieldSync() → core::Iterable<dynamic> sync* {}
@@ -133,7 +133,7 @@
default:
{}
}
- return let final<BottomType> #t7 = 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.
+ return let final<BottomType> #t6 = 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;
@@ -141,38 +141,38 @@
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t8 = invalid-expression "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.
+ return let final<BottomType> #t7 = invalid-expression "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 */ {
^" in null;
}
function returnExplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::String;
}
function returnMixed(core::bool b) → core::String {
if(b) {
core::print("foo");
- return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::String;
}
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String returnMixed(bool b) /* error */ {
^" in null;
}
function returnAsync1() → asy::Future<dynamic> async {}
function returnAsync2() → FutureOr<dynamic> async {}
function returnAsync3() → FutureOr<core::int> async {
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+ return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
FutureOr<int> returnAsync3() async {} // error
^" in null;
}
function returnAsync4() → FutureOr<core::int?> async {}
function returnAsync5() → asy::Future<Null> async {}
function returnAsync6() → asy::Future<core::int?> async {
- return let final Null #t13 = null in #t13 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t13 : #t13;
+ return null;
}
function returnAsync7() → asy::Future<core::int?> async {}
function yieldSync() → core::Iterable<dynamic> sync* {}
@@ -202,7 +202,7 @@
default:
{}
}
- return let final<BottomType> #t14 = 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.
+ return let final<BottomType> #t12 = 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;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
index af2d2ae..2b1a3dc 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -55,7 +55,6 @@
import self as self;
import "dart:core" as core;
import "dart:async" as asy;
-import "dart:_internal" as _in;
import "dart:async";
@@ -227,21 +226,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::int?>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L6:
{
- final Null #t8 = null;
- if(#t8 is asy::Future<core::int?>) {
- [yield] let dynamic #t9 = asy::_awaitHelper(#t8, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t8;
- }
- :return_value = :async_temporary_0;
+ :return_value = null;
break #L6;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -343,7 +332,7 @@
default:
{}
}
- return let final<BottomType> #t10 = 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.
+ return let final<BottomType> #t8 = 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;
@@ -351,24 +340,24 @@
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t11 = invalid-expression "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.
+ return let final<BottomType> #t9 = invalid-expression "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 */ {
^" in null;
}
function returnExplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
- ^" in let Null #t13 = null in #t13.==(null) ?{core::String} #t13 as{TypeError,ForNonNullableByDefault} core::String : #t13{core::String};
+ ^" in let Null #t11 = null in #t11.==(null) ?{core::String} #t11 as{TypeError,ForNonNullableByDefault} core::String : #t11{core::String};
}
function returnMixed(core::bool b) → core::String {
if(b) {
core::print("foo");
- return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
- ^" in let Null #t15 = null in #t15.==(null) ?{core::String} #t15 as{TypeError,ForNonNullableByDefault} core::String : #t15{core::String};
+ ^" in let Null #t13 = null in #t13.==(null) ?{core::String} #t13 as{TypeError,ForNonNullableByDefault} core::String : #t13{core::String};
}
- return let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String returnMixed(bool b) /* error */ {
^" in null;
}
@@ -432,7 +421,7 @@
try {
#L15:
{
- :return_value = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+ :return_value = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
FutureOr<int> returnAsync3() async {} // error
^" in null;
break #L15;
@@ -505,21 +494,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::int?>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L18:
{
- final Null #t18 = null;
- if(#t18 is asy::Future<core::int?>) {
- [yield] let dynamic #t19 = asy::_awaitHelper(#t18, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t18;
- }
- :return_value = :async_temporary_0;
+ :return_value = null;
break #L18;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -621,7 +600,7 @@
default:
{}
}
- return let final<BottomType> #t20 = 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.
+ return let final<BottomType> #t16 = 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;
@@ -663,7 +642,7 @@
Evaluated: MethodInvocation @ org-dartlang-testcase:///return_null.dart:75:14 -> BoolConstant(true)
Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:75:14 -> NullConstant(null)
Evaluated: VariableGet @ org-dartlang-testcase:///return_null.dart:75:14 -> NullConstant(null)
-Extra constant evaluation: evaluated: 422, effectively constant: 12
+Extra constant evaluation: evaluated: 394, effectively constant: 12
Constructor coverage from constants:
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
index aef28a4..0513741 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -104,7 +104,7 @@
static method returnAsync4() → FutureOr<core::int?> async {}
static method returnAsync5() → dynamic async {}
static method returnAsync6() → asy::Future<core::int?> async {
- return let final Null #t6 = null in #t6 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t6 : #t6;
+ return null;
}
static method returnAsync7() → asy::Future<core::int?> async {}
static method yieldSync() → core::Iterable<dynamic> sync* {}
@@ -137,7 +137,7 @@
default:
{}
}
- return let final<BottomType> #t7 = 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.
+ return let final<BottomType> #t6 = 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;
@@ -145,38 +145,38 @@
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t8 = invalid-expression "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.
+ return let final<BottomType> #t7 = invalid-expression "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 */ {
^" in null;
}
function returnExplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::String;
}
function returnMixed(core::bool b) → core::String {
if(b) {
core::print("foo");
- return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
^" in null as{TypeError,ForNonNullableByDefault} core::String;
}
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String returnMixed(bool b) /* error */ {
^" in null;
}
function returnAsync1() → asy::Future<dynamic> async {}
function returnAsync2() → FutureOr<dynamic> async {}
function returnAsync3() → FutureOr<core::int> async {
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+ return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
FutureOr<int> returnAsync3() async {} // error
^" in null;
}
function returnAsync4() → FutureOr<core::int?> async {}
function returnAsync5() → asy::Future<Null> async {}
function returnAsync6() → asy::Future<core::int?> async {
- return let final Null #t13 = null in #t13 is asy::Future<core::int?> ?{FutureOr<core::int?>} await #t13 : #t13;
+ return null;
}
function returnAsync7() → asy::Future<core::int?> async {}
function yieldSync() → core::Iterable<dynamic> sync* {}
@@ -209,7 +209,7 @@
default:
{}
}
- return let final<BottomType> #t14 = 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.
+ return let final<BottomType> #t12 = 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;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
index dba40e5..3643cf7 100644
--- a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -227,21 +227,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::int?>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L6:
{
- final Null #t6 = null;
- if(#t6 is asy::Future<core::int?>) {
- [yield] let dynamic #t7 = asy::_awaitHelper(#t6, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t6;
- }
- :return_value = :async_temporary_0;
+ :return_value = null;
break #L6;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -346,7 +336,7 @@
default:
{}
}
- return let final<BottomType> #t8 = 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.
+ return let final<BottomType> #t6 = 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;
@@ -354,24 +344,24 @@
static method localFunctions() → dynamic {
function returnImplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t9 = invalid-expression "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.
+ return let final<BottomType> #t7 = invalid-expression "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 */ {
^" in null;
}
function returnExplicit() → core::String {
core::print("foo");
- return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
^" in null;
}
function returnMixed(core::bool b) → core::String {
if(b) {
core::print("foo");
- return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
+ return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: The value 'null' can't be returned from a function with return type 'String' because 'String' is not nullable.
return null; // error
^" in null;
}
- return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+ return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
String returnMixed(bool b) /* error */ {
^" in null;
}
@@ -435,7 +425,7 @@
try {
#L16:
{
- :return_value = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+ :return_value = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
FutureOr<int> returnAsync3() async {} // error
^" in null;
break #L16;
@@ -508,21 +498,11 @@
(core::Object, core::StackTrace) → dynamic :async_op_error;
core::int :await_jump_var = 0;
dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- FutureOr<core::int?>:async_temporary_0;
function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
try {
#L19:
{
- final Null #t14 = null;
- if(#t14 is asy::Future<core::int?>) {
- [yield] let dynamic #t15 = asy::_awaitHelper(#t14, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<Null>(:result);
- }
- else {
- :async_temporary_0 = #t14;
- }
- :return_value = :async_temporary_0;
+ :return_value = null;
break #L19;
}
asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
@@ -627,7 +607,7 @@
default:
{}
}
- return let final<BottomType> #t16 = 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.
+ return let final<BottomType> #t12 = 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;
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart
deleted file mode 100644
index 5b167d0..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) 2020, 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 'dart:async';
-import 'return_from_async_lib.dart';
-
-abstract class Class {
- FutureOr<int> throwFutureOrInt();
-
- int throwInt();
-
- Future<int> throwFutureInt();
-
- dynamic throwDynamic();
-
- Future<num> throwFutureNum();
-}
-
-bool caughtFutureOrInt = false;
-
-Future<int> callFutureOrInt(Class c) async {
- try {
- return c.throwFutureOrInt();
- } catch (e) {
- print('Caught "$e"');
- caughtFutureOrInt = true;
- return 0;
- }
-}
-
-bool caughtInt = false;
-
-Future<int> callInt(Class c) async {
- try {
- return c.throwInt();
- } catch (e) {
- print('Caught "$e"');
- caughtInt = true;
- return 0;
- }
-}
-
-bool caughtFutureInt = false;
-
-Future<int> callFutureInt(Class c) async {
- try {
- return c.throwFutureInt();
- } catch (e) {
- print('Caught "$e"');
- caughtFutureInt = true;
- return 0;
- }
-}
-
-bool caughtDynamic = false;
-
-Future<int> callDynamic(Class c) async {
- try {
- return c.throwDynamic();
- } catch (e) {
- print('Caught "$e"');
- caughtDynamic = true;
- return 0;
- }
-}
-
-bool caughtFutureNum = false;
-
-Future<num> callFutureNum(Class c) async {
- try {
- return c.throwFutureNum();
- } catch (e) {
- print('Caught "$e"');
- caughtFutureNum = true;
- return 0;
- }
-}
-
-void main() async {
- Class c = new Subclass();
- await callFutureOrInt(c);
- if (!caughtFutureOrInt) throw 'Uncaught async return';
- await callInt(c);
- if (!caughtInt) throw 'Uncaught async return';
- await callFutureInt(c);
- if (!caughtFutureInt) throw 'Uncaught async return';
- await callDynamic(c);
- if (!caughtDynamic) throw 'Uncaught async return';
- await callFutureNum(c);
- if (!caughtFutureNum) throw 'Uncaught async return';
-}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline.expect
deleted file mode 100644
index 66339b5..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline.expect
+++ /dev/null
@@ -1,22 +0,0 @@
-import 'dart:async';
-import 'return_from_async_lib.dart';
-
-abstract class Class {
- FutureOr<int> throwFutureOrInt();
- int throwInt();
- Future<int> throwFutureInt();
- dynamic throwDynamic();
- Future<num> throwFutureNum();
-}
-
-bool caughtFutureOrInt = false;
-Future<int> callFutureOrInt(Class c) async {}
-bool caughtInt = false;
-Future<int> callInt(Class c) async {}
-bool caughtFutureInt = false;
-Future<int> callFutureInt(Class c) async {}
-bool caughtDynamic = false;
-Future<int> callDynamic(Class c) async {}
-bool caughtFutureNum = false;
-Future<num> callFutureNum(Class c) async {}
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline_modelled.expect
deleted file mode 100644
index 3c8dcd7..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.textual_outline_modelled.expect
+++ /dev/null
@@ -1,23 +0,0 @@
-import 'dart:async';
-import 'return_from_async_lib.dart';
-
-Future<int> callDynamic(Class c) async {}
-Future<int> callFutureInt(Class c) async {}
-Future<int> callFutureOrInt(Class c) async {}
-Future<int> callInt(Class c) async {}
-Future<num> callFutureNum(Class c) async {}
-
-abstract class Class {
- Future<int> throwFutureInt();
- Future<num> throwFutureNum();
- FutureOr<int> throwFutureOrInt();
- dynamic throwDynamic();
- int throwInt();
-}
-
-bool caughtDynamic = false;
-bool caughtFutureInt = false;
-bool caughtFutureNum = false;
-bool caughtFutureOrInt = false;
-bool caughtInt = false;
-void main() async {}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.expect
deleted file mode 100644
index 0a614de..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.expect
+++ /dev/null
@@ -1,122 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "return_from_async_lib.dart" as ret;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async_lib.dart";
-
-abstract class Class extends core::Object {
- synthetic constructor •() → self::Class
- : super core::Object::•()
- ;
- abstract method throwFutureOrInt() → FutureOr<core::int>;
- abstract method throwInt() → core::int;
- abstract method throwFutureInt() → asy::Future<core::int>;
- abstract method throwDynamic() → dynamic;
- abstract method throwFutureNum() → asy::Future<core::num>;
-}
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method callFutureOrInt(self::Class c) → asy::Future<core::int> async {
- try {
- return let final FutureOr<core::int>#t1 = c.{self::Class::throwFutureOrInt}() in #t1 is asy::Future<core::int> ?{FutureOr<core::int>} await #t1 : #t1;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureOrInt = true;
- return let final core::int #t2 = 0 in #t2 is asy::Future<core::int> ?{FutureOr<core::int>} await #t2 : #t2;
- }
-}
-static method callInt(self::Class c) → asy::Future<core::int> async {
- try {
- return let final core::int #t3 = c.{self::Class::throwInt}() in #t3 is asy::Future<core::int> ?{FutureOr<core::int>} await #t3 : #t3;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtInt = true;
- return let final core::int #t4 = 0 in #t4 is asy::Future<core::int> ?{FutureOr<core::int>} await #t4 : #t4;
- }
-}
-static method callFutureInt(self::Class c) → asy::Future<core::int> async {
- try {
- return let final asy::Future<core::int> #t5 = c.{self::Class::throwFutureInt}() in #t5 is asy::Future<core::int> ?{FutureOr<core::int>} await #t5 : #t5;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureInt = true;
- return let final core::int #t6 = 0 in #t6 is asy::Future<core::int> ?{FutureOr<core::int>} await #t6 : #t6;
- }
-}
-static method callDynamic(self::Class c) → asy::Future<core::int> async {
- try {
- return let final dynamic #t7 = c.{self::Class::throwDynamic}() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int> in #t7 is asy::Future<core::int> ?{FutureOr<core::int>} await #t7 : #t7;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtDynamic = true;
- return let final core::int #t8 = 0 in #t8 is asy::Future<core::int> ?{FutureOr<core::int>} await #t8 : #t8;
- }
-}
-static method callFutureNum(self::Class c) → asy::Future<core::num> async {
- try {
- return let final asy::Future<core::num> #t9 = c.{self::Class::throwFutureNum}() in #t9 is asy::Future<core::num> ?{FutureOr<core::num>} await #t9 : #t9;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureNum = true;
- return let final core::int #t10 = 0 in #t10 is asy::Future<core::num> ?{FutureOr<core::num>} await #t10 : #t10;
- }
-}
-static method main() → void async {
- self::Class c = new ret::Subclass::•();
- await self::callFutureOrInt(c);
- if(!self::caughtFutureOrInt)
- throw "Uncaught async return";
- await self::callInt(c);
- if(!self::caughtInt)
- throw "Uncaught async return";
- await self::callFutureInt(c);
- if(!self::caughtFutureInt)
- throw "Uncaught async return";
- await self::callDynamic(c);
- if(!self::caughtDynamic)
- throw "Uncaught async return";
- await self::callFutureNum(c);
- if(!self::caughtFutureNum)
- throw "Uncaught async return";
-}
-
-library /*isNonNullableByDefault*/;
-import self as ret;
-import "dart:core" as core;
-import "return_from_async.dart" as self;
-import "dart:async" as asy;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async.dart";
-
-class Subclass extends core::Object implements self::Class {
- synthetic constructor •() → ret::Subclass
- : super core::Object::•()
- ;
- method throwFutureOrInt() → FutureOr<core::int> async {
- throw "FutureOr<int>";
- }
- method throwInt() → core::int {
- throw "int";
- }
- method throwFutureInt() → asy::Future<core::int> async {
- throw "Future<int>";
- }
- method throwDynamic() → dynamic {
- throw "dynamic";
- }
- method throwFutureNum() → asy::Future<core::num> async {
- throw "Future<num>";
- }
-}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.transformed.expect
deleted file mode 100644
index 1924b7e..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async.dart.weak.transformed.expect
+++ /dev/null
@@ -1,461 +0,0 @@
-library /*isNonNullableByDefault*/;
-import self as self;
-import "dart:core" as core;
-import "dart:async" as asy;
-import "dart:_internal" as _in;
-import "return_from_async_lib.dart" as ret;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async_lib.dart";
-
-abstract class Class extends core::Object {
- synthetic constructor •() → self::Class
- : super core::Object::•()
- ;
- abstract method throwFutureOrInt() → FutureOr<core::int>;
- abstract method throwInt() → core::int;
- abstract method throwFutureInt() → asy::Future<core::int>;
- abstract method throwDynamic() → dynamic;
- abstract method throwFutureNum() → asy::Future<core::num>;
-}
-static field core::bool caughtFutureOrInt = false;
-static field core::bool caughtInt = false;
-static field core::bool caughtFutureInt = false;
-static field core::bool caughtDynamic = false;
-static field core::bool caughtFutureNum = false;
-static method callFutureOrInt(self::Class c) → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L1:
- {
- try {
- final FutureOr<core::int>#t1 = c.{self::Class::throwFutureOrInt}();
- if(#t1 is asy::Future<core::int>) {
- [yield] let dynamic #t2 = asy::_awaitHelper(#t1, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t1;
- }
- :return_value = :async_temporary_0;
- break #L1;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureOrInt = true;
- final core::int #t3 = 0;
- if(#t3 is asy::Future<core::int>) {
- [yield] let dynamic #t4 = asy::_awaitHelper(#t3, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t3;
- }
- :return_value = :async_temporary_2;
- break #L1;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callInt(self::Class c) → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L2:
- {
- try {
- final core::int #t5 = c.{self::Class::throwInt}();
- if(#t5 is asy::Future<core::int>) {
- [yield] let dynamic #t6 = asy::_awaitHelper(#t5, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t5;
- }
- :return_value = :async_temporary_0;
- break #L2;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtInt = true;
- final core::int #t7 = 0;
- if(#t7 is asy::Future<core::int>) {
- [yield] let dynamic #t8 = asy::_awaitHelper(#t7, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t7;
- }
- :return_value = :async_temporary_2;
- break #L2;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureInt(self::Class c) → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L3:
- {
- try {
- final asy::Future<core::int> #t9 = c.{self::Class::throwFutureInt}();
- if(#t9 is asy::Future<core::int>) {
- [yield] let dynamic #t10 = asy::_awaitHelper(#t9, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t9;
- }
- :return_value = :async_temporary_0;
- break #L3;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureInt = true;
- final core::int #t11 = 0;
- if(#t11 is asy::Future<core::int>) {
- [yield] let dynamic #t12 = asy::_awaitHelper(#t11, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t11;
- }
- :return_value = :async_temporary_2;
- break #L3;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callDynamic(self::Class c) → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::int>:async_temporary_0;
- FutureOr<core::int>:async_temporary_1;
- FutureOr<core::int>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L4:
- {
- try {
- final FutureOr<core::int>#t13 = c.{self::Class::throwDynamic}() as{TypeError,ForDynamic,ForNonNullableByDefault} FutureOr<core::int>;
- if(#t13 is asy::Future<core::int>) {
- [yield] let dynamic #t14 = asy::_awaitHelper(#t13, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_0 = #t13;
- }
- :return_value = :async_temporary_0;
- break #L4;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtDynamic = true;
- final core::int #t15 = 0;
- if(#t15 is asy::Future<core::int>) {
- [yield] let dynamic #t16 = asy::_awaitHelper(#t15, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t15;
- }
- :return_value = :async_temporary_2;
- break #L4;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method callFutureNum(self::Class c) → asy::Future<core::num> /* originally async */ {
- final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
- core::bool* :is_sync = false;
- FutureOr<core::num>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- dynamic :saved_try_context_var1;
- dynamic :exception0;
- dynamic :stack_trace0;
- FutureOr<core::num>:async_temporary_0;
- FutureOr<core::num>:async_temporary_1;
- FutureOr<core::num>:async_temporary_2;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L5:
- {
- try {
- final asy::Future<core::num> #t17 = c.{self::Class::throwFutureNum}();
- if(#t17 is asy::Future<core::num>) {
- [yield] let dynamic #t18 = asy::_awaitHelper(#t17, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_0 = _in::unsafeCast<core::num>(:result);
- }
- else {
- :async_temporary_0 = #t17;
- }
- :return_value = :async_temporary_0;
- break #L5;
- }
- on core::Object catch(final core::Object e) {
- core::print("Caught \"${e}\"");
- self::caughtFutureNum = true;
- final core::int #t19 = 0;
- if(#t19 is asy::Future<core::num>) {
- [yield] let dynamic #t20 = asy::_awaitHelper(#t19, :async_op_then, :async_op_error, :async_op) in null;
- :async_temporary_2 = _in::unsafeCast<core::int>(:result);
- }
- else {
- :async_temporary_2 = #t19;
- }
- :return_value = :async_temporary_2;
- break #L5;
- }
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-static method main() → void /* originally async */ {
- final asy::_Future<dynamic> :async_future = new asy::_Future::•<dynamic>();
- core::bool* :is_sync = false;
- FutureOr<dynamic>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- dynamic :saved_try_context_var0;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L6:
- {
- self::Class c = new ret::Subclass::•();
- [yield] let dynamic #t21 = asy::_awaitHelper(self::callFutureOrInt(c), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtFutureOrInt)
- throw "Uncaught async return";
- [yield] let dynamic #t22 = asy::_awaitHelper(self::callInt(c), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtInt)
- throw "Uncaught async return";
- [yield] let dynamic #t23 = asy::_awaitHelper(self::callFutureInt(c), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtFutureInt)
- throw "Uncaught async return";
- [yield] let dynamic #t24 = asy::_awaitHelper(self::callDynamic(c), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::int>(:result);
- if(!self::caughtDynamic)
- throw "Uncaught async return";
- [yield] let dynamic #t25 = asy::_awaitHelper(self::callFutureNum(c), :async_op_then, :async_op_error, :async_op) in null;
- _in::unsafeCast<core::num>(:result);
- if(!self::caughtFutureNum)
- throw "Uncaught async return";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
-}
-
-library /*isNonNullableByDefault*/;
-import self as ret;
-import "dart:core" as core;
-import "return_from_async.dart" as self;
-import "dart:async" as asy;
-
-import "dart:async";
-import "org-dartlang-testcase:///return_from_async.dart";
-
-class Subclass extends core::Object implements self::Class {
- synthetic constructor •() → ret::Subclass
- : super core::Object::•()
- ;
- method throwFutureOrInt() → FutureOr<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L7:
- {
- throw "FutureOr<int>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
- }
- method throwInt() → core::int {
- throw "int";
- }
- method throwFutureInt() → asy::Future<core::int> /* originally async */ {
- final asy::_Future<core::int> :async_future = new asy::_Future::•<core::int>();
- core::bool* :is_sync = false;
- FutureOr<core::int>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L8:
- {
- throw "Future<int>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
- }
- method throwDynamic() → dynamic {
- throw "dynamic";
- }
- method throwFutureNum() → asy::Future<core::num> /* originally async */ {
- final asy::_Future<core::num> :async_future = new asy::_Future::•<core::num>();
- core::bool* :is_sync = false;
- FutureOr<core::num>? :return_value;
- (dynamic) → dynamic :async_op_then;
- (core::Object, core::StackTrace) → dynamic :async_op_error;
- core::int :await_jump_var = 0;
- dynamic :await_ctx_var;
- function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding
- try {
- #L9:
- {
- throw "Future<num>";
- }
- asy::_completeOnAsyncReturn(:async_future, :return_value, :is_sync);
- return;
- }
- on dynamic catch(dynamic exception, core::StackTrace stack_trace) {
- asy::_completeOnAsyncError(:async_future, exception, stack_trace, :is_sync);
- }
- :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
- :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
- :async_op.call();
- :is_sync = true;
- return :async_future;
- }
-}
diff --git a/pkg/front_end/testcases/nnbd_mixed/return_from_async_lib.dart b/pkg/front_end/testcases/nnbd_mixed/return_from_async_lib.dart
deleted file mode 100644
index 0e4cbb7..0000000
--- a/pkg/front_end/testcases/nnbd_mixed/return_from_async_lib.dart
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright (c) 2020, 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 'dart:async';
-import 'return_from_async.dart';
-
-class Subclass implements Class {
- FutureOr<int> throwFutureOrInt() async {
- throw 'FutureOr<int>';
- }
-
- int throwInt() {
- throw 'int';
- }
-
- Future<int> throwFutureInt() async {
- throw 'Future<int>';
- }
-
- dynamic throwDynamic() {
- throw 'dynamic';
- }
-
- Future<num> throwFutureNum() async {
- throw 'Future<num>';
- }
-}
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index bbb5c64..2e35c64 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -171,6 +171,7 @@
nnbd/covariant_late_field: TypeCheckError
nnbd/getter_vs_setter_type: TypeCheckError
nnbd/issue41180: RuntimeError # Strong mode runtime checking fails due to mixed strong mode.
+nnbd/issue42546: TypeCheckError
nnbd/issue42603: TypeCheckError
nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
nnbd/nullable_object_access: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index c21c124..a59dfcd 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -171,6 +171,7 @@
nnbd/covariant_late_field: TypeCheckError
nnbd/getter_vs_setter_type: TypeCheckError
nnbd/issue41180: RuntimeError
+nnbd/issue42546: TypeCheckError
nnbd/issue42603: TypeCheckError
nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
nnbd/nullable_object_access: TypeCheckError
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 731df3e..56c47dc 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -58,6 +58,7 @@
late_lowering/covariant_late_field: TypeCheckError
nnbd/covariant_late_field: TypeCheckError
nnbd/getter_vs_setter_type: TypeCheckError
+nnbd/issue42546: TypeCheckError
nnbd/issue42603: TypeCheckError
nnbd/no_support_for_old_null_aware_index_access_syntax: RuntimeError # Expected.
nnbd/nullable_object_access: TypeCheckError
diff --git a/pkg/vm_service/test/async_single_step_out_test.dart b/pkg/vm_service/test/async_single_step_out_test.dart
index 7e5f200..a0a3d83 100644
--- a/pkg/vm_service/test/async_single_step_out_test.dart
+++ b/pkg/vm_service/test/async_single_step_out_test.dart
@@ -44,10 +44,6 @@
stepInto, // exit helper via a single step.
hasStoppedAtBreakpoint,
- stoppedAtLine(LINE_B), // await helper
- stepInto,
-
- hasStoppedAtBreakpoint,
stoppedAtLine(20), // return null (weird dispatching)
stepInto, // exit helper via a single step.
diff --git a/runtime/observatory/tests/service/async_single_step_out_test.dart b/runtime/observatory/tests/service/async_single_step_out_test.dart
index 3c6de1b..cfeac6c 100644
--- a/runtime/observatory/tests/service/async_single_step_out_test.dart
+++ b/runtime/observatory/tests/service/async_single_step_out_test.dart
@@ -44,10 +44,6 @@
stepInto, // exit helper via a single step.
hasStoppedAtBreakpoint,
- stoppedAtLine(LINE_B), // await helper
- stepInto,
-
- hasStoppedAtBreakpoint,
stoppedAtLine(20), // return null (weird dispatching)
stepInto, // exit helper via a single step.
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index fdebc07..6995e01 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -720,22 +720,20 @@
final mixedYieldsExpected = const <String>[
r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
r'^<asynchronous suspension>$',
- r'^#1 mixedYields3 \(.*/utils.dart:70(:3)?\)$',
+ r'^#1 mixedYields2 \(.*/utils.dart:66(:3)?\)$',
r'^<asynchronous suspension>$',
- r'^#2 mixedYields2 \(.*/utils.dart:66(:3)?\)$',
- r'^<asynchronous suspension>$',
- r'^#3 mixedYields \(.*/utils.dart:61(:3)?\)$',
+ r'^#2 mixedYields \(.*/utils.dart:61(:3)?\)$',
r'^<asynchronous suspension>$',
];
await doTestAwait(
mixedYields,
mixedYieldsExpected +
const <String>[
- r'^#4 doTestAwait ',
+ r'^#3 doTestAwait ',
r'^<asynchronous suspension>$',
- r'^#5 doTestsLazy ',
+ r'^#4 doTestsLazy ',
r'^<asynchronous suspension>$',
- r'^#6 main ',
+ r'^#5 main ',
r'^<asynchronous suspension>$',
],
debugInfoFilename);
@@ -743,7 +741,7 @@
mixedYields,
mixedYieldsExpected +
const <String>[
- r'^#4 doTestAwaitThen.<anonymous closure> ',
+ r'^#3 doTestAwaitThen.<anonymous closure> ',
r'^<asynchronous suspension>$',
],
debugInfoFilename);
@@ -784,22 +782,20 @@
final nonAsyncNoStackExpected = const <String>[
r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
r'^<asynchronous suspension>$',
- r'^#1 nonAsyncNoStack2 \(.*/utils.dart:97(:36)?\)$',
+ r'^#1 nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
r'^<asynchronous suspension>$',
- r'^#2 nonAsyncNoStack1 \(.*/utils.dart:95(:36)?\)$',
- r'^<asynchronous suspension>$',
- r'^#3 nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
+ r'^#2 nonAsyncNoStack \(.*/utils.dart:93(:35)?\)$',
r'^<asynchronous suspension>$',
];
await doTestAwait(
nonAsyncNoStack,
nonAsyncNoStackExpected +
const <String>[
- r'^#4 doTestAwait ',
+ r'^#3 doTestAwait ',
r'^<asynchronous suspension>$',
- r'^#5 doTestsLazy ',
+ r'^#4 doTestsLazy ',
r'^<asynchronous suspension>$',
- r'^#6 main ',
+ r'^#5 main ',
r'^<asynchronous suspension>$',
],
debugInfoFilename);
@@ -807,7 +803,7 @@
nonAsyncNoStack,
nonAsyncNoStackExpected +
const <String>[
- r'^#4 doTestAwaitThen.<anonymous closure> ',
+ r'^#3 doTestAwaitThen.<anonymous closure> ',
r'^<asynchronous suspension>$',
],
debugInfoFilename);
@@ -968,7 +964,6 @@
],
debugInfoFilename);
await doTestAwaitCatchError(awaitWait, awaitWaitExpected, debugInfoFilename);
-
{
final expected = const <String>[
r'^#0 throwAsync \(.*/utils.dart:21(:3)?\)$',
diff --git a/tests/language/async/explicit_await_test.dart b/tests/language/async/explicit_await_test.dart
deleted file mode 100644
index 545e5c5..0000000
--- a/tests/language/async/explicit_await_test.dart
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2021, 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 'package:expect/expect.dart';
-
-bool caughtInMethod1 = false;
-bool caughtInMethod2 = false;
-bool caughtInMain = false;
-
-Future<Object> f() {
- return new Future<Future<Object>>.value(new Future<Object>.delayed(
- const Duration(seconds: 1), () => throw 'foo'));
-}
-
-Future<Object> method1() async {
- try {
- return await f();
- } catch (e) {
- print('caught in method1: $e');
- caughtInMethod1 = true;
- }
- return new Object();
-}
-
-Future<Object> method2() async {
- try {
- return method1();
- } catch (e) {
- print('caught in method2: $e');
- caughtInMethod2 = true;
- }
- return new Object();
-}
-
-void main() async {
- try {
- print(await method2());
- print('Done');
- } catch (e) {
- print('caught in main: $e');
- caughtInMain = true;
- }
- Expect.isTrue(caughtInMethod1, "Exception should be caught in 'method1'.");
- Expect.isFalse(
- caughtInMethod2, "Exception should not be caught in 'method2'.");
- Expect.isFalse(caughtInMain, "Exception should not be caught in 'main'.");
-}
diff --git a/tests/language/async/implicit_await_test.dart b/tests/language/async/implicit_await_test.dart
deleted file mode 100644
index 9c79259..0000000
--- a/tests/language/async/implicit_await_test.dart
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2021, 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 'package:expect/expect.dart';
-
-bool caughtInF = false;
-bool caughtInMain = false;
-
-class A {}
-
-class AAndFutureOfA implements A, Future<A> {
- noSuchMethod(Invocation i) => throw 0;
-}
-
-Future<A> f(A a) async {
- try {
- // Statically looks like no `await` is needed, but dynamically it is needed.
- // So we should check dynamically whether to await.
- return a;
- } catch (e) {
- caughtInF = true;
- }
- return new A();
-}
-
-void main() async {
- try {
- print(await f(AAndFutureOfA()));
- print('Done');
- } catch (e) {
- caughtInMain = true;
- }
- Expect.isTrue(caughtInF, "Exception should be caught in 'f'.");
- Expect.isFalse(caughtInMain, "Exception should not be caught in 'main'.");
-}