From ba5f8da95d34d53a4a0eb9d0e33726492d11575d Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Tue, 13 Dec 2022 12:56:01 +0000 Subject: [PATCH] Update Dart.g to match the current pattern feature spec This CL changes the Dart grammar in Dart.g such that it contains all the grammar changes applied to the patterns proposal since the previous update of Dart.g. Change-Id: I9b5f0d9a092d30ce0055db99da5fdbe3b9b1d5dc Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/275002 Reviewed-by: William Hesse Auto-Submit: Erik Ernst Commit-Queue: Erik Ernst --- tools/spec_parser/Dart.g | 49 +++++++++++++++++++++++++++------------- 1 file changed, 33 insertions(+), 16 deletions(-) diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g index dae59fb445b..b063dfee2de 100644 --- a/tools/spec_parser/Dart.g +++ b/tools/spec_parser/Dart.g @@ -4,9 +4,12 @@ // CHANGES: // -// v0.24 Change constant pattern rules to allow Symbols and negative numbers +// v0.25 Update pattern rules following changes to the patterns feature +// specification since v0.24. // -// v0.23 Change logical pattern rules to || and && +// v0.24 Change constant pattern rules to allow Symbols and negative numbers. +// +// v0.23 Change logical pattern rules to || and &&. // // v0.22 Change pattern rules, following updated feature specification. // @@ -656,7 +659,7 @@ spreadElement ; ifElement - : IF '(' expression ')' element (ELSE element)? + : ifCondition element (ELSE element)? ; forElement @@ -669,15 +672,11 @@ constructorTearoff switchExpression : SWITCH '(' expression ')' - LBRACE switchExpressionCase* switchExpressionDefault? RBRACE + LBRACE switchExpressionCase (',' switchExpressionCase)* ','? RBRACE ; switchExpressionCase - : caseHead '=>' expression ';' - ; - -switchExpressionDefault - : DEFAULT '=>' expression ';' + : guardedPattern '=>' expression ; throwExpression @@ -1031,7 +1030,7 @@ logicalAndPattern ; relationalPattern - : (equalityOperator | relationalOperator) relationalExpression + : (equalityOperator | relationalOperator) bitwiseOrExpression | unaryPattern ; @@ -1087,7 +1086,20 @@ parenthesizedPattern ; listPattern - : typeArguments? '[' patterns? ']' + : typeArguments? '[' listPatternElements? ']' + ; + +listPatternElements + : listPatternElement (',' listPatternElement)* ','? + ; + +listPatternElement + : pattern + | restPattern + ; + +restPattern + : '...' pattern? ; mapPattern @@ -1100,6 +1112,7 @@ mapPatternEntries mapPatternEntry : expression ':' pattern + | '...' ; recordPattern @@ -1186,7 +1199,11 @@ localFunctionDeclaration ; ifStatement - : IF '(' expression caseHead? ')' statement (ELSE statement)? + : ifCondition statement (ELSE statement)? + ; + +ifCondition + : IF '(' expression (CASE guardedPattern)? ')' ; forStatement @@ -1222,11 +1239,11 @@ switchStatement ; switchStatementCase - : label* caseHead ':' statements + : label* CASE guardedPattern ':' statements ; -caseHead - : CASE pattern (WHEN expression)? +guardedPattern + : pattern (WHEN expression)? ; switchStatementDefault @@ -1393,7 +1410,7 @@ recordType : '(' ')' | '(' recordTypeFields ',' recordTypeNamedFields ')' | '(' recordTypeFields ','? ')' - | '(' recordTypeNamedFields? ')' + | '(' recordTypeNamedFields ')' ; recordTypeFields