This repository was archived by the owner on Feb 25, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 4 files changed +48
-12
lines changed Expand file tree Collapse file tree 4 files changed +48
-12
lines changed Original file line number Diff line number Diff line change @@ -10967,14 +10967,21 @@ class RestPatternElementImpl extends AstNodeImpl
10967
10967
RestPatternElementImpl ({
10968
10968
required this .operator ,
10969
10969
required this .pattern,
10970
- });
10970
+ }) {
10971
+ _becomeParentOf (pattern);
10972
+ }
10971
10973
10972
10974
@override
10973
10975
Token get beginToken => operator ;
10974
10976
10975
10977
@override
10976
10978
Token get endToken => pattern? .endToken ?? operator ;
10977
10979
10980
+ @override
10981
+ ChildEntities get _childEntities => ChildEntities ()
10982
+ ..addToken ('operator' , operator )
10983
+ ..addNode ('pattern' , pattern);
10984
+
10978
10985
@override
10979
10986
E ? accept <E >(AstVisitor <E > visitor) {
10980
10987
return visitor.visitRestPatternElement (this );
Original file line number Diff line number Diff line change @@ -911,9 +911,10 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
911
911
}
912
912
913
913
@override
914
- DartPattern ? getRestPatternElementPattern (covariant DartPatternImpl node) {
915
- // TODO(scheglov): implement getRestPatternElementPattern
916
- throw UnimplementedError ();
914
+ DartPattern ? getRestPatternElementPattern (
915
+ covariant RestPatternElementImpl element,
916
+ ) {
917
+ return element.pattern;
917
918
}
918
919
919
920
@override
@@ -1038,11 +1039,8 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
1038
1039
@override
1039
1040
void handleListPatternRestElement (
1040
1041
DartPattern container,
1041
- covariant DartPattern restElement,
1042
- ) {
1043
- // TODO(scheglov): implement handleListPatternRestElement
1044
- throw UnimplementedError ();
1045
- }
1042
+ covariant RestPatternElementImpl restElement,
1043
+ ) {}
1046
1044
1047
1045
@override
1048
1046
void handleMapPatternEntry (DartPattern container, AstNode entryElement) {
@@ -1145,9 +1143,8 @@ class ResolverVisitor extends ThrowingAstVisitor<void>
1145
1143
}
1146
1144
1147
1145
@override
1148
- bool isRestPatternElement (covariant DartPatternImpl node) {
1149
- // TODO(scheglov): implement isRestPatternElement
1150
- return false ;
1146
+ bool isRestPatternElement (AstNode node) {
1147
+ return node is RestPatternElementImpl ;
1151
1148
}
1152
1149
1153
1150
@override
Original file line number Diff line number Diff line change @@ -6706,6 +6706,7 @@ ListPattern
6706
6706
leftBracket: [
6707
6707
elements
6708
6708
RestPatternElement
6709
+ operator: ...
6709
6710
rightBracket: ]
6710
6711
''' );
6711
6712
}
@@ -6725,6 +6726,10 @@ ListPattern
6725
6726
leftBracket: [
6726
6727
elements
6727
6728
RestPatternElement
6729
+ operator: ...
6730
+ pattern: VariablePattern
6731
+ keyword: var
6732
+ name: y
6728
6733
rightBracket: ]
6729
6734
''' );
6730
6735
}
Original file line number Diff line number Diff line change @@ -101,6 +101,33 @@ ListPattern
101
101
''' );
102
102
}
103
103
104
+ test_matchList_noTypeArguments_restElement () async {
105
+ await assertNoErrorsInCode (r'''
106
+ void f(List<int> x) {
107
+ if (x case [0, ...var rest]) {}
108
+ }
109
+ ''' );
110
+ final node = findNode.singleGuardedPattern.pattern;
111
+ assertResolvedNodeText (node, r'''
112
+ ListPattern
113
+ leftBracket: [
114
+ elements
115
+ ConstantPattern
116
+ expression: IntegerLiteral
117
+ literal: 0
118
+ staticType: int
119
+ RestPatternElement
120
+ operator: ...
121
+ pattern: VariablePattern
122
+ keyword: var
123
+ name: rest
124
+ declaredElement: hasImplicitType rest@46
125
+ type: List<int>
126
+ rightBracket: ]
127
+ requiredType: List<int>
128
+ ''' );
129
+ }
130
+
104
131
test_matchList_noTypeArguments_variable_untyped () async {
105
132
await assertNoErrorsInCode (r'''
106
133
void f(List<int> x) {
You can’t perform that action at this time.
0 commit comments