[parser] Support record type in pattern
Fixes http://dartbug.com/51169
Fixes http://dartbug.com/51176
Change-Id: Iaa38585ce311319f2f4c106fc979c99d931eaa15
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/280106
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 3fcb7a8..22d39d0 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -9481,6 +9481,17 @@
// variablePattern ::= ( 'var' | 'final' | 'final'? type )? identifier
return parseVariablePattern(token, patternContext);
case '(':
+ // "(" could start a record type (which has to be followed by an
+ // identifier though), e.g. `(int, int) foo`.
+ if (next.endGroup!.next!.isIdentifier) {
+ TypeInfo typeInfo = computeVariablePatternType(token);
+ if (typeInfo is ComplexTypeInfo &&
+ typeInfo.isRecordType &&
+ !typeInfo.recovered) {
+ return parseVariablePattern(token, patternContext,
+ typeInfo: typeInfo);
+ }
+ }
// parenthesizedPattern ::= '(' pattern ')'
// recordPattern ::= '(' patternFields? ')'
// patternFields ::= patternField ( ',' patternField )* ','?
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart b/pkg/front_end/parser_testcases/patterns/issue_51169.dart
new file mode 100644
index 0000000..4a55399
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart
@@ -0,0 +1,17 @@
+class Class {
+ dynamic field;
+ Class(this.field);
+}
+
+test(a) {
+ switch (a) {
+ case (foo: int b) when b != 2:
+ print(b);
+ case (foo: (int, int) b) when b != (2, 3):
+ print(b);
+ case Class(field: int b) when b != 2:
+ print(b);
+ case Class(field: (int, int) b) when b != (2, 3):
+ print(b);
+ }
+}
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect
new file mode 100644
index 0000000..9574f9f
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.expect
@@ -0,0 +1,239 @@
+beginCompilationUnit(class)
+ beginMetadataStar(class)
+ endMetadataStar(0)
+ beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+ handleIdentifier(Class, classOrMixinDeclaration)
+ handleNoTypeVariables({)
+ beginClassDeclaration(class, null, null, null, null, null, null, null, null, null, Class)
+ handleNoType(Class)
+ handleClassExtends(null, 1)
+ handleClassNoWithClause()
+ handleImplements(null, 0)
+ handleClassHeader(class, class, null)
+ beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+ beginMetadataStar(dynamic)
+ endMetadataStar(0)
+ beginMember()
+ beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+ handleIdentifier(dynamic, typeReference)
+ handleNoTypeArguments(field)
+ handleType(dynamic, null)
+ handleIdentifier(field, fieldDeclaration)
+ handleNoFieldInitializer(;)
+ endClassFields(null, null, null, null, null, null, null, 1, dynamic, ;)
+ endMember()
+ beginMetadataStar(Class)
+ endMetadataStar(0)
+ beginMember()
+ beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Class)
+ handleNoType(;)
+ handleIdentifier(Class, methodDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.NonStaticMethod)
+ beginMetadataStar(this)
+ endMetadataStar(0)
+ beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+ handleNoType(()
+ handleIdentifier(field, fieldInitializer)
+ handleFormalParameterWithoutValue())
+ endFormalParameter(this, null, ., field, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+ endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+ handleNoInitializers()
+ handleAsyncModifier(null, null)
+ handleEmptyFunctionBody(;)
+ endClassConstructor(null, Class, (, null, ;)
+ endMember()
+ endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+ endClassDeclaration(class, })
+ endTopLevelDeclaration(test)
+ beginMetadataStar(test)
+ endMetadataStar(0)
+ beginTopLevelMember(test)
+ beginTopLevelMethod(}, null, null)
+ handleNoType(})
+ handleIdentifier(test, topLevelFunctionDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.TopLevelMethod)
+ beginMetadataStar(a)
+ endMetadataStar(0)
+ beginFormalParameter(a, MemberKind.TopLevelMethod, null, null, null)
+ handleNoType(()
+ handleIdentifier(a, formalParameterDeclaration)
+ handleFormalParameterWithoutValue())
+ endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+ endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+ handleAsyncModifier(null, null)
+ beginBlockFunctionBody({)
+ beginSwitchStatement(switch)
+ handleIdentifier(a, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(a, ))
+ handleParenthesizedCondition((, null, null)
+ beginSwitchBlock({)
+ beginCaseExpression(case)
+ handleIdentifier(foo, namedRecordFieldReference)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(b)
+ handleType(int, null)
+ handleVariablePattern(null, b, false)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ beginSwitchCaseWhenClause(when)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(!=)
+ handleNoArguments(!=)
+ handleSend(b, !=)
+ beginBinaryExpression(!=)
+ handleLiteralInt(2)
+ endBinaryExpression(!=)
+ endSwitchCaseWhenClause(2)
+ endCaseExpression(case, when, :)
+ beginSwitchCase(0, 1, case)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(b, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(b, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ endSwitchCase(0, 1, null, null, 1, case, case)
+ beginCaseExpression(case)
+ handleIdentifier(foo, namedRecordFieldReference)
+ beginRecordType(()
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(,)
+ handleType(int, null)
+ handleNoName(,)
+ endRecordTypeEntry()
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ endRecordTypeEntry()
+ endRecordType((, null, 2, false)
+ handleVariablePattern(null, b, false)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ beginSwitchCaseWhenClause(when)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(!=)
+ handleNoArguments(!=)
+ handleSend(b, !=)
+ beginBinaryExpression(!=)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleLiteralInt(2)
+ handleLiteralInt(3)
+ endRecordLiteral((, 2, null)
+ endBinaryExpression(!=)
+ endSwitchCaseWhenClause())
+ endCaseExpression(case, when, :)
+ beginSwitchCase(0, 1, case)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(b, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(b, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ endSwitchCase(0, 1, null, null, 1, case, case)
+ beginCaseExpression(case)
+ handleNoTypeArguments(()
+ handleIdentifier(field, namedArgumentReference)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(b)
+ handleType(int, null)
+ handleVariablePattern(null, b, false)
+ handlePatternField(:)
+ handleObjectPatternFields(1, (, ))
+ handleObjectPattern(Class, null, null)
+ beginSwitchCaseWhenClause(when)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(!=)
+ handleNoArguments(!=)
+ handleSend(b, !=)
+ beginBinaryExpression(!=)
+ handleLiteralInt(2)
+ endBinaryExpression(!=)
+ endSwitchCaseWhenClause(2)
+ endCaseExpression(case, when, :)
+ beginSwitchCase(0, 1, case)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(b, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(b, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ endSwitchCase(0, 1, null, null, 1, case, case)
+ beginCaseExpression(case)
+ handleNoTypeArguments(()
+ handleIdentifier(field, namedArgumentReference)
+ beginRecordType(()
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(,)
+ handleType(int, null)
+ handleNoName(,)
+ endRecordTypeEntry()
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments())
+ handleType(int, null)
+ handleNoName())
+ endRecordTypeEntry()
+ endRecordType((, null, 2, false)
+ handleVariablePattern(null, b, false)
+ handlePatternField(:)
+ handleObjectPatternFields(1, (, ))
+ handleObjectPattern(Class, null, null)
+ beginSwitchCaseWhenClause(when)
+ handleIdentifier(b, expression)
+ handleNoTypeArguments(!=)
+ handleNoArguments(!=)
+ handleSend(b, !=)
+ beginBinaryExpression(!=)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleLiteralInt(2)
+ handleLiteralInt(3)
+ endRecordLiteral((, 2, null)
+ endBinaryExpression(!=)
+ endSwitchCaseWhenClause())
+ endCaseExpression(case, when, :)
+ beginSwitchCase(0, 1, case)
+ handleIdentifier(print, expression)
+ handleNoTypeArguments(()
+ beginArguments(()
+ handleIdentifier(b, expression)
+ handleNoTypeArguments())
+ handleNoArguments())
+ handleSend(b, ))
+ endArguments(1, (, ))
+ handleSend(print, ;)
+ handleExpressionStatement(;)
+ endSwitchCase(0, 1, null, null, 1, case, })
+ endSwitchBlock(4, {, })
+ endSwitchStatement(switch, })
+ endBlockFunctionBody(1, {, })
+ endTopLevelMethod(test, null, })
+ endTopLevelDeclaration()
+endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect
new file mode 100644
index 0000000..8864624
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.intertwined.expect
@@ -0,0 +1,611 @@
+parseUnit(class)
+ skipErrorTokens(class)
+ listener: beginCompilationUnit(class)
+ syntheticPreviousToken(class)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(class)
+ listener: endMetadataStar(0)
+ parseTopLevelKeywordDeclaration(, class, null, null, null, null, null, Instance of 'DirectiveContext')
+ parseClassOrNamedMixinApplication(null, null, null, null, null, null, null, null, null, class)
+ listener: beginClassOrMixinOrNamedMixinApplicationPrelude(class)
+ ensureIdentifier(class, classOrMixinDeclaration)
+ listener: handleIdentifier(Class, classOrMixinDeclaration)
+ listener: handleNoTypeVariables({)
+ listener: beginClassDeclaration(class, null, null, null, null, null, null, null, null, null, Class)
+ parseClass(Class, class, class, Class)
+ parseClassHeaderOpt(Class, class, class)
+ parseClassExtendsOpt(Class)
+ listener: handleNoType(Class)
+ listener: handleClassExtends(null, 1)
+ parseClassWithClauseOpt(Class)
+ listener: handleClassNoWithClause()
+ parseClassOrMixinOrEnumImplementsOpt(Class)
+ listener: handleImplements(null, 0)
+ listener: handleClassHeader(class, class, null)
+ parseClassOrMixinOrExtensionBody(Class, DeclarationKind.Class, Class)
+ listener: beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
+ notEofOrValue(}, dynamic)
+ parseClassOrMixinOrExtensionOrEnumMemberImpl({, DeclarationKind.Class, Class)
+ parseMetadataStar({)
+ listener: beginMetadataStar(dynamic)
+ listener: endMetadataStar(0)
+ listener: beginMember()
+ parseFields({, null, null, null, null, null, null, null, {, Instance of 'SimpleType', field, DeclarationKind.Class, Class, false)
+ listener: beginFields(DeclarationKind.Class, null, null, null, null, null, null, null, {)
+ listener: handleIdentifier(dynamic, typeReference)
+ listener: handleNoTypeArguments(field)
+ listener: handleType(dynamic, null)
+ ensureIdentifierPotentiallyRecovered(dynamic, fieldDeclaration, false)
+ listener: handleIdentifier(field, fieldDeclaration)
+ parseFieldInitializerOpt(field, field, null, null, null, null, null, DeclarationKind.Class, Class)
+ listener: handleNoFieldInitializer(;)
+ listener: endClassFields(null, null, null, null, null, null, null, 1, dynamic, ;)
+ listener: endMember()
+ notEofOrValue(}, Class)
+ parseClassOrMixinOrExtensionOrEnumMemberImpl(;, DeclarationKind.Class, Class)
+ parseMetadataStar(;)
+ listener: beginMetadataStar(Class)
+ listener: endMetadataStar(0)
+ listener: beginMember()
+ isReservedKeyword(()
+ parseMethod(;, null, null, null, null, null, null, null, ;, Instance of 'NoType', null, Class, DeclarationKind.Class, Class, false)
+ listener: beginMethod(DeclarationKind.Class, null, null, null, null, null, null, Class)
+ listener: handleNoType(;)
+ ensureIdentifierPotentiallyRecovered(;, methodDeclaration, false)
+ listener: handleIdentifier(Class, methodDeclaration)
+ parseQualifiedRestOpt(Class, methodDeclarationContinuation)
+ parseMethodTypeVar(Class)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(Class, Class, false, MemberKind.NonStaticMethod)
+ parseFormalParameters(Class, MemberKind.NonStaticMethod)
+ parseFormalParametersRest((, MemberKind.NonStaticMethod)
+ listener: beginFormalParameters((, MemberKind.NonStaticMethod)
+ parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+ parseMetadataStar(()
+ listener: beginMetadataStar(this)
+ listener: endMetadataStar(0)
+ listener: beginFormalParameter(this, MemberKind.NonStaticMethod, null, null, null)
+ listener: handleNoType(()
+ ensureIdentifier(., fieldInitializer)
+ listener: handleIdentifier(field, fieldInitializer)
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(this, null, ., field, null, null, FormalParameterKind.requiredPositional, MemberKind.NonStaticMethod)
+ listener: endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
+ parseInitializersOpt())
+ listener: handleNoInitializers()
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ inPlainSync()
+ parseFunctionBody(), false, true)
+ listener: handleEmptyFunctionBody(;)
+ listener: endClassConstructor(null, Class, (, null, ;)
+ listener: endMember()
+ notEofOrValue(}, })
+ listener: endClassOrMixinOrExtensionBody(DeclarationKind.Class, 2, {, })
+ listener: endClassDeclaration(class, })
+ listener: endTopLevelDeclaration(test)
+ parseTopLevelDeclarationImpl(}, Instance of 'DirectiveContext')
+ parseMetadataStar(})
+ listener: beginMetadataStar(test)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl(})
+ listener: beginTopLevelMember(test)
+ isReservedKeyword(()
+ parseTopLevelMethod(}, null, null, }, Instance of 'NoType', null, test, false)
+ listener: beginTopLevelMethod(}, null, null)
+ listener: handleNoType(})
+ ensureIdentifierPotentiallyRecovered(}, topLevelFunctionDeclaration, false)
+ listener: handleIdentifier(test, topLevelFunctionDeclaration)
+ parseMethodTypeVar(test)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(test, test, false, MemberKind.TopLevelMethod)
+ parseFormalParameters(test, MemberKind.TopLevelMethod)
+ parseFormalParametersRest((, MemberKind.TopLevelMethod)
+ listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+ parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+ parseMetadataStar(()
+ listener: beginMetadataStar(a)
+ listener: endMetadataStar(0)
+ listener: beginFormalParameter(a, MemberKind.TopLevelMethod, null, null, null)
+ listener: handleNoType(()
+ ensureIdentifier((, formalParameterDeclaration)
+ listener: handleIdentifier(a, formalParameterDeclaration)
+ listener: handleFormalParameterWithoutValue())
+ listener: endFormalParameter(null, null, null, a, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
+ listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ parseFunctionBody(), false, false)
+ listener: beginBlockFunctionBody({)
+ notEofOrValue(}, switch)
+ parseStatement({)
+ parseStatementX({)
+ parseSwitchStatement({)
+ listener: beginSwitchStatement(switch)
+ ensureParenthesizedCondition(switch, allowCase: false)
+ parseExpressionInParenthesisRest((, allowCase: false)
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ skipObjectPatternRest(a)
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(a, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(a)
+ listener: handleNoArguments())
+ listener: handleSend(a, ))
+ ensureCloseParen(a, ()
+ listener: handleParenthesizedCondition((, null, null)
+ parseSwitchBlock())
+ ensureBlock(), null, switch statement)
+ listener: beginSwitchBlock({)
+ notEofOrValue(}, case)
+ peekPastLabels(case)
+ listener: beginCaseExpression(case)
+ parsePattern(case, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(case, PatternContext.matching)
+ parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(foo, namedRecordFieldReference)
+ parsePattern(:, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.matching)
+ parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(b)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, b, false)
+ listener: handlePatternField(:)
+ ensureCloseParen(b, ()
+ listener: handleRecordPattern((, 1)
+ listener: beginSwitchCaseWhenClause(when)
+ parseExpression(when)
+ looksLikeOuterPatternEquals(when)
+ skipOuterPattern(when)
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression(when, 1, true)
+ parseUnaryExpression(when, true)
+ parsePrimary(when, expression)
+ parseSendOrFunctionLiteral(when, expression)
+ parseSend(when, expression)
+ isNextIdentifier(when)
+ ensureIdentifier(when, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(!=)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(!=)
+ listener: handleSend(b, !=)
+ listener: beginBinaryExpression(!=)
+ parsePrecedenceExpression(!=, 8, true)
+ parseUnaryExpression(!=, true)
+ parsePrimary(!=, expression)
+ parseLiteralInt(!=)
+ listener: handleLiteralInt(2)
+ listener: endBinaryExpression(!=)
+ listener: endSwitchCaseWhenClause(2)
+ ensureColon(2)
+ listener: endCaseExpression(case, when, :)
+ peekPastLabels(print)
+ parseStatementsInSwitchCase(:, print, case, 0, 1, null, null)
+ listener: beginSwitchCase(0, 1, case)
+ parseStatement(:)
+ parseStatementX(:)
+ parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(:)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ skipObjectPatternRest(print)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseSendOrFunctionLiteral(:, expression)
+ looksLikeFunctionBody(;)
+ parseSend(:, expression)
+ isNextIdentifier(:)
+ ensureIdentifier(:, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(b)
+ listener: handleNoArguments())
+ listener: handleSend(b, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ peekPastLabels(case)
+ listener: endSwitchCase(0, 1, null, null, 1, case, case)
+ notEofOrValue(}, case)
+ peekPastLabels(case)
+ listener: beginCaseExpression(case)
+ parsePattern(case, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(case, PatternContext.matching)
+ parseParenthesizedPatternOrRecordPattern(case, PatternContext.matching)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(foo, namedRecordFieldReference)
+ parsePattern(:, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.matching)
+ parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'ComplexTypeInfo')
+ parseRecordType((, :, false)
+ listener: beginRecordType(()
+ parseRecordTypeField((, identifierIsOptional: true)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar(()
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(,)
+ listener: handleType(int, null)
+ listener: handleNoName(,)
+ listener: endRecordTypeEntry()
+ parseRecordTypeField(,, identifierIsOptional: true)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar(,)
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: endRecordTypeEntry()
+ listener: endRecordType((, null, 2, false)
+ listener: handleVariablePattern(null, b, false)
+ listener: handlePatternField(:)
+ ensureCloseParen(b, ()
+ listener: handleRecordPattern((, 1)
+ listener: beginSwitchCaseWhenClause(when)
+ parseExpression(when)
+ looksLikeOuterPatternEquals(when)
+ skipOuterPattern(when)
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression(when, 1, true)
+ parseUnaryExpression(when, true)
+ parsePrimary(when, expression)
+ parseSendOrFunctionLiteral(when, expression)
+ parseSend(when, expression)
+ isNextIdentifier(when)
+ ensureIdentifier(when, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(!=)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(!=)
+ listener: handleSend(b, !=)
+ listener: beginBinaryExpression(!=)
+ parsePrecedenceExpression(!=, 8, true)
+ parseUnaryExpression(!=, true)
+ parsePrimary(!=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(!=)
+ parseParenthesizedExpressionOrRecordLiteral(!=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(2)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseLiteralInt(,)
+ listener: handleLiteralInt(3)
+ ensureCloseParen(3, ()
+ listener: endRecordLiteral((, 2, null)
+ listener: endBinaryExpression(!=)
+ listener: endSwitchCaseWhenClause())
+ ensureColon())
+ listener: endCaseExpression(case, when, :)
+ peekPastLabels(print)
+ parseStatementsInSwitchCase(:, print, case, 0, 1, null, null)
+ listener: beginSwitchCase(0, 1, case)
+ parseStatement(:)
+ parseStatementX(:)
+ parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(:)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ skipObjectPatternRest(print)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseSendOrFunctionLiteral(:, expression)
+ looksLikeFunctionBody(;)
+ parseSend(:, expression)
+ isNextIdentifier(:)
+ ensureIdentifier(:, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(b)
+ listener: handleNoArguments())
+ listener: handleSend(b, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ peekPastLabels(case)
+ listener: endSwitchCase(0, 1, null, null, 1, case, case)
+ notEofOrValue(}, case)
+ peekPastLabels(case)
+ listener: beginCaseExpression(case)
+ parsePattern(case, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(case, PatternContext.matching)
+ listener: handleNoTypeArguments(()
+ parseObjectPatternRest(Class, PatternContext.matching)
+ ensureIdentifier((, namedArgumentReference)
+ listener: handleIdentifier(field, namedArgumentReference)
+ parsePattern(:, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.matching)
+ parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(b)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, b, false)
+ listener: handlePatternField(:)
+ listener: handleObjectPatternFields(1, (, ))
+ listener: handleObjectPattern(Class, null, null)
+ listener: beginSwitchCaseWhenClause(when)
+ parseExpression(when)
+ looksLikeOuterPatternEquals(when)
+ skipOuterPattern(when)
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression(when, 1, true)
+ parseUnaryExpression(when, true)
+ parsePrimary(when, expression)
+ parseSendOrFunctionLiteral(when, expression)
+ parseSend(when, expression)
+ isNextIdentifier(when)
+ ensureIdentifier(when, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(!=)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(!=)
+ listener: handleSend(b, !=)
+ listener: beginBinaryExpression(!=)
+ parsePrecedenceExpression(!=, 8, true)
+ parseUnaryExpression(!=, true)
+ parsePrimary(!=, expression)
+ parseLiteralInt(!=)
+ listener: handleLiteralInt(2)
+ listener: endBinaryExpression(!=)
+ listener: endSwitchCaseWhenClause(2)
+ ensureColon(2)
+ listener: endCaseExpression(case, when, :)
+ peekPastLabels(print)
+ parseStatementsInSwitchCase(:, print, case, 0, 1, null, null)
+ listener: beginSwitchCase(0, 1, case)
+ parseStatement(:)
+ parseStatementX(:)
+ parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(:)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ skipObjectPatternRest(print)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseSendOrFunctionLiteral(:, expression)
+ looksLikeFunctionBody(;)
+ parseSend(:, expression)
+ isNextIdentifier(:)
+ ensureIdentifier(:, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(b)
+ listener: handleNoArguments())
+ listener: handleSend(b, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ peekPastLabels(case)
+ listener: endSwitchCase(0, 1, null, null, 1, case, case)
+ notEofOrValue(}, case)
+ peekPastLabels(case)
+ listener: beginCaseExpression(case)
+ parsePattern(case, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(case, PatternContext.matching)
+ listener: handleNoTypeArguments(()
+ parseObjectPatternRest(Class, PatternContext.matching)
+ ensureIdentifier((, namedArgumentReference)
+ listener: handleIdentifier(field, namedArgumentReference)
+ parsePattern(:, PatternContext.matching, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.matching)
+ parseVariablePattern(:, PatternContext.matching, typeInfo: Instance of 'ComplexTypeInfo')
+ parseRecordType((, :, false)
+ listener: beginRecordType(()
+ parseRecordTypeField((, identifierIsOptional: true)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar(()
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(,)
+ listener: handleType(int, null)
+ listener: handleNoName(,)
+ listener: endRecordTypeEntry()
+ parseRecordTypeField(,, identifierIsOptional: true)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar(,)
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments())
+ listener: handleType(int, null)
+ listener: handleNoName())
+ listener: endRecordTypeEntry()
+ listener: endRecordType((, null, 2, false)
+ listener: handleVariablePattern(null, b, false)
+ listener: handlePatternField(:)
+ listener: handleObjectPatternFields(1, (, ))
+ listener: handleObjectPattern(Class, null, null)
+ listener: beginSwitchCaseWhenClause(when)
+ parseExpression(when)
+ looksLikeOuterPatternEquals(when)
+ skipOuterPattern(when)
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression(when, 1, true)
+ parseUnaryExpression(when, true)
+ parsePrimary(when, expression)
+ parseSendOrFunctionLiteral(when, expression)
+ parseSend(when, expression)
+ isNextIdentifier(when)
+ ensureIdentifier(when, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments(!=)
+ parseArgumentsOpt(b)
+ listener: handleNoArguments(!=)
+ listener: handleSend(b, !=)
+ listener: beginBinaryExpression(!=)
+ parsePrecedenceExpression(!=, 8, true)
+ parseUnaryExpression(!=, true)
+ parsePrimary(!=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(!=)
+ parseParenthesizedExpressionOrRecordLiteral(!=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseLiteralInt(()
+ listener: handleLiteralInt(2)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseLiteralInt(,)
+ listener: handleLiteralInt(3)
+ ensureCloseParen(3, ()
+ listener: endRecordLiteral((, 2, null)
+ listener: endBinaryExpression(!=)
+ listener: endSwitchCaseWhenClause())
+ ensureColon())
+ listener: endCaseExpression(case, when, :)
+ peekPastLabels(print)
+ parseStatementsInSwitchCase(:, print, case, 0, 1, null, null)
+ listener: beginSwitchCase(0, 1, case)
+ parseStatement(:)
+ parseStatementX(:)
+ parseExpressionStatementOrDeclarationAfterModifiers(:, :, null, null, null, null)
+ looksLikeLocalFunction(print)
+ parseExpressionStatement(:)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ skipObjectPatternRest(print)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseSendOrFunctionLiteral(:, expression)
+ looksLikeFunctionBody(;)
+ parseSend(:, expression)
+ isNextIdentifier(:)
+ ensureIdentifier(:, expression)
+ listener: handleIdentifier(print, expression)
+ listener: handleNoTypeArguments(()
+ parseArgumentsOpt(print)
+ parseArguments(print)
+ parseArgumentsRest(()
+ listener: beginArguments(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ skipObjectPatternRest(b)
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseSendOrFunctionLiteral((, expression)
+ parseSend((, expression)
+ isNextIdentifier(()
+ ensureIdentifier((, expression)
+ listener: handleIdentifier(b, expression)
+ listener: handleNoTypeArguments())
+ parseArgumentsOpt(b)
+ listener: handleNoArguments())
+ listener: handleSend(b, ))
+ listener: endArguments(1, (, ))
+ listener: handleSend(print, ;)
+ ensureSemicolon())
+ listener: handleExpressionStatement(;)
+ peekPastLabels(})
+ listener: endSwitchCase(0, 1, null, null, 1, case, })
+ notEofOrValue(}, })
+ listener: endSwitchBlock(4, {, })
+ listener: endSwitchStatement(switch, })
+ notEofOrValue(}, })
+ listener: endBlockFunctionBody(1, {, })
+ listener: endTopLevelMethod(test, null, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(class)
+ listener: endCompilationUnit(2, )
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.parser.expect b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.parser.expect
new file mode 100644
index 0000000..bc3e020
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.parser.expect
@@ -0,0 +1,37 @@
+class Class {
+dynamic field;
+Class(this.field);
+}
+
+test(a) {
+switch (a) {
+case (foo: int b) when b != 2:
+print(b);
+case (foo: (int, int) b) when b != (2, 3):
+print(b);
+case Class(field: int b) when b != 2:
+print(b);
+case Class(field: (int, int) b) when b != (2, 3):
+print(b);
+}
+}
+
+
+class[KeywordToken] Class[StringToken] {[BeginToken]
+dynamic[KeywordToken] field[StringToken];[SimpleToken]
+Class[StringToken]([BeginToken]this[KeywordToken].[SimpleToken]field[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken] ([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] int[StringToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] int[StringToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51169.dart.scanner.expect b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.scanner.expect
new file mode 100644
index 0000000..bc3e020
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51169.dart.scanner.expect
@@ -0,0 +1,37 @@
+class Class {
+dynamic field;
+Class(this.field);
+}
+
+test(a) {
+switch (a) {
+case (foo: int b) when b != 2:
+print(b);
+case (foo: (int, int) b) when b != (2, 3):
+print(b);
+case Class(field: int b) when b != 2:
+print(b);
+case Class(field: (int, int) b) when b != (2, 3):
+print(b);
+}
+}
+
+
+class[KeywordToken] Class[StringToken] {[BeginToken]
+dynamic[KeywordToken] field[StringToken];[SimpleToken]
+Class[StringToken]([BeginToken]this[KeywordToken].[SimpleToken]field[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+
+test[StringToken]([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+switch[KeywordToken] ([BeginToken]a[StringToken])[SimpleToken] {[BeginToken]
+case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] int[StringToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+case[KeywordToken] ([BeginToken]foo[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] int[StringToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] 2[StringToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+case[KeywordToken] Class[StringToken]([BeginToken]field[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] int[StringToken])[SimpleToken] b[StringToken])[SimpleToken] when[KeywordToken] b[StringToken] !=[SimpleToken] ([BeginToken]2[StringToken],[SimpleToken] 3[StringToken])[SimpleToken]:[SimpleToken]
+print[StringToken]([BeginToken]b[StringToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51176.dart b/pkg/front_end/parser_testcases/patterns/issue_51176.dart
new file mode 100644
index 0000000..f34ab34
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51176.dart
@@ -0,0 +1,17 @@
+main() {
+ var ((a1,),) = ((-1,),);
+ var (n: (x: a2)) = (n: (x: 42));
+ var (n: (x: a3, b3), (y: c3, d3)) = (n: (x: 42, -1), (y: 1, 0));
+
+ final ((a4,),) = ((-1,),);
+ final (n: (x: a5)) = (n: (x: 42));
+ final (n: (x: a6, b6), (y: c6, d6)) = (n: (x: 42, -1), (y: 1, 0));
+
+ var ((int a7,),) = ((-1,),);
+ var (n: (x: int a8)) = (n: (x: 42));
+ var (n: (x: int a9, int b9), (y: int c9, int d9))
+ = (n: (x: 42, -1), (y: 1, 0));
+
+ var (n: (int, {int x}) a10, (int z, {int y}) b10)
+ = (n: (x: 42, -1), (y: 1, 0));
+}
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51176.dart.expect b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.expect
new file mode 100644
index 0000000..e121ec1
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.expect
@@ -0,0 +1,319 @@
+beginCompilationUnit(main)
+ beginMetadataStar(main)
+ endMetadataStar(0)
+ beginTopLevelMember(main)
+ beginTopLevelMethod(, null, null)
+ handleNoType()
+ handleIdentifier(main, topLevelFunctionDeclaration)
+ handleNoTypeVariables(()
+ beginFormalParameters((, MemberKind.TopLevelMethod)
+ endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ handleAsyncModifier(null, null)
+ beginBlockFunctionBody({)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleNoType(()
+ handleVariablePattern(null, a1, false)
+ handlePatternField(null)
+ handleRecordPattern((, 1)
+ handlePatternField(null)
+ handleRecordPattern((, 1)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 1, null)
+ endRecordLiteral((, 1, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ handleIdentifier(x, namedRecordFieldReference)
+ handleNoType(:)
+ handleVariablePattern(null, a2, false)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ endRecordLiteral((, 1, null)
+ handleNamedRecordField(:)
+ endRecordLiteral((, 1, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ handleIdentifier(x, namedRecordFieldReference)
+ handleNoType(:)
+ handleVariablePattern(null, a3, false)
+ handlePatternField(:)
+ handleNoType(,)
+ handleVariablePattern(null, b3, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ handlePatternField(:)
+ handleIdentifier(y, namedRecordFieldReference)
+ handleNoType(:)
+ handleVariablePattern(null, c3, false)
+ handlePatternField(:)
+ handleNoType(,)
+ handleVariablePattern(null, d3, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 2, null)
+ handleNamedRecordField(:)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(y, namedRecordFieldReference)
+ handleLiteralInt(1)
+ handleNamedRecordField(:)
+ handleLiteralInt(0)
+ endRecordLiteral((, 2, null)
+ endRecordLiteral((, 2, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ beginMetadataStar(final)
+ endMetadataStar(0)
+ handleNoType(()
+ handleVariablePattern(null, a4, false)
+ handlePatternField(null)
+ handleRecordPattern((, 1)
+ handlePatternField(null)
+ handleRecordPattern((, 1)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 1, null)
+ endRecordLiteral((, 1, null)
+ handlePatternVariableDeclarationStatement(final, =, ;)
+ beginMetadataStar(final)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ handleIdentifier(x, namedRecordFieldReference)
+ handleNoType(:)
+ handleVariablePattern(null, a5, false)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ endRecordLiteral((, 1, null)
+ handleNamedRecordField(:)
+ endRecordLiteral((, 1, null)
+ handlePatternVariableDeclarationStatement(final, =, ;)
+ beginMetadataStar(final)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ handleIdentifier(x, namedRecordFieldReference)
+ handleNoType(:)
+ handleVariablePattern(null, a6, false)
+ handlePatternField(:)
+ handleNoType(,)
+ handleVariablePattern(null, b6, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ handlePatternField(:)
+ handleIdentifier(y, namedRecordFieldReference)
+ handleNoType(:)
+ handleVariablePattern(null, c6, false)
+ handlePatternField(:)
+ handleNoType(,)
+ handleVariablePattern(null, d6, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 2, null)
+ handleNamedRecordField(:)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(y, namedRecordFieldReference)
+ handleLiteralInt(1)
+ handleNamedRecordField(:)
+ handleLiteralInt(0)
+ endRecordLiteral((, 2, null)
+ endRecordLiteral((, 2, null)
+ handlePatternVariableDeclarationStatement(final, =, ;)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(a7)
+ handleType(int, null)
+ handleVariablePattern(null, a7, false)
+ handlePatternField(null)
+ handleRecordPattern((, 1)
+ handlePatternField(null)
+ handleRecordPattern((, 1)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 1, null)
+ endRecordLiteral((, 1, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ handleIdentifier(x, namedRecordFieldReference)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(a8)
+ handleType(int, null)
+ handleVariablePattern(null, a8, false)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ handlePatternField(:)
+ handleRecordPattern((, 1)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ endRecordLiteral((, 1, null)
+ handleNamedRecordField(:)
+ endRecordLiteral((, 1, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ handleIdentifier(x, namedRecordFieldReference)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(a9)
+ handleType(int, null)
+ handleVariablePattern(null, a9, false)
+ handlePatternField(:)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(b9)
+ handleType(int, null)
+ handleVariablePattern(null, b9, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ handlePatternField(:)
+ handleIdentifier(y, namedRecordFieldReference)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(c9)
+ handleType(int, null)
+ handleVariablePattern(null, c9, false)
+ handlePatternField(:)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(d9)
+ handleType(int, null)
+ handleVariablePattern(null, d9, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 2, null)
+ handleNamedRecordField(:)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(y, namedRecordFieldReference)
+ handleLiteralInt(1)
+ handleNamedRecordField(:)
+ handleLiteralInt(0)
+ endRecordLiteral((, 2, null)
+ endRecordLiteral((, 2, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ beginMetadataStar(var)
+ endMetadataStar(0)
+ handleIdentifier(n, namedRecordFieldReference)
+ beginRecordType(()
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(,)
+ handleType(int, null)
+ handleNoName(,)
+ endRecordTypeEntry()
+ beginRecordTypeNamedFields({)
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(x)
+ handleType(int, null)
+ handleIdentifier(x, recordFieldDeclaration)
+ endRecordTypeEntry()
+ endRecordTypeNamedFields(1, {)
+ endRecordType((, null, 2, true)
+ handleVariablePattern(null, a10, false)
+ handlePatternField(:)
+ beginRecordType(()
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(z)
+ handleType(int, null)
+ handleIdentifier(z, recordFieldDeclaration)
+ endRecordTypeEntry()
+ beginRecordTypeNamedFields({)
+ beginRecordTypeEntry()
+ beginMetadataStar(int)
+ endMetadataStar(0)
+ handleIdentifier(int, typeReference)
+ handleNoTypeArguments(y)
+ handleType(int, null)
+ handleIdentifier(y, recordFieldDeclaration)
+ endRecordTypeEntry()
+ endRecordTypeNamedFields(1, {)
+ endRecordType((, null, 2, true)
+ handleVariablePattern(null, b10, false)
+ handlePatternField(null)
+ handleRecordPattern((, 2)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(n, namedRecordFieldReference)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(x, namedRecordFieldReference)
+ handleLiteralInt(42)
+ handleNamedRecordField(:)
+ handleLiteralInt(1)
+ handleUnaryPrefixExpression(-)
+ endRecordLiteral((, 2, null)
+ handleNamedRecordField(:)
+ beginParenthesizedExpressionOrRecordLiteral(()
+ handleIdentifier(y, namedRecordFieldReference)
+ handleLiteralInt(1)
+ handleNamedRecordField(:)
+ handleLiteralInt(0)
+ endRecordLiteral((, 2, null)
+ endRecordLiteral((, 2, null)
+ handlePatternVariableDeclarationStatement(var, =, ;)
+ endBlockFunctionBody(10, {, })
+ endTopLevelMethod(main, null, })
+ endTopLevelDeclaration()
+endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51176.dart.intertwined.expect b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.intertwined.expect
new file mode 100644
index 0000000..5ca47cf
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.intertwined.expect
@@ -0,0 +1,990 @@
+parseUnit(main)
+ skipErrorTokens(main)
+ listener: beginCompilationUnit(main)
+ syntheticPreviousToken(main)
+ parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
+ parseMetadataStar()
+ listener: beginMetadataStar(main)
+ listener: endMetadataStar(0)
+ parseTopLevelMemberImpl()
+ listener: beginTopLevelMember(main)
+ isReservedKeyword(()
+ parseTopLevelMethod(, null, null, , Instance of 'NoType', null, main, false)
+ listener: beginTopLevelMethod(, null, null)
+ listener: handleNoType()
+ ensureIdentifierPotentiallyRecovered(, topLevelFunctionDeclaration, false)
+ listener: handleIdentifier(main, topLevelFunctionDeclaration)
+ parseMethodTypeVar(main)
+ listener: handleNoTypeVariables(()
+ parseGetterOrFormalParameters(main, main, false, MemberKind.TopLevelMethod)
+ parseFormalParameters(main, MemberKind.TopLevelMethod)
+ parseFormalParametersRest((, MemberKind.TopLevelMethod)
+ listener: beginFormalParameters((, MemberKind.TopLevelMethod)
+ listener: endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
+ parseAsyncModifierOpt())
+ listener: handleAsyncModifier(null, null)
+ inPlainSync()
+ parseFunctionBody(), false, false)
+ listener: beginBlockFunctionBody({)
+ notEofOrValue(}, var)
+ parseStatement({)
+ parseStatementX({)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, {, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, {, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ parsePattern((, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern((, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern((, PatternContext.declaration)
+ parsePattern((, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern((, PatternContext.declaration)
+ parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(()
+ listener: handleVariablePattern(null, a1, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(,, ()
+ listener: handleRecordPattern((, 1)
+ listener: handlePatternField(null)
+ ensureCloseParen(,, ()
+ listener: handleRecordPattern((, 1)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(()
+ parseParenthesizedExpressionOrRecordLiteral((, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(,, ()
+ listener: endRecordLiteral((, 1, null)
+ ensureCloseParen(,, ()
+ listener: endRecordLiteral((, 1, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, var)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, ;, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(:, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(:)
+ listener: handleVariablePattern(null, a2, false)
+ listener: handlePatternField(:)
+ ensureCloseParen(a2, ()
+ listener: handleRecordPattern((, 1)
+ listener: handlePatternField(:)
+ ensureCloseParen(), ()
+ listener: handleRecordPattern((, 1)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ ensureCloseParen(42, ()
+ listener: endRecordLiteral((, 1, null)
+ listener: handleNamedRecordField(:)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 1, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, var)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, ;, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(:, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(:)
+ listener: handleVariablePattern(null, a3, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(,)
+ listener: handleVariablePattern(null, b3, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(b3, ()
+ listener: handleRecordPattern((, 2)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(,, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(:)
+ listener: handleVariablePattern(null, c3, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(,)
+ listener: handleVariablePattern(null, d3, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(d3, ()
+ listener: handleRecordPattern((, 2)
+ listener: handlePatternField(null)
+ ensureCloseParen(), ()
+ listener: handleRecordPattern((, 2)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(1, ()
+ listener: endRecordLiteral((, 2, null)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(,)
+ parseParenthesizedExpressionOrRecordLiteral(,, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(1)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseLiteralInt(,)
+ listener: handleLiteralInt(0)
+ ensureCloseParen(0, ()
+ listener: endRecordLiteral((, 2, null)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 2, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, final)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, null)
+ skipOuterPattern(final)
+ listener: beginMetadataStar(final)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(final, ;, final)
+ parsePattern(final, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(final, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(final, PatternContext.declaration)
+ parsePattern((, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern((, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern((, PatternContext.declaration)
+ parsePattern((, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern((, PatternContext.declaration)
+ parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(()
+ listener: handleVariablePattern(null, a4, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(,, ()
+ listener: handleRecordPattern((, 1)
+ listener: handlePatternField(null)
+ ensureCloseParen(,, ()
+ listener: handleRecordPattern((, 1)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(()
+ parseParenthesizedExpressionOrRecordLiteral((, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(,, ()
+ listener: endRecordLiteral((, 1, null)
+ ensureCloseParen(,, ()
+ listener: endRecordLiteral((, 1, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(final, =, ;)
+ notEofOrValue(}, final)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, null)
+ skipOuterPattern(final)
+ listener: beginMetadataStar(final)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(final, ;, final)
+ parsePattern(final, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(final, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(final, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(:, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(:)
+ listener: handleVariablePattern(null, a5, false)
+ listener: handlePatternField(:)
+ ensureCloseParen(a5, ()
+ listener: handleRecordPattern((, 1)
+ listener: handlePatternField(:)
+ ensureCloseParen(), ()
+ listener: handleRecordPattern((, 1)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ ensureCloseParen(42, ()
+ listener: endRecordLiteral((, 1, null)
+ listener: handleNamedRecordField(:)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 1, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(final, =, ;)
+ notEofOrValue(}, final)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(final, ;, null, final, null, null)
+ skipOuterPattern(final)
+ listener: beginMetadataStar(final)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(final, ;, final)
+ parsePattern(final, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(final, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(final, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(:, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(:)
+ listener: handleVariablePattern(null, a6, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(,)
+ listener: handleVariablePattern(null, b6, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(b6, ()
+ listener: handleRecordPattern((, 2)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(,, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(:)
+ listener: handleVariablePattern(null, c6, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'NoType')
+ listener: handleNoType(,)
+ listener: handleVariablePattern(null, d6, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(d6, ()
+ listener: handleRecordPattern((, 2)
+ listener: handlePatternField(null)
+ ensureCloseParen(), ()
+ listener: handleRecordPattern((, 2)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(1, ()
+ listener: endRecordLiteral((, 2, null)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(,)
+ parseParenthesizedExpressionOrRecordLiteral(,, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(1)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseLiteralInt(,)
+ listener: handleLiteralInt(0)
+ ensureCloseParen(0, ()
+ listener: endRecordLiteral((, 2, null)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 2, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(final, =, ;)
+ notEofOrValue(}, var)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, ;, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ parsePattern((, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern((, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern((, PatternContext.declaration)
+ parsePattern((, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern((, PatternContext.declaration)
+ parseVariablePattern((, PatternContext.declaration, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(a7)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, a7, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(,, ()
+ listener: handleRecordPattern((, 1)
+ listener: handlePatternField(null)
+ ensureCloseParen(,, ()
+ listener: handleRecordPattern((, 1)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrimary((, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(()
+ parseParenthesizedExpressionOrRecordLiteral((, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ parseExpression(()
+ looksLikeOuterPatternEquals(()
+ skipOuterPattern(()
+ parsePrecedenceExpression((, 1, true)
+ parseUnaryExpression((, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(,, ()
+ listener: endRecordLiteral((, 1, null)
+ ensureCloseParen(,, ()
+ listener: endRecordLiteral((, 1, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, var)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, ;, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(:, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(a8)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, a8, false)
+ listener: handlePatternField(:)
+ ensureCloseParen(a8, ()
+ listener: handleRecordPattern((, 1)
+ listener: handlePatternField(:)
+ ensureCloseParen(), ()
+ listener: handleRecordPattern((, 1)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ ensureCloseParen(42, ()
+ listener: endRecordLiteral((, 1, null)
+ listener: handleNamedRecordField(:)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 1, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, var)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, ;, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(:, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(a9)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, a9, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(b9)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, b9, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(b9, ()
+ listener: handleRecordPattern((, 2)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(,, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(c9)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, c9, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'SimpleType')
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(d9)
+ listener: handleType(int, null)
+ listener: handleVariablePattern(null, d9, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(d9, ()
+ listener: handleRecordPattern((, 2)
+ listener: handlePatternField(null)
+ ensureCloseParen(), ()
+ listener: handleRecordPattern((, 2)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(1, ()
+ listener: endRecordLiteral((, 2, null)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(,)
+ parseParenthesizedExpressionOrRecordLiteral(,, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(1)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseLiteralInt(,)
+ listener: handleLiteralInt(0)
+ ensureCloseParen(0, ()
+ listener: endRecordLiteral((, 2, null)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 2, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, var)
+ parseStatement(;)
+ parseStatementX(;)
+ parseExpressionStatementOrDeclarationAfterModifiers(var, ;, null, var, null, null)
+ skipOuterPattern(var)
+ listener: beginMetadataStar(var)
+ listener: endMetadataStar(0)
+ parsePatternVariableDeclarationStatement(var, ;, var)
+ parsePattern(var, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(var, PatternContext.declaration)
+ parseParenthesizedPatternOrRecordPattern(var, PatternContext.declaration)
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parsePattern(:, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(:, PatternContext.declaration)
+ parseVariablePattern(:, PatternContext.declaration, typeInfo: Instance of 'ComplexTypeInfo')
+ parseRecordType((, :, false)
+ listener: beginRecordType(()
+ parseRecordTypeField((, identifierIsOptional: true)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar(()
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(,)
+ listener: handleType(int, null)
+ listener: handleNoName(,)
+ listener: endRecordTypeEntry()
+ parseRecordTypeNamedFields(,)
+ listener: beginRecordTypeNamedFields({)
+ parseRecordTypeField({, identifierIsOptional: false)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar({)
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(x)
+ listener: handleType(int, null)
+ ensureIdentifier(int, recordFieldDeclaration)
+ listener: handleIdentifier(x, recordFieldDeclaration)
+ listener: endRecordTypeEntry()
+ listener: endRecordTypeNamedFields(1, {)
+ ensureCloseParen(}, ()
+ listener: endRecordType((, null, 2, true)
+ listener: handleVariablePattern(null, a10, false)
+ listener: handlePatternField(:)
+ parsePattern(,, PatternContext.declaration, precedence: 1)
+ parsePrimaryPattern(,, PatternContext.declaration)
+ parseVariablePattern(,, PatternContext.declaration, typeInfo: Instance of 'ComplexTypeInfo')
+ parseRecordType((, ,, false)
+ listener: beginRecordType(()
+ parseRecordTypeField((, identifierIsOptional: true)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar(()
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(z)
+ listener: handleType(int, null)
+ ensureIdentifier(int, recordFieldDeclaration)
+ listener: handleIdentifier(z, recordFieldDeclaration)
+ listener: endRecordTypeEntry()
+ parseRecordTypeNamedFields(,)
+ listener: beginRecordTypeNamedFields({)
+ parseRecordTypeField({, identifierIsOptional: false)
+ listener: beginRecordTypeEntry()
+ parseMetadataStar({)
+ listener: beginMetadataStar(int)
+ listener: endMetadataStar(0)
+ listener: handleIdentifier(int, typeReference)
+ listener: handleNoTypeArguments(y)
+ listener: handleType(int, null)
+ ensureIdentifier(int, recordFieldDeclaration)
+ listener: handleIdentifier(y, recordFieldDeclaration)
+ listener: endRecordTypeEntry()
+ listener: endRecordTypeNamedFields(1, {)
+ ensureCloseParen(}, ()
+ listener: endRecordType((, null, 2, true)
+ listener: handleVariablePattern(null, b10, false)
+ listener: handlePatternField(null)
+ ensureCloseParen(b10, ()
+ listener: handleRecordPattern((, 2)
+ parseExpression(=)
+ looksLikeOuterPatternEquals(=)
+ skipOuterPattern(=)
+ parsePrecedenceExpression(=, 1, true)
+ parseUnaryExpression(=, true)
+ parsePrimary(=, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(=)
+ parseParenthesizedExpressionOrRecordLiteral(=, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(n, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(:)
+ parseParenthesizedExpressionOrRecordLiteral(:, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(x, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(42)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrecedenceExpression(-, 16, true)
+ parseUnaryExpression(-, true)
+ parsePrimary(-, expression)
+ parseLiteralInt(-)
+ listener: handleLiteralInt(1)
+ listener: handleUnaryPrefixExpression(-)
+ ensureCloseParen(1, ()
+ listener: endRecordLiteral((, 2, null)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseParenthesizedExpressionFunctionLiteralOrRecordLiteral(,)
+ parseParenthesizedExpressionOrRecordLiteral(,, null)
+ listener: beginParenthesizedExpressionOrRecordLiteral(()
+ ensureIdentifier((, namedRecordFieldReference)
+ listener: handleIdentifier(y, namedRecordFieldReference)
+ parseExpression(:)
+ looksLikeOuterPatternEquals(:)
+ skipOuterPattern(:)
+ parsePrecedenceExpression(:, 1, true)
+ parseUnaryExpression(:, true)
+ parsePrimary(:, expression)
+ parseLiteralInt(:)
+ listener: handleLiteralInt(1)
+ listener: handleNamedRecordField(:)
+ parseExpression(,)
+ looksLikeOuterPatternEquals(,)
+ skipOuterPattern(,)
+ parsePrecedenceExpression(,, 1, true)
+ parseUnaryExpression(,, true)
+ parsePrimary(,, expression)
+ parseLiteralInt(,)
+ listener: handleLiteralInt(0)
+ ensureCloseParen(0, ()
+ listener: endRecordLiteral((, 2, null)
+ ensureCloseParen(), ()
+ listener: endRecordLiteral((, 2, null)
+ ensureSemicolon())
+ listener: handlePatternVariableDeclarationStatement(var, =, ;)
+ notEofOrValue(}, })
+ listener: endBlockFunctionBody(10, {, })
+ listener: endTopLevelMethod(main, null, })
+ listener: endTopLevelDeclaration()
+ reportAllErrorTokens(main)
+ listener: endCompilationUnit(1, )
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51176.dart.parser.expect b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.parser.expect
new file mode 100644
index 0000000..ce2b87a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.parser.expect
@@ -0,0 +1,37 @@
+main() {
+var ((a1,),) = ((-1,),);
+var (n: (x: a2)) = (n: (x: 42));
+var (n: (x: a3, b3), (y: c3, d3)) = (n: (x: 42, -1), (y: 1, 0));
+
+final ((a4,),) = ((-1,),);
+final (n: (x: a5)) = (n: (x: 42));
+final (n: (x: a6, b6), (y: c6, d6)) = (n: (x: 42, -1), (y: 1, 0));
+
+var ((int a7,),) = ((-1,),);
+var (n: (x: int a8)) = (n: (x: 42));
+var (n: (x: int a9, int b9), (y: int c9, int d9))
+= (n: (x: 42, -1), (y: 1, 0));
+
+var (n: (int, {int x}) a10, (int z, {int y}) b10)
+= (n: (x: 42, -1), (y: 1, 0));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+var[KeywordToken] ([BeginToken]([BeginToken]a1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]([BeginToken]-[SimpleToken]1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a2[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a3[StringToken],[SimpleToken] b3[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] c3[StringToken],[SimpleToken] d3[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+final[KeywordToken] ([BeginToken]([BeginToken]a4[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]([BeginToken]-[SimpleToken]1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken];[SimpleToken]
+final[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a5[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+final[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a6[StringToken],[SimpleToken] b6[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] c6[StringToken],[SimpleToken] d6[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] ([BeginToken]([BeginToken]int[StringToken] a7[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]([BeginToken]-[SimpleToken]1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] int[StringToken] a8[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] int[StringToken] a9[StringToken],[SimpleToken] int[StringToken] b9[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] int[StringToken] c9[StringToken],[SimpleToken] int[StringToken] d9[StringToken])[SimpleToken])[SimpleToken]
+=[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] {[BeginToken]int[StringToken] x[StringToken]}[SimpleToken])[SimpleToken] a10[StringToken],[SimpleToken] ([BeginToken]int[StringToken] z[StringToken],[SimpleToken] {[BeginToken]int[StringToken] y[StringToken]}[SimpleToken])[SimpleToken] b10[StringToken])[SimpleToken]
+=[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]
diff --git a/pkg/front_end/parser_testcases/patterns/issue_51176.dart.scanner.expect b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.scanner.expect
new file mode 100644
index 0000000..ce2b87a
--- /dev/null
+++ b/pkg/front_end/parser_testcases/patterns/issue_51176.dart.scanner.expect
@@ -0,0 +1,37 @@
+main() {
+var ((a1,),) = ((-1,),);
+var (n: (x: a2)) = (n: (x: 42));
+var (n: (x: a3, b3), (y: c3, d3)) = (n: (x: 42, -1), (y: 1, 0));
+
+final ((a4,),) = ((-1,),);
+final (n: (x: a5)) = (n: (x: 42));
+final (n: (x: a6, b6), (y: c6, d6)) = (n: (x: 42, -1), (y: 1, 0));
+
+var ((int a7,),) = ((-1,),);
+var (n: (x: int a8)) = (n: (x: 42));
+var (n: (x: int a9, int b9), (y: int c9, int d9))
+= (n: (x: 42, -1), (y: 1, 0));
+
+var (n: (int, {int x}) a10, (int z, {int y}) b10)
+= (n: (x: 42, -1), (y: 1, 0));
+}
+
+
+main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
+var[KeywordToken] ([BeginToken]([BeginToken]a1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]([BeginToken]-[SimpleToken]1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a2[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a3[StringToken],[SimpleToken] b3[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] c3[StringToken],[SimpleToken] d3[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+final[KeywordToken] ([BeginToken]([BeginToken]a4[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]([BeginToken]-[SimpleToken]1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken];[SimpleToken]
+final[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a5[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+final[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] a6[StringToken],[SimpleToken] b6[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] c6[StringToken],[SimpleToken] d6[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] ([BeginToken]([BeginToken]int[StringToken] a7[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]([BeginToken]-[SimpleToken]1[StringToken],[SimpleToken])[SimpleToken],[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] int[StringToken] a8[StringToken])[SimpleToken])[SimpleToken] =[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] int[StringToken] a9[StringToken],[SimpleToken] int[StringToken] b9[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] int[StringToken] c9[StringToken],[SimpleToken] int[StringToken] d9[StringToken])[SimpleToken])[SimpleToken]
+=[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+
+var[KeywordToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]int[StringToken],[SimpleToken] {[BeginToken]int[StringToken] x[StringToken]}[SimpleToken])[SimpleToken] a10[StringToken],[SimpleToken] ([BeginToken]int[StringToken] z[StringToken],[SimpleToken] {[BeginToken]int[StringToken] y[StringToken]}[SimpleToken])[SimpleToken] b10[StringToken])[SimpleToken]
+=[SimpleToken] ([BeginToken]n[StringToken]:[SimpleToken] ([BeginToken]x[StringToken]:[SimpleToken] 42[StringToken],[SimpleToken] -[SimpleToken]1[StringToken])[SimpleToken],[SimpleToken] ([BeginToken]y[StringToken]:[SimpleToken] 1[StringToken],[SimpleToken] 0[StringToken])[SimpleToken])[SimpleToken];[SimpleToken]
+}[SimpleToken]
+[SimpleToken]