Skip to content

Commit 1f55c4c

Browse files
chloestefantsovaCommit Queue
authored and
Commit Queue
committed
[cfe] Add desugaring of non-matching rest pattern
Closes #50797 Part of #49749 Change-Id: Ide77d1ee262f8778de7eb8743b04508ee290ee10 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/276940 Reviewed-by: Johnni Winther <[email protected]> Commit-Queue: Chloe Stefantsova <[email protected]>
1 parent e533329 commit 1f55c4c

File tree

108 files changed

+851
-211
lines changed

Some content is hidden

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

108 files changed

+851
-211
lines changed

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

+8
Original file line numberDiff line numberDiff line change
@@ -8388,6 +8388,14 @@ class BodyBuilder extends StackListenerImpl
83888388
}
83898389
}
83908390

8391+
@override
8392+
void handleRestPattern(Token dots, {required bool hasSubPattern}) {
8393+
debugEvent("RestPattern");
8394+
8395+
// TODO(cstefantsova): Handle the case of a present sub-pattern.
8396+
push(new RestPattern(dots.charOffset));
8397+
}
8398+
83918399
@override
83928400
void handleRelationalPattern(Token token) {
83938401
debugEvent("RelationalPattern");

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

+126-20
Original file line numberDiff line numberDiff line change
@@ -4413,21 +4413,49 @@ class ListPattern extends Pattern {
44134413
greaterThanOrEqualsName,
44144414
fileOffset,
44154415
callSiteAccessKind: CallSiteAccessKind.operatorInvocation);
4416+
ObjectAccessTarget equalsTarget = inferenceVisitor.findInterfaceMember(
4417+
inferenceVisitor.coreTypes.intNonNullableRawType,
4418+
equalsName,
4419+
fileOffset,
4420+
callSiteAccessKind: CallSiteAccessKind.operatorInvocation);
44164421

4417-
// greaterThanOrEqualsInvocation: `lengthGet` >= `patterns.length`
4418-
// ==> LVAR.length >= `patterns.length`
4419-
Expression greaterThanOrEqualsInvocation = new InstanceInvocation(
4420-
InstanceAccessKind.Instance,
4421-
lengthGet,
4422-
greaterThanOrEqualsName,
4423-
inferenceVisitor.engine.forest.createArguments(fileOffset, [
4424-
inferenceVisitor.engine.forest
4425-
.createIntLiteral(fileOffset, patterns.length)
4426-
]),
4427-
functionType:
4428-
greaterThanOrEqualsTarget.getFunctionType(inferenceVisitor),
4429-
interfaceTarget: greaterThanOrEqualsTarget.member as Procedure)
4430-
..fileOffset = fileOffset;
4422+
Expression lengthCheck;
4423+
bool hasRestPattern = false;
4424+
for (Pattern pattern in patterns) {
4425+
if (pattern is RestPattern) {
4426+
hasRestPattern = true;
4427+
break;
4428+
}
4429+
}
4430+
if (hasRestPattern) {
4431+
// lengthCheck: `lengthGet` >= `patterns.length - 1`
4432+
// ==> LVAR.length >= `patterns.length - 1`
4433+
lengthCheck = new InstanceInvocation(
4434+
InstanceAccessKind.Instance,
4435+
lengthGet,
4436+
greaterThanOrEqualsName,
4437+
inferenceVisitor.engine.forest.createArguments(fileOffset, [
4438+
inferenceVisitor.engine.forest
4439+
.createIntLiteral(fileOffset, patterns.length - 1)
4440+
]),
4441+
functionType:
4442+
greaterThanOrEqualsTarget.getFunctionType(inferenceVisitor),
4443+
interfaceTarget: greaterThanOrEqualsTarget.member as Procedure)
4444+
..fileOffset = fileOffset;
4445+
} else {
4446+
// lengthCheck: `lengthGet` == `patterns.length`
4447+
lengthCheck = new InstanceInvocation(
4448+
InstanceAccessKind.Instance,
4449+
lengthGet,
4450+
equalsName,
4451+
inferenceVisitor.engine.forest.createArguments(fileOffset, [
4452+
inferenceVisitor.engine.forest
4453+
.createIntLiteral(fileOffset, patterns.length)
4454+
]),
4455+
functionType: equalsTarget.getFunctionType(inferenceVisitor),
4456+
interfaceTarget: equalsTarget.member as Procedure)
4457+
..fileOffset = fileOffset;
4458+
}
44314459

44324460
// typeAndLengthCheck: `listVariable` is `targetListType`
44334461
// && `greaterThanOrEqualsInvocation`
@@ -4445,11 +4473,15 @@ class ListPattern extends Pattern {
44454473
targetListType,
44464474
forNonNullableByDefault: false),
44474475
doubleAmpersandName.text,
4448-
greaterThanOrEqualsInvocation);
4476+
lengthCheck);
44494477
} else {
4450-
typeAndLengthCheck = greaterThanOrEqualsInvocation;
4478+
typeAndLengthCheck = lengthCheck;
44514479
}
44524480

4481+
ObjectAccessTarget intSubtraction = inferenceVisitor.findInterfaceMember(
4482+
inferenceVisitor.coreTypes.intNonNullableRawType, minusName, fileOffset,
4483+
callSiteAccessKind: CallSiteAccessKind.operatorInvocation);
4484+
44534485
ObjectAccessTarget elementAccess = inferenceVisitor.findInterfaceMember(
44544486
targetListType, indexGetName, fileOffset,
44554487
callSiteAccessKind: CallSiteAccessKind.operatorInvocation);
@@ -4458,17 +4490,58 @@ class ListPattern extends Pattern {
44584490
PatternTransformationResult transformationResult =
44594491
new PatternTransformationResult([]);
44604492
List<VariableDeclaration> elementAccessVariables = [];
4493+
bool hasSeenRestPattern = false;
44614494
for (int i = 0; i < patterns.length; i++) {
4462-
// listElement: `listVariable`[`i`]
4463-
// ==> LVAR[`i`]
4495+
if (patterns[i] is RestPattern) {
4496+
hasSeenRestPattern = true;
4497+
continue;
4498+
}
4499+
4500+
Expression elementIndex;
4501+
if (!hasSeenRestPattern) {
4502+
// elementIndex: `i`
4503+
elementIndex =
4504+
inferenceVisitor.engine.forest.createIntLiteral(fileOffset, i);
4505+
} else {
4506+
// elementIndex: `listVariable`.length - `patterns.length - i`
4507+
// ==> LVAR.length - `patterns.length - i`
4508+
4509+
// lengthGet: `listVariable`.length ==> LVAR.length
4510+
Expression lengthGet = new InstanceGet(
4511+
InstanceAccessKind.Instance,
4512+
inferenceVisitor.engine.forest
4513+
.createVariableGet(fileOffset, listVariable)
4514+
..promotedType =
4515+
typeCheckForTargetListNeeded ? targetListType : null,
4516+
lengthName,
4517+
resultType: lengthTarget.getGetterType(inferenceVisitor),
4518+
interfaceTarget: lengthTarget.member as Procedure)
4519+
..fileOffset = fileOffset;
4520+
4521+
// elementIndex: `lengthGet` - `patterns.length - i`
4522+
// ==> LVAR.length - `patterns.length - i`
4523+
elementIndex = new InstanceInvocation(
4524+
InstanceAccessKind.Instance,
4525+
lengthGet,
4526+
minusName,
4527+
inferenceVisitor.engine.forest.createArguments(fileOffset, [
4528+
inferenceVisitor.engine.forest
4529+
.createIntLiteral(fileOffset, patterns.length - i)
4530+
]),
4531+
interfaceTarget: intSubtraction.member as Procedure,
4532+
functionType: intSubtraction.getFunctionType(inferenceVisitor));
4533+
}
4534+
4535+
// listElement: `listVariable`[`elementIndex`]
4536+
// ==> LVAR[`elementIndex`]
44644537
Expression listElement = new InstanceInvocation(
44654538
InstanceAccessKind.Instance,
44664539
inferenceVisitor.engine.forest
44674540
.createVariableGet(fileOffset, listVariable)
44684541
..promotedType = targetListType,
44694542
indexGetName,
4470-
inferenceVisitor.engine.forest.createArguments(fileOffset,
4471-
[inferenceVisitor.engine.forest.createIntLiteral(fileOffset, i)]),
4543+
inferenceVisitor.engine.forest
4544+
.createArguments(fileOffset, [elementIndex]),
44724545
functionType: elementAccessFunctionType,
44734546
interfaceTarget: elementAccess.member as Procedure);
44744547

@@ -5544,6 +5617,39 @@ class VariablePattern extends Pattern {
55445617
}
55455618
}
55465619

5620+
class RestPattern extends Pattern {
5621+
RestPattern(int fileOffset) : super(fileOffset);
5622+
5623+
@override
5624+
PatternInferenceResult acceptInference(InferenceVisitorImpl visitor,
5625+
{required SharedMatchContext context}) {
5626+
return visitor.visitRestPattern(this, context: context);
5627+
}
5628+
5629+
@override
5630+
List<VariableDeclaration> get declaredVariables => const [];
5631+
5632+
@override
5633+
void toTextInternal(AstPrinter printer) {
5634+
printer.write('...');
5635+
}
5636+
5637+
@override
5638+
String toString() {
5639+
return "RestPattern(${toStringInternal()}";
5640+
}
5641+
5642+
@override
5643+
PatternTransformationResult transform(
5644+
Expression matchedExpression,
5645+
DartType matchedType,
5646+
Expression variableInitializingContext,
5647+
InferenceVisitorBase inferenceVisitor) {
5648+
return unsupported(
5649+
"RestPattern.transform", fileOffset, inferenceVisitor.helper.uri);
5650+
}
5651+
}
5652+
55475653
enum PatternTransformationElementKind {
55485654
regular,
55495655
logicalOrPatternLeftBegin,

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

+5
Original file line numberDiff line numberDiff line change
@@ -9131,6 +9131,11 @@ class InferenceVisitorImpl extends InferenceVisitorBase
91319131
return const PatternInferenceResult();
91329132
}
91339133

9134+
PatternInferenceResult visitRestPattern(RestPattern pattern,
9135+
{required SharedMatchContext context}) {
9136+
return const PatternInferenceResult();
9137+
}
9138+
91349139
PatternInferenceResult visitRelationalPattern(
91359140
RelationalPattern pattern, {
91369141
required SharedMatchContext context,

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ static method test(dynamic x) → dynamic {
1313
}
1414
final dynamic #t3 = x;
1515
final dynamic #t4 = #t3;
16-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
16+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1717
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1818
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
1919
{
@@ -25,12 +25,12 @@ static method test(dynamic x) → dynamic {
2525
}
2626
final dynamic #t7 = x;
2727
final dynamic #t8 = #t7;
28-
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(2){(core::num) → core::bool}) {
28+
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(2){(core::Object) → core::bool}) {
2929
final dynamic #t9 = #t8{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3030
final dynamic #t10 = #t8{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
3131
final core::List<core::bool> #t11 = #t9 as{ForNonNullableByDefault} core::List<core::bool>;
3232
final core::List<core::bool> #t12 = #t11;
33-
if(#t12.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
33+
if(#t12.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
3434
final dynamic #t13 = #t12{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3535
if(#t10 =={core::Object::==}{(core::Object) → core::bool} 0) {
3636
{

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ static method test(dynamic x) → dynamic {
1313
}
1414
final dynamic #t3 = x;
1515
final dynamic #t4 = #t3;
16-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
16+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1717
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1818
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
1919
{
@@ -25,12 +25,12 @@ static method test(dynamic x) → dynamic {
2525
}
2626
final dynamic #t7 = x;
2727
final dynamic #t8 = #t7;
28-
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(2){(core::num) → core::bool}) {
28+
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(2){(core::Object) → core::bool}) {
2929
final dynamic #t9 = #t8{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3030
final dynamic #t10 = #t8{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
3131
final core::List<core::bool> #t11 = #t9 as{ForNonNullableByDefault} core::List<core::bool>;
3232
final core::List<core::bool> #t12 = #t11;
33-
if(#t12.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
33+
if(#t12.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
3434
final dynamic #t13 = #t12{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3535
if(#t10 =={core::Object::==}{(core::Object) → core::bool} 0) {
3636
{

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ static method test(dynamic x) → dynamic {
1313
}
1414
final dynamic #t3 = x;
1515
final dynamic #t4 = #t3;
16-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
16+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1717
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1818
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
1919
{
@@ -25,12 +25,12 @@ static method test(dynamic x) → dynamic {
2525
}
2626
final dynamic #t7 = x;
2727
final dynamic #t8 = #t7;
28-
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(2){(core::num) → core::bool}) {
28+
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(2){(core::Object) → core::bool}) {
2929
final dynamic #t9 = #t8{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3030
final dynamic #t10 = #t8{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
3131
final core::List<core::bool> #t11 = #t9 as{ForNonNullableByDefault} core::List<core::bool>;
3232
final core::List<core::bool> #t12 = #t11;
33-
if(#t12.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
33+
if(#t12.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
3434
final dynamic #t13 = #t12{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3535
if(#t10 =={core::Object::==}{(core::Object) → core::bool} 0) {
3636
{

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ static method test(dynamic x) → dynamic {
1313
}
1414
final dynamic #t3 = x;
1515
final dynamic #t4 = #t3;
16-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
16+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1717
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1818
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
1919
{
@@ -25,12 +25,12 @@ static method test(dynamic x) → dynamic {
2525
}
2626
final dynamic #t7 = x;
2727
final dynamic #t8 = #t7;
28-
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(2){(core::num) → core::bool}) {
28+
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(2){(core::Object) → core::bool}) {
2929
final dynamic #t9 = #t8{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3030
final dynamic #t10 = #t8{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
3131
final core::List<core::bool> #t11 = #t9 as{ForNonNullableByDefault} core::List<core::bool>;
3232
final core::List<core::bool> #t12 = #t11;
33-
if(#t12.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
33+
if(#t12.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
3434
final dynamic #t13 = #t12{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3535
if(#t10 =={core::Object::==}{(core::Object) → core::bool} 0) {
3636
{

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

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ static method test(dynamic x) → dynamic {
1313
}
1414
final dynamic #t3 = x;
1515
final dynamic #t4 = #t3;
16-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
16+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1717
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1818
final core::String #t6 = #t5 as{ForNonNullableByDefault} core::String;
1919
{
@@ -25,12 +25,12 @@ static method test(dynamic x) → dynamic {
2525
}
2626
final dynamic #t7 = x;
2727
final dynamic #t8 = #t7;
28-
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(2){(core::num) → core::bool}) {
28+
if(#t8 is core::List<dynamic> && #t8{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(2){(core::Object) → core::bool}) {
2929
final dynamic #t9 = #t8{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3030
final dynamic #t10 = #t8{core::List<dynamic>}.{core::List::[]}(1){(core::int) → dynamic};
3131
final core::List<core::bool> #t11 = #t9 as{ForNonNullableByDefault} core::List<core::bool>;
3232
final core::List<core::bool> #t12 = #t11;
33-
if(#t12.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
33+
if(#t12.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
3434
final dynamic #t13 = #t12{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
3535
if(#t10 =={core::Object::==}{(core::Object) → core::bool} 0) {
3636
{

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ static method test(dynamic x) → dynamic {
1010
final core::bool #t3 = false;
1111
if(!#t3) {
1212
final dynamic #t4 = #t1;
13-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
13+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1414
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
final core::int #t6 = #t5 as{ForNonNullableByDefault} core::int;
1616
if(#t6 =={core::num::==}{(core::Object) → core::bool} 1) {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ static method test(dynamic x) → dynamic {
1010
final core::bool #t3 = false;
1111
if(!#t3) {
1212
final dynamic #t4 = #t1;
13-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
13+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1414
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
final core::int #t6 = #t5 as{ForNonNullableByDefault} core::int;
1616
if(#t6 =={core::num::==}{(core::Object) → core::bool} 1) {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ static method test(dynamic x) → dynamic {
1010
final core::bool #t3 = false;
1111
if(!#t3) {
1212
final dynamic #t4 = #t1;
13-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
13+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1414
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
final core::int #t6 = #t5 as{ForNonNullableByDefault} core::int;
1616
if(#t6 =={core::num::==}{(core::Object) → core::bool} 1) {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ static method test(dynamic x) → dynamic {
1010
final core::bool #t3 = false;
1111
if(!#t3) {
1212
final dynamic #t4 = #t1;
13-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
13+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1414
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
final core::int #t6 = #t5 as{ForNonNullableByDefault} core::int;
1616
if(#t6 =={core::num::==}{(core::Object) → core::bool} 1) {

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ static method test(dynamic x) → dynamic {
1010
final core::bool #t3 = false;
1111
if(!#t3) {
1212
final dynamic #t4 = #t1;
13-
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::>=}(1){(core::num) → core::bool}) {
13+
if(#t4 is core::List<dynamic> && #t4{core::List<dynamic>}.{core::List::length}{core::int}.{core::num::==}(1){(core::Object) → core::bool}) {
1414
final dynamic #t5 = #t4{core::List<dynamic>}.{core::List::[]}(0){(core::int) → dynamic};
1515
final core::int #t6 = #t5 as{ForNonNullableByDefault} core::int;
1616
if(#t6 =={core::num::==}{(core::Object) → core::bool} 1) {

0 commit comments

Comments
 (0)