Skip to content

Commit 4cf63fb

Browse files
stereotype441Commit Queue
authored and
Commit Queue
committed
Parser and listener API changes for supporting pattern guards.
These are in their own CL so that it's easy to verify that no functionalty has changed, even though a lot of parser expectations files are affected. In a follow-up CL, I'll add code that actually parses pattern guards. Bug: #50035 Change-Id: I79f5a02df45e29b69aa4d8348cfdf27042ada9d3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/264020 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent 3fa0a2f commit 4cf63fb

File tree

571 files changed

+1905
-1893
lines changed

Some content is hidden

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

571 files changed

+1905
-1893
lines changed

pkg/_fe_analyzer_shared/lib/src/parser/forwarding_listener.dart

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -577,8 +577,8 @@ class ForwardingListener implements Listener {
577577
}
578578

579579
@override
580-
void endCaseExpression(Token colon) {
581-
listener?.endCaseExpression(colon);
580+
void endCaseExpression(Token? when, Token colon) {
581+
listener?.endCaseExpression(when, colon);
582582
}
583583

584584
@override
@@ -1292,8 +1292,8 @@ class ForwardingListener implements Listener {
12921292
}
12931293

12941294
@override
1295-
void handleCaseMatch(Token caseKeyword, Token colon) {
1296-
listener?.handleCaseMatch(caseKeyword, colon);
1295+
void handleCaseMatch(Token caseKeyword, Token? when, Token colon) {
1296+
listener?.handleCaseMatch(caseKeyword, when, colon);
12971297
}
12981298

12991299
@override
@@ -1772,8 +1772,8 @@ class ForwardingListener implements Listener {
17721772
}
17731773

17741774
@override
1775-
void handleParenthesizedCondition(Token token, Token? case_) {
1776-
listener?.handleParenthesizedCondition(token, case_);
1775+
void handleParenthesizedCondition(Token token, Token? case_, Token? when) {
1776+
listener?.handleParenthesizedCondition(token, case_, when);
17771777
}
17781778

17791779
@override

pkg/_fe_analyzer_shared/lib/src/parser/listener.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ class Listener implements UnescapeErrorListener {
100100

101101
void beginCaseExpression(Token caseKeyword) {}
102102

103-
void endCaseExpression(Token colon) {
103+
void endCaseExpression(Token? when, Token colon) {
104104
logEvent("CaseExpression");
105105
}
106106

@@ -1351,7 +1351,7 @@ class Listener implements UnescapeErrorListener {
13511351

13521352
void beginTryStatement(Token token) {}
13531353

1354-
void handleCaseMatch(Token caseKeyword, Token colon) {
1354+
void handleCaseMatch(Token caseKeyword, Token? when, Token colon) {
13551355
logEvent("CaseMatch");
13561356
}
13571357

@@ -1849,7 +1849,7 @@ class Listener implements UnescapeErrorListener {
18491849
/// - do while loop
18501850
/// - switch statement
18511851
/// - while loop
1852-
void handleParenthesizedCondition(Token token, Token? case_) {
1852+
void handleParenthesizedCondition(Token token, Token? case_, Token? when) {
18531853
logEvent("ParenthesizedCondition");
18541854
}
18551855

pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6241,10 +6241,11 @@ class Parser {
62416241
Token case_ = token = next;
62426242
token = parsePattern(token);
62436243
token = ensureCloseParen(token, begin);
6244-
listener.handleParenthesizedCondition(begin, case_);
6244+
listener.handleParenthesizedCondition(begin, case_, null);
62456245
} else {
62466246
token = ensureCloseParen(token, begin);
6247-
listener.handleParenthesizedCondition(begin, /* case_ = */ null);
6247+
listener.handleParenthesizedCondition(
6248+
begin, /* case_ = */ null, /* when = */ null);
62486249
}
62496250
assert(optional(')', token));
62506251
return token;
@@ -8258,8 +8259,8 @@ class Parser {
82588259
token = parseExpression(caseKeyword);
82598260
}
82608261
token = ensureColon(token);
8261-
listener.endCaseExpression(token);
8262-
listener.handleCaseMatch(caseKeyword, token);
8262+
listener.endCaseExpression(null, token);
8263+
listener.handleCaseMatch(caseKeyword, null, token);
82638264
expressionCount++;
82648265
peek = peekPastLabels(token.next!);
82658266
} else if (expressionCount > 0) {

pkg/_fe_analyzer_shared/lib/src/parser/stack_listener.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -428,7 +428,7 @@ abstract class StackListener extends Listener {
428428
}
429429

430430
@override
431-
void handleParenthesizedCondition(Token token, Token? case_) {
431+
void handleParenthesizedCondition(Token token, Token? case_, Token? when) {
432432
debugEvent("handleParenthesizedCondition");
433433
}
434434

@@ -482,7 +482,7 @@ abstract class StackListener extends Listener {
482482
}
483483

484484
@override
485-
void endCaseExpression(Token colon) {
485+
void endCaseExpression(Token? when, Token colon) {
486486
debugEvent("CaseExpression");
487487
}
488488

pkg/analyzer/lib/src/fasta/ast_builder.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3276,7 +3276,7 @@ class AstBuilder extends StackListener {
32763276
}
32773277

32783278
@override
3279-
void handleCaseMatch(Token caseKeyword, Token colon) {
3279+
void handleCaseMatch(Token caseKeyword, Token? when, Token colon) {
32803280
assert(optional('case', caseKeyword));
32813281
assert(optional(':', colon));
32823282
debugEvent("CaseMatch");
@@ -4556,7 +4556,8 @@ class AstBuilder extends StackListener {
45564556
}
45574557

45584558
@override
4559-
void handleParenthesizedCondition(Token leftParenthesis, Token? case_) {
4559+
void handleParenthesizedCondition(
4560+
Token leftParenthesis, Token? case_, Token? when) {
45604561
ExpressionImpl condition;
45614562
CaseClauseImpl? caseClause;
45624563
if (case_ != null) {

pkg/analyzer/test/generated/parser_fasta_listener.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -598,9 +598,9 @@ class ForwardingTestListener extends ForwardingListener {
598598
}
599599

600600
@override
601-
void endCaseExpression(Token colon) {
601+
void endCaseExpression(Token? when, Token colon) {
602602
end('CaseExpression');
603-
super.endCaseExpression(colon);
603+
super.endCaseExpression(when, colon);
604604
}
605605

606606
@override

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2279,7 +2279,7 @@ class BodyBuilder extends StackListenerImpl
22792279
}
22802280

22812281
@override
2282-
void handleParenthesizedCondition(Token token, Token? case_) {
2282+
void handleParenthesizedCondition(Token token, Token? case_, Token? when) {
22832283
if (case_ != null) {
22842284
assert(checkState(token, [
22852285
unionOfKinds([
@@ -2507,7 +2507,7 @@ class BodyBuilder extends StackListenerImpl
25072507
}
25082508

25092509
@override
2510-
void endCaseExpression(Token colon) {
2510+
void endCaseExpression(Token? when, Token colon) {
25112511
assert(checkState(colon, [
25122512
unionOfKinds([
25132513
ValueKinds.Expression,
@@ -7208,7 +7208,7 @@ class BodyBuilder extends StackListenerImpl
72087208
}
72097209

72107210
@override
7211-
void handleCaseMatch(Token caseKeyword, Token colon) {
7211+
void handleCaseMatch(Token caseKeyword, Token? when, Token colon) {
72127212
debugEvent("CaseMatch");
72137213
// Do nothing. Handled by [handleSwitchCase].
72147214
}

pkg/front_end/lib/src/fasta/kernel/macro/annotation_parser.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -986,7 +986,7 @@ class _MacroListener implements Listener {
986986
}
987987

988988
@override
989-
void endCaseExpression(Token colon) {
989+
void endCaseExpression(Token? when, Token colon) {
990990
_unsupported();
991991
}
992992

@@ -1580,7 +1580,7 @@ class _MacroListener implements Listener {
15801580
}
15811581

15821582
@override
1583-
void handleCaseMatch(Token caseKeyword, Token colon) {
1583+
void handleCaseMatch(Token caseKeyword, Token? when, Token colon) {
15841584
_unsupported();
15851585
}
15861586

@@ -2003,7 +2003,7 @@ class _MacroListener implements Listener {
20032003
}
20042004

20052005
@override
2006-
void handleParenthesizedCondition(Token token, Token? case_) {
2006+
void handleParenthesizedCondition(Token token, Token? case_, Token? when) {
20072007
_unknown();
20082008
}
20092009

pkg/front_end/lib/src/fasta/util/parser_ast_helper.dart

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,9 @@ abstract class AbstractParserAstListener implements Listener {
141141
}
142142

143143
@override
144-
void endCaseExpression(Token colon) {
144+
void endCaseExpression(Token? when, Token colon) {
145145
CaseExpressionEnd data =
146-
new CaseExpressionEnd(ParserAstType.END, colon: colon);
146+
new CaseExpressionEnd(ParserAstType.END, when: when, colon: colon);
147147
seen(data);
148148
}
149149

@@ -1780,9 +1780,9 @@ abstract class AbstractParserAstListener implements Listener {
17801780
}
17811781

17821782
@override
1783-
void handleCaseMatch(Token caseKeyword, Token colon) {
1783+
void handleCaseMatch(Token caseKeyword, Token? when, Token colon) {
17841784
CaseMatchHandle data = new CaseMatchHandle(ParserAstType.HANDLE,
1785-
caseKeyword: caseKeyword, colon: colon);
1785+
caseKeyword: caseKeyword, when: when, colon: colon);
17861786
seen(data);
17871787
}
17881788

@@ -2511,11 +2511,12 @@ abstract class AbstractParserAstListener implements Listener {
25112511
}
25122512

25132513
@override
2514-
void handleParenthesizedCondition(Token token, Token? case_) {
2514+
void handleParenthesizedCondition(Token token, Token? case_, Token? when) {
25152515
ParenthesizedConditionHandle data = new ParenthesizedConditionHandle(
25162516
ParserAstType.HANDLE,
25172517
token: token,
2518-
case_: case_);
2518+
case_: case_,
2519+
when: when);
25192520
seen(data);
25202521
}
25212522

@@ -3024,13 +3025,15 @@ class CaseExpressionBegin extends ParserAstNode {
30243025
}
30253026

30263027
class CaseExpressionEnd extends ParserAstNode {
3028+
final Token? when;
30273029
final Token colon;
30283030

3029-
CaseExpressionEnd(ParserAstType type, {required this.colon})
3031+
CaseExpressionEnd(ParserAstType type, {this.when, required this.colon})
30303032
: super("CaseExpression", type);
30313033

30323034
@override
30333035
Map<String, Object?> get deprecatedArguments => {
3036+
"when": when,
30343037
"colon": colon,
30353038
};
30363039
}
@@ -6005,15 +6008,17 @@ class TryStatementBegin extends ParserAstNode {
60056008

60066009
class CaseMatchHandle extends ParserAstNode {
60076010
final Token caseKeyword;
6011+
final Token? when;
60086012
final Token colon;
60096013

60106014
CaseMatchHandle(ParserAstType type,
6011-
{required this.caseKeyword, required this.colon})
6015+
{required this.caseKeyword, this.when, required this.colon})
60126016
: super("CaseMatch", type);
60136017

60146018
@override
60156019
Map<String, Object?> get deprecatedArguments => {
60166020
"caseKeyword": caseKeyword,
6021+
"when": when,
60176022
"colon": colon,
60186023
};
60196024
}
@@ -7314,15 +7319,17 @@ class InvalidOperatorNameHandle extends ParserAstNode {
73147319
class ParenthesizedConditionHandle extends ParserAstNode {
73157320
final Token token;
73167321
final Token? case_;
7322+
final Token? when;
73177323

73187324
ParenthesizedConditionHandle(ParserAstType type,
7319-
{required this.token, this.case_})
7325+
{required this.token, this.case_, this.when})
73207326
: super("ParenthesizedCondition", type);
73217327

73227328
@override
73237329
Map<String, Object?> get deprecatedArguments => {
73247330
"token": token,
73257331
"case_": case_,
7332+
"when": when,
73267333
};
73277334
}
73287335

pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ beginCompilationUnit(foo)
6464
handleLiteralNull(null)
6565
endBinaryExpression(==)
6666
endBinaryExpression(||)
67-
handleParenthesizedCondition((, null)
67+
handleParenthesizedCondition((, null, null)
6868
beginThenStatement({)
6969
beginBlock({, BlockKind(statement))
7070
beginReturnStatement(return)
@@ -124,7 +124,7 @@ beginCompilationUnit(foo)
124124
handleLiteralNull(null)
125125
endBinaryExpression(==)
126126
endBinaryExpression(&&)
127-
handleParenthesizedCondition((, null)
127+
handleParenthesizedCondition((, null, null)
128128
beginThenStatement({)
129129
beginBlock({, BlockKind(statement))
130130
beginReturnStatement(return)

pkg/front_end/parser_testcases/error_recovery/issue_44785.crash_dart.intertwined.expect

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ parseUnit(foo)
125125
listener: endBinaryExpression(==)
126126
listener: endBinaryExpression(||)
127127
ensureCloseParen(null, ()
128-
listener: handleParenthesizedCondition((, null)
128+
listener: handleParenthesizedCondition((, null, null)
129129
listener: beginThenStatement({)
130130
parseStatement())
131131
parseStatementX())
@@ -280,7 +280,7 @@ parseUnit(foo)
280280
listener: endBinaryExpression(==)
281281
listener: endBinaryExpression(&&)
282282
ensureCloseParen(null, ()
283-
listener: handleParenthesizedCondition((, null)
283+
listener: handleParenthesizedCondition((, null, null)
284284
listener: beginThenStatement({)
285285
parseStatement())
286286
parseStatementX())

pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.expect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ beginCompilationUnit(foo)
7272
handleLiteralNull(null)
7373
endBinaryExpression(==)
7474
endBinaryExpression(||)
75-
handleParenthesizedCondition((, null)
75+
handleParenthesizedCondition((, null, null)
7676
beginThenStatement({)
7777
beginBlock({, BlockKind(statement))
7878
beginReturnStatement(return)
@@ -150,7 +150,7 @@ beginCompilationUnit(foo)
150150
handleLiteralNull(null)
151151
endBinaryExpression(==)
152152
endBinaryExpression(||)
153-
handleParenthesizedCondition((, null)
153+
handleParenthesizedCondition((, null, null)
154154
beginThenStatement({)
155155
beginBlock({, BlockKind(statement))
156156
beginReturnStatement(return)
@@ -209,7 +209,7 @@ beginCompilationUnit(foo)
209209
handleLiteralNull(null)
210210
endBinaryExpression(==)
211211
endBinaryExpression(&&)
212-
handleParenthesizedCondition((, null)
212+
handleParenthesizedCondition((, null, null)
213213
beginThenStatement({)
214214
beginBlock({, BlockKind(statement))
215215
beginReturnStatement(return)
@@ -287,7 +287,7 @@ beginCompilationUnit(foo)
287287
handleLiteralNull(null)
288288
endBinaryExpression(==)
289289
endBinaryExpression(&&)
290-
handleParenthesizedCondition((, null)
290+
handleParenthesizedCondition((, null, null)
291291
beginThenStatement({)
292292
beginBlock({, BlockKind(statement))
293293
beginReturnStatement(return)

pkg/front_end/parser_testcases/error_recovery/issue_44785_prime_1.crash_dart.intertwined.expect

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ parseUnit(foo)
125125
listener: endBinaryExpression(==)
126126
listener: endBinaryExpression(||)
127127
ensureCloseParen(null, ()
128-
listener: handleParenthesizedCondition((, null)
128+
listener: handleParenthesizedCondition((, null, null)
129129
listener: beginThenStatement({)
130130
parseStatement())
131131
parseStatementX())
@@ -337,7 +337,7 @@ parseUnit(foo)
337337
listener: endBinaryExpression(==)
338338
listener: endBinaryExpression(||)
339339
ensureCloseParen(null, ()
340-
listener: handleParenthesizedCondition((, null)
340+
listener: handleParenthesizedCondition((, null, null)
341341
listener: beginThenStatement({)
342342
parseStatement())
343343
parseStatementX())
@@ -489,7 +489,7 @@ parseUnit(foo)
489489
listener: endBinaryExpression(==)
490490
listener: endBinaryExpression(&&)
491491
ensureCloseParen(null, ()
492-
listener: handleParenthesizedCondition((, null)
492+
listener: handleParenthesizedCondition((, null, null)
493493
listener: beginThenStatement({)
494494
parseStatement())
495495
parseStatementX())
@@ -701,7 +701,7 @@ parseUnit(foo)
701701
listener: endBinaryExpression(==)
702702
listener: endBinaryExpression(&&)
703703
ensureCloseParen(null, ()
704-
listener: handleParenthesizedCondition((, null)
704+
listener: handleParenthesizedCondition((, null, null)
705705
listener: beginThenStatement({)
706706
parseStatement())
707707
parseStatementX())

0 commit comments

Comments
 (0)