Skip to content

Commit f27548a

Browse files
chloestefantsovaCommit Queue
authored and
Commit Queue
committed
[cfe] Coerce expressions in pattern assignment and declaration RHS
Closes #51738 Part of #49749 Change-Id: I4d496c303b1762c7234d66436daf125e69a34316 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/291068 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Chloe Stefantsova <[email protected]>
1 parent cc9526f commit f27548a

File tree

112 files changed

+225
-207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+225
-207
lines changed

pkg/front_end/lib/src/fasta/type_inference/inference_visitor.dart

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9338,8 +9338,25 @@ class InferenceVisitorImpl extends InferenceVisitorBase
93389338
@override
93399339
ExpressionTypeAnalysisResult<DartType> dispatchExpression(
93409340
Expression node, DartType context) {
9341+
// Normally the CFE performs expression coercion in the process of type
9342+
// inference of the nodes where an assignment is executed. The inference on
9343+
// the pattern-related nodes is driven by the shared analysis, and two of
9344+
// such nodes perform assignments. Here we determine if we're inferring the
9345+
// expressions of one of such nodes, and perform the coercion if needed.
9346+
TreeNode? parent = node.parent;
9347+
bool needsCoercion =
9348+
parent is PatternVariableDeclaration && parent.initializer == node ||
9349+
parent is PatternAssignment && parent.expression == node;
9350+
93419351
ExpressionInferenceResult expressionResult =
93429352
inferExpression(node, context).stopShorting();
9353+
9354+
if (needsCoercion) {
9355+
expressionResult =
9356+
coerceExpressionForAssignment(context, expressionResult) ??
9357+
expressionResult;
9358+
}
9359+
93439360
pushRewrite(expressionResult.expression);
93449361
return new SimpleTypeAnalysisResult(type: expressionResult.inferredType);
93459362
}

pkg/front_end/test/spell_checking_list_common.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -943,6 +943,7 @@ downside
943943
downward
944944
downwards
945945
drive
946+
driven
946947
driver
947948
drop
948949
dropped

pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart.strong.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
7575
definitelyAssignedFinal = 10;
7676
#definitelyAssignedLateFinal#set(20){(dynamic) → dynamic};
7777
block {
78-
final synthesized dynamic #0#0 = x;
78+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int, core::int, dynamic);
7979
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
8080
(initializedFinal, // Error
8181
^^^^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:32:7: Error: Can't assign to the final variable '#initializedLateFinal'.
@@ -84,14 +84,14 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
8484
throw new core::StateError::•("Pattern matching error");
8585
} =>#0#0;
8686
block {
87-
final synthesized dynamic #1#0 = y;
87+
final synthesized dynamic #1#0 = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
8888
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t6 = #definitelyUnassignedLateFinal#set(#1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} as{ForNonNullableByDefault} core::int?){(core::int) → dynamic} in true) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
8989
definitelyAssignedFinal] = y; // Error
9090
^^^^^^^^^^^^^^^^^^^^^^^"))
9191
throw new core::StateError::•("Pattern matching error");
9292
} =>#1#0;
9393
block {
94-
final synthesized dynamic #2#0 = z;
94+
final synthesized dynamic #2#0 = z as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
9595
synthesized dynamic #2#3;
9696
synthesized core::bool #2#3#isSet = false;
9797
function #2#3#func() → dynamic

pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart.strong.transformed.expect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
7575
definitelyAssignedFinal = 10;
7676
#definitelyAssignedLateFinal#set(20){(dynamic) → dynamic};
7777
block {
78-
final synthesized dynamic #0#0 = x;
78+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int, core::int, dynamic);
7979
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
8080
(initializedFinal, // Error
8181
^^^^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:32:7: Error: Can't assign to the final variable '#initializedLateFinal'.
@@ -84,14 +84,14 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
8484
throw new core::StateError::•("Pattern matching error");
8585
} =>#0#0;
8686
block {
87-
final synthesized dynamic #1#0 = y;
87+
final synthesized dynamic #1#0 = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
8888
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t6 = #definitelyUnassignedLateFinal#set(#1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} as{ForNonNullableByDefault} core::int?){(core::int) → dynamic} in true) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
8989
definitelyAssignedFinal] = y; // Error
9090
^^^^^^^^^^^^^^^^^^^^^^^"))
9191
throw new core::StateError::•("Pattern matching error");
9292
} =>#1#0;
9393
block {
94-
final synthesized dynamic #2#0 = z;
94+
final synthesized dynamic #2#0 = z as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
9595
synthesized dynamic #2#3;
9696
synthesized core::bool #2#3#isSet = false;
9797
function #2#3#func() → dynamic
@@ -119,4 +119,4 @@ constants {
119119

120120
Extra constant evaluation status:
121121
Evaluated: VariableGet @ org-dartlang-testcase:///pattern_assignment_final.dart:12:14 -> IntConstant(5)
122-
Extra constant evaluation: evaluated: 163, effectively constant: 1
122+
Extra constant evaluation: evaluated: 166, effectively constant: 1

pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart.weak.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
9090
definitelyAssignedFinal = 10;
9191
#definitelyAssignedLateFinal#set(20){(dynamic) → dynamic};
9292
block {
93-
final synthesized dynamic #0#0 = x;
93+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int, core::int, dynamic);
9494
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
9595
(initializedFinal, // Error
9696
^^^^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:32:7: Error: Can't assign to the final variable '#initializedLateFinal'.
@@ -99,14 +99,14 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
9999
throw new core::StateError::•("Pattern matching error");
100100
} =>#0#0;
101101
block {
102-
final synthesized dynamic #1#0 = y;
102+
final synthesized dynamic #1#0 = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
103103
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t3 = #definitelyUnassignedLateFinal#set(#1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} as{ForNonNullableByDefault} core::int?){(core::int) → dynamic} in true) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
104104
definitelyAssignedFinal] = y; // Error
105105
^^^^^^^^^^^^^^^^^^^^^^^"))
106106
throw new core::StateError::•("Pattern matching error");
107107
} =>#1#0;
108108
block {
109-
final synthesized dynamic #2#0 = z;
109+
final synthesized dynamic #2#0 = z as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
110110
synthesized dynamic #2#3;
111111
synthesized core::bool #2#3#isSet = false;
112112
function #2#3#func() → dynamic

pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart.weak.modular.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
9090
definitelyAssignedFinal = 10;
9191
#definitelyAssignedLateFinal#set(20){(dynamic) → dynamic};
9292
block {
93-
final synthesized dynamic #0#0 = x;
93+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int, core::int, dynamic);
9494
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
9595
(initializedFinal, // Error
9696
^^^^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:32:7: Error: Can't assign to the final variable '#initializedLateFinal'.
@@ -99,14 +99,14 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
9999
throw new core::StateError::•("Pattern matching error");
100100
} =>#0#0;
101101
block {
102-
final synthesized dynamic #1#0 = y;
102+
final synthesized dynamic #1#0 = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
103103
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t3 = #definitelyUnassignedLateFinal#set(#1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} as{ForNonNullableByDefault} core::int?){(core::int) → dynamic} in true) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
104104
definitelyAssignedFinal] = y; // Error
105105
^^^^^^^^^^^^^^^^^^^^^^^"))
106106
throw new core::StateError::•("Pattern matching error");
107107
} =>#1#0;
108108
block {
109-
final synthesized dynamic #2#0 = z;
109+
final synthesized dynamic #2#0 = z as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
110110
synthesized dynamic #2#3;
111111
synthesized core::bool #2#3#isSet = false;
112112
function #2#3#func() → dynamic

pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart.weak.transformed.expect

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
9090
definitelyAssignedFinal = 10;
9191
#definitelyAssignedLateFinal#set(20){(dynamic) → dynamic};
9292
block {
93-
final synthesized dynamic #0#0 = x;
93+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} (core::int, core::int, dynamic);
9494
if(!(#0#0 is{ForNonNullableByDefault} (core::Object?, core::Object?, core::Object?) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:31:4: Error: Can't assign to the final variable 'initializedFinal'.
9595
(initializedFinal, // Error
9696
^^^^^^^^^^^^^^^^" && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:32:7: Error: Can't assign to the final variable '#initializedLateFinal'.
@@ -99,14 +99,14 @@ static method method(dynamic x, dynamic y, dynamic z) → dynamic {
9999
throw new core::StateError::•("Pattern matching error");
100100
} =>#0#0;
101101
block {
102-
final synthesized dynamic #1#0 = y;
102+
final synthesized dynamic #1#0 = y as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
103103
if(!(#1#0 is{ForNonNullableByDefault} core::List<dynamic> && #1#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t3 = #definitelyUnassignedLateFinal#set(#1#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} as{ForNonNullableByDefault} core::int?){(core::int) → dynamic} in true) && invalid-expression "pkg/front_end/testcases/late_lowering/pattern_assignment_final.dart:35:5: Error: Final variable 'definitelyAssignedFinal' might already be assigned at this point.
104104
definitelyAssignedFinal] = y; // Error
105105
^^^^^^^^^^^^^^^^^^^^^^^"))
106106
throw new core::StateError::•("Pattern matching error");
107107
} =>#1#0;
108108
block {
109-
final synthesized dynamic #2#0 = z;
109+
final synthesized dynamic #2#0 = z as{TypeError,ForDynamic,ForNonNullableByDefault} self::Class;
110110
synthesized dynamic #2#3;
111111
synthesized core::bool #2#3#isSet = false;
112112
function #2#3#func() → dynamic

pkg/front_end/testcases/patterns/collections_entry_to_element_conversion_in_inference.dart.strong.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ static method test1(dynamic x, dynamic another) → core::Iterable<dynamic> {
99
core::int i;
1010
core::int n;
1111
{
12-
final synthesized dynamic #0#0 = x;
12+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
1313
late final synthesized dynamic #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1414
late final synthesized dynamic #0#7 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
1515
if(!(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#0#6 is{ForNonNullableByDefault} core::int && (let final dynamic #t2 = i = #0#6{core::int} in true)) && (#0#7 is{ForNonNullableByDefault} core::int && (let final dynamic #t3 = n = #0#7{core::int} in true))))

pkg/front_end/testcases/patterns/collections_entry_to_element_conversion_in_inference.dart.strong.transformed.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ static method test1(dynamic x, dynamic another) → core::Iterable<dynamic> {
99
core::int i;
1010
core::int n;
1111
{
12-
final synthesized dynamic #0#0 = x;
12+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
1313
function ##0#6#initializer() → dynamic
1414
return #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
late final synthesized dynamic #0#6 = ##0#6#initializer(){() → dynamic};

pkg/front_end/testcases/patterns/collections_entry_to_element_conversion_in_inference.dart.weak.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ static method test1(dynamic x, dynamic another) → core::Iterable<dynamic> {
99
core::int i;
1010
core::int n;
1111
{
12-
final synthesized dynamic #0#0 = x;
12+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
1313
late final synthesized dynamic #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1414
late final synthesized dynamic #0#7 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
1515
if(!(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#0#6 is{ForNonNullableByDefault} core::int && (let final dynamic #t2 = i = #0#6{core::int} in true)) && (#0#7 is{ForNonNullableByDefault} core::int && (let final dynamic #t3 = n = #0#7{core::int} in true))))

pkg/front_end/testcases/patterns/collections_entry_to_element_conversion_in_inference.dart.weak.modular.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ static method test1(dynamic x, dynamic another) → core::Iterable<dynamic> {
99
core::int i;
1010
core::int n;
1111
{
12-
final synthesized dynamic #0#0 = x;
12+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
1313
late final synthesized dynamic #0#6 = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1414
late final synthesized dynamic #0#7 = #0#0{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
1515
if(!(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (#0#6 is{ForNonNullableByDefault} core::int && (let final dynamic #t2 = i = #0#6{core::int} in true)) && (#0#7 is{ForNonNullableByDefault} core::int && (let final dynamic #t3 = n = #0#7{core::int} in true))))

pkg/front_end/testcases/patterns/collections_entry_to_element_conversion_in_inference.dart.weak.transformed.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ static method test1(dynamic x, dynamic another) → core::Iterable<dynamic> {
99
core::int i;
1010
core::int n;
1111
{
12-
final synthesized dynamic #0#0 = x;
12+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<core::int>;
1313
function ##0#6#initializer() → dynamic
1414
return #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
late final synthesized dynamic #0#6 = ##0#6#initializer(){() → dynamic};

pkg/front_end/testcases/patterns/issue51432.dart.strong.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "dart:core" as core;
55
static method method() → dynamic {
66
core::int v1 = 42;
77
block {
8-
final synthesized dynamic #0#0 = "The string!" as{ForNonNullableByDefault} dynamic;
8+
final synthesized dynamic #0#0 = ("The string!" as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
99
if(!(let final dynamic #t1 = v1 = #0#0 as{ForNonNullableByDefault} core::int in true))
1010
throw new core::StateError::•("Pattern matching error");
1111
} =>#0#0;

pkg/front_end/testcases/patterns/issue51432.dart.strong.transformed.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "dart:core" as core;
55
static method method() → dynamic {
66
core::int v1 = 42;
77
block {
8-
final synthesized dynamic #0#0 = "The string!" as{ForNonNullableByDefault} dynamic;
8+
final synthesized dynamic #0#0 = ("The string!" as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
99
if(!(let final core::int #t1 = v1 = #0#0 as{ForNonNullableByDefault} core::int in true))
1010
throw new core::StateError::•("Pattern matching error");
1111
} =>#0#0;
@@ -29,4 +29,4 @@ static method throws(() → void f) → dynamic {
2929

3030
Extra constant evaluation status:
3131
Evaluated: AsExpression @ org-dartlang-testcase:///issue51432.dart:7:26 -> StringConstant("The string!")
32-
Extra constant evaluation: evaluated: 23, effectively constant: 1
32+
Extra constant evaluation: evaluated: 24, effectively constant: 1

pkg/front_end/testcases/patterns/issue51432.dart.weak.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "dart:core" as core;
55
static method method() → dynamic {
66
core::int v1 = 42;
77
block {
8-
final synthesized dynamic #0#0 = "The string!" as{ForNonNullableByDefault} dynamic;
8+
final synthesized dynamic #0#0 = ("The string!" as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
99
if(!(let final dynamic #t1 = v1 = #0#0 as{ForNonNullableByDefault} core::int in true))
1010
throw new core::StateError::•("Pattern matching error");
1111
} =>#0#0;

pkg/front_end/testcases/patterns/issue51432.dart.weak.modular.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "dart:core" as core;
55
static method method() → dynamic {
66
core::int v1 = 42;
77
block {
8-
final synthesized dynamic #0#0 = "The string!" as{ForNonNullableByDefault} dynamic;
8+
final synthesized dynamic #0#0 = ("The string!" as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
99
if(!(let final dynamic #t1 = v1 = #0#0 as{ForNonNullableByDefault} core::int in true))
1010
throw new core::StateError::•("Pattern matching error");
1111
} =>#0#0;

pkg/front_end/testcases/patterns/issue51432.dart.weak.transformed.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "dart:core" as core;
55
static method method() → dynamic {
66
core::int v1 = 42;
77
block {
8-
final synthesized dynamic #0#0 = "The string!" as{ForNonNullableByDefault} dynamic;
8+
final synthesized dynamic #0#0 = ("The string!" as{ForNonNullableByDefault} dynamic) as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
99
if(!(let final core::int #t1 = v1 = #0#0 as{ForNonNullableByDefault} core::int in true))
1010
throw new core::StateError::•("Pattern matching error");
1111
} =>#0#0;
@@ -29,4 +29,4 @@ static method throws(() → void f) → dynamic {
2929

3030
Extra constant evaluation status:
3131
Evaluated: AsExpression @ org-dartlang-testcase:///issue51432.dart:7:26 -> StringConstant("The string!")
32-
Extra constant evaluation: evaluated: 23, effectively constant: 1
32+
Extra constant evaluation: evaluated: 24, effectively constant: 1

pkg/front_end/testcases/patterns/patternVariableDeclarationStatement_noMetadata_var_list.dart.strong.expect

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import "dart:core" as core;
55
static method f(dynamic x) → dynamic {
66
dynamic a;
77
{
8-
final synthesized dynamic #0#0 = x;
8+
final synthesized dynamic #0#0 = x as{TypeError,ForDynamic,ForNonNullableByDefault} core::List<dynamic>;
99
if(!(#0#0 is{ForNonNullableByDefault} core::List<dynamic> && #0#0{core::List<dynamic>}.{core::List::length}{core::int} =={core::num::==}{(core::Object) → core::bool} #C1 && (let final dynamic #t1 = a = #0#0{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic} in true)))
1010
throw new core::StateError::•("Pattern matching error");
1111
}

0 commit comments

Comments
 (0)