CFE parser test cases for metadata in for-in loops with patterns.

Bug: https://github.com/dart-lang/sdk/issues/50035
Change-Id: I336b391c9102e4e6dd3eabce1051763e3bc797d4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/273621
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
This commit is contained in:
Paul Berry 2022-12-05 14:56:41 +00:00 committed by Commit Queue
parent b0ca324b08
commit 7a3aa5c7f5
10 changed files with 360 additions and 0 deletions

View file

@ -0,0 +1 @@
void f(x) => [for (@annotation var (a, b) in x) 0];

View file

@ -0,0 +1,48 @@
beginCompilationUnit(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginTopLevelMethod(, null, null)
handleVoidKeyword(void)
handleIdentifier(f, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(x)
endMetadataStar(0)
beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
handleNoType(()
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
handleAsyncModifier(null, null)
handleNoTypeArguments([)
beginForControlFlow(null, for)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(annotation, metadataReference)
handleNoTypeArguments(var)
handleNoArguments(var)
endMetadata(@, null, var)
endMetadataStar(1)
handleNoType(()
handleVariablePattern(null, a)
handlePatternField(null)
handleNoType(,)
handleVariablePattern(null, b)
handlePatternField(null)
handleRecordPattern((, 2)
beginForInExpression(x)
handleIdentifier(x, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(x, ))
endForInExpression())
handleForInLoopParts(null, for, (, var, in)
handleLiteralInt(0)
endForInControlFlow(0)
handleLiteralList(1, [, null, ])
handleExpressionFunctionBody(=>, ;)
endTopLevelMethod(void, null, ;)
endTopLevelDeclaration()
endCompilationUnit(1, )

View file

@ -0,0 +1,117 @@
parseUnit(void)
skipErrorTokens(void)
listener: beginCompilationUnit(void)
syntheticPreviousToken(void)
parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
parseMetadataStar()
listener: beginMetadataStar(void)
listener: endMetadataStar(0)
parseTopLevelMemberImpl()
listener: beginTopLevelMember(void)
parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
listener: beginTopLevelMethod(, null, null)
listener: handleVoidKeyword(void)
ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
listener: handleIdentifier(f, topLevelFunctionDeclaration)
parseMethodTypeVar(f)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
parseFormalParameters(f, MemberKind.TopLevelMethod)
parseFormalParametersRest((, MemberKind.TopLevelMethod)
listener: beginFormalParameters((, MemberKind.TopLevelMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
listener: handleNoType(()
ensureIdentifier((, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
parseFunctionBody(), false, false)
parseExpressionFunctionBody(=>, false)
parseExpression(=>)
looksLikeOuterPatternEquals(=>)
skipOuterPattern(=>)
parsePrecedenceExpression(=>, 1, true)
parseUnaryExpression(=>, true)
parsePrimary(=>, expression)
listener: handleNoTypeArguments([)
parseLiteralListSuffix(=>, null)
listener: beginForControlFlow(null, for)
parseForLoopPartsStart(null, for, ForPartsContext(null))
parseExpressionStatementOrDeclaration((, ForPartsContext(null))
parseMetadataStar(()
listener: beginMetadataStar(@)
parseMetadata(()
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)
parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
skipOuterPattern(var)
parsePattern(var, precedence: 1, isRefutableContext: false)
parsePrimaryPattern(var, isRefutableContext: false)
parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
parsePattern((, precedence: 1, isRefutableContext: false)
parsePrimaryPattern((, isRefutableContext: false)
parseVariablePattern((, typeInfo: Instance of 'NoType')
listener: handleNoType(()
listener: handleVariablePattern(null, a)
listener: handlePatternField(null)
parsePattern(,, precedence: 1, isRefutableContext: false)
parsePrimaryPattern(,, isRefutableContext: false)
parseVariablePattern(,, typeInfo: Instance of 'NoType')
listener: handleNoType(,)
listener: handleVariablePattern(null, b)
listener: handlePatternField(null)
ensureCloseParen(b, ()
listener: handleRecordPattern((, 2)
parseForInLoopPartsRest(), null, for, var, null)
listener: beginForInExpression(x)
parseExpression(in)
looksLikeOuterPatternEquals(in)
skipOuterPattern(in)
skipObjectPatternRest(x)
parsePrecedenceExpression(in, 1, true)
parseUnaryExpression(in, true)
parsePrimary(in, expression)
parseSendOrFunctionLiteral(in, expression)
parseSend(in, expression)
isNextIdentifier(in)
ensureIdentifier(in, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments())
parseArgumentsOpt(x)
listener: handleNoArguments())
listener: handleSend(x, ))
ensureCloseParen(x, ()
listener: endForInExpression())
listener: handleForInLoopParts(null, for, (, var, in)
parseExpression())
looksLikeOuterPatternEquals())
skipOuterPattern())
parsePrecedenceExpression(), 1, true)
parseUnaryExpression(), true)
parsePrimary(), expression)
parseLiteralInt())
listener: handleLiteralInt(0)
listener: endForInControlFlow(0)
listener: handleLiteralList(1, [, null, ])
ensureSemicolon(])
listener: handleExpressionFunctionBody(=>, ;)
inGenerator()
listener: endTopLevelMethod(void, null, ;)
listener: endTopLevelDeclaration()
reportAllErrorTokens(void)
listener: endCompilationUnit(1, )

View file

@ -0,0 +1,5 @@
void f(x) => [for (@annotation var (a, b) in x) 0];
void[KeywordToken] f[StringToken]([BeginToken]x[StringToken])[SimpleToken] =>[SimpleToken] [[BeginToken]for[KeywordToken] ([BeginToken]@[SimpleToken]annotation[StringToken] var[KeywordToken] ([BeginToken]a[StringToken],[SimpleToken] b[StringToken])[SimpleToken] in[KeywordToken] x[StringToken])[SimpleToken] 0[StringToken]][SimpleToken];[SimpleToken]
[SimpleToken]

View file

@ -0,0 +1,5 @@
void f(x) => [for (@annotation var (a, b) in x) 0];
void[KeywordToken] f[StringToken]([BeginToken]x[StringToken])[SimpleToken] =>[SimpleToken] [[BeginToken]for[KeywordToken] ([BeginToken]@[SimpleToken]annotation[StringToken] var[KeywordToken] ([BeginToken]a[StringToken],[SimpleToken] b[StringToken])[SimpleToken] in[KeywordToken] x[StringToken])[SimpleToken] 0[StringToken]][SimpleToken];[SimpleToken]
[SimpleToken]

View file

@ -0,0 +1,3 @@
void f(x) {
for (@annotation var (a, b) in x) {}
}

View file

@ -0,0 +1,50 @@
beginCompilationUnit(void)
beginMetadataStar(void)
endMetadataStar(0)
beginTopLevelMember(void)
beginTopLevelMethod(, null, null)
handleVoidKeyword(void)
handleIdentifier(f, topLevelFunctionDeclaration)
handleNoTypeVariables(()
beginFormalParameters((, MemberKind.TopLevelMethod)
beginMetadataStar(x)
endMetadataStar(0)
beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
handleNoType(()
handleIdentifier(x, formalParameterDeclaration)
handleFormalParameterWithoutValue())
endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
handleAsyncModifier(null, null)
beginBlockFunctionBody({)
beginForStatement(for)
beginMetadataStar(@)
beginMetadata(@)
handleIdentifier(annotation, metadataReference)
handleNoTypeArguments(var)
handleNoArguments(var)
endMetadata(@, null, var)
endMetadataStar(1)
handleNoType(()
handleVariablePattern(null, a)
handlePatternField(null)
handleNoType(,)
handleVariablePattern(null, b)
handlePatternField(null)
handleRecordPattern((, 2)
beginForInExpression(x)
handleIdentifier(x, expression)
handleNoTypeArguments())
handleNoArguments())
handleSend(x, ))
endForInExpression())
handleForInLoopParts(null, for, (, var, in)
beginForInBody({)
beginBlock({, BlockKind(statement))
endBlock(0, {, }, BlockKind(statement))
endForInBody(})
endForIn(})
endBlockFunctionBody(1, {, })
endTopLevelMethod(void, null, })
endTopLevelDeclaration()
endCompilationUnit(1, )

View file

@ -0,0 +1,113 @@
parseUnit(void)
skipErrorTokens(void)
listener: beginCompilationUnit(void)
syntheticPreviousToken(void)
parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
parseMetadataStar()
listener: beginMetadataStar(void)
listener: endMetadataStar(0)
parseTopLevelMemberImpl()
listener: beginTopLevelMember(void)
parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
listener: beginTopLevelMethod(, null, null)
listener: handleVoidKeyword(void)
ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
listener: handleIdentifier(f, topLevelFunctionDeclaration)
parseMethodTypeVar(f)
listener: handleNoTypeVariables(()
parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
parseFormalParameters(f, MemberKind.TopLevelMethod)
parseFormalParametersRest((, MemberKind.TopLevelMethod)
listener: beginFormalParameters((, MemberKind.TopLevelMethod)
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
parseMetadataStar(()
listener: beginMetadataStar(x)
listener: endMetadataStar(0)
listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
listener: handleNoType(()
ensureIdentifier((, formalParameterDeclaration)
listener: handleIdentifier(x, formalParameterDeclaration)
listener: handleFormalParameterWithoutValue())
listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
parseAsyncModifierOpt())
listener: handleAsyncModifier(null, null)
inPlainSync()
parseFunctionBody(), false, false)
listener: beginBlockFunctionBody({)
notEofOrValue(}, for)
parseStatement({)
parseStatementX({)
parseForStatement({, null)
listener: beginForStatement(for)
parseForLoopPartsStart(null, for, ForPartsContext(null))
parseExpressionStatementOrDeclaration((, ForPartsContext(null))
parseMetadataStar(()
listener: beginMetadataStar(@)
parseMetadata(()
listener: beginMetadata(@)
ensureIdentifier(@, metadataReference)
listener: handleIdentifier(annotation, metadataReference)
parseQualifiedRestOpt(annotation, metadataContinuation)
listener: handleNoTypeArguments(var)
parseArgumentsOpt(annotation)
listener: handleNoArguments(var)
listener: endMetadata(@, null, var)
listener: endMetadataStar(1)
parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
skipOuterPattern(var)
parsePattern(var, precedence: 1, isRefutableContext: false)
parsePrimaryPattern(var, isRefutableContext: false)
parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
parsePattern((, precedence: 1, isRefutableContext: false)
parsePrimaryPattern((, isRefutableContext: false)
parseVariablePattern((, typeInfo: Instance of 'NoType')
listener: handleNoType(()
listener: handleVariablePattern(null, a)
listener: handlePatternField(null)
parsePattern(,, precedence: 1, isRefutableContext: false)
parsePrimaryPattern(,, isRefutableContext: false)
parseVariablePattern(,, typeInfo: Instance of 'NoType')
listener: handleNoType(,)
listener: handleVariablePattern(null, b)
listener: handlePatternField(null)
ensureCloseParen(b, ()
listener: handleRecordPattern((, 2)
parseForInRest(), null, for, var, null)
parseForInLoopPartsRest(), null, for, var, null)
listener: beginForInExpression(x)
parseExpression(in)
looksLikeOuterPatternEquals(in)
skipOuterPattern(in)
skipObjectPatternRest(x)
parsePrecedenceExpression(in, 1, true)
parseUnaryExpression(in, true)
parsePrimary(in, expression)
parseSendOrFunctionLiteral(in, expression)
parseSend(in, expression)
isNextIdentifier(in)
ensureIdentifier(in, expression)
listener: handleIdentifier(x, expression)
listener: handleNoTypeArguments())
parseArgumentsOpt(x)
listener: handleNoArguments())
listener: handleSend(x, ))
ensureCloseParen(x, ()
listener: endForInExpression())
listener: handleForInLoopParts(null, for, (, var, in)
listener: beginForInBody({)
parseStatement())
parseStatementX())
parseBlock(), BlockKind(statement))
ensureBlock(), null, null)
listener: beginBlock({, BlockKind(statement))
notEofOrValue(}, })
listener: endBlock(0, {, }, BlockKind(statement))
listener: endForInBody(})
listener: endForIn(})
notEofOrValue(}, })
listener: endBlockFunctionBody(1, {, })
listener: endTopLevelMethod(void, null, })
listener: endTopLevelDeclaration()
reportAllErrorTokens(void)
listener: endCompilationUnit(1, )

View file

@ -0,0 +1,9 @@
void f(x) {
for (@annotation var (a, b) in x) {}
}
void[KeywordToken] f[StringToken]([BeginToken]x[StringToken])[SimpleToken] {[BeginToken]
for[KeywordToken] ([BeginToken]@[SimpleToken]annotation[StringToken] var[KeywordToken] ([BeginToken]a[StringToken],[SimpleToken] b[StringToken])[SimpleToken] in[KeywordToken] x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
[SimpleToken]

View file

@ -0,0 +1,9 @@
void f(x) {
for (@annotation var (a, b) in x) {}
}
void[KeywordToken] f[StringToken]([BeginToken]x[StringToken])[SimpleToken] {[BeginToken]
for[KeywordToken] ([BeginToken]@[SimpleToken]annotation[StringToken] var[KeywordToken] ([BeginToken]a[StringToken],[SimpleToken] b[StringToken])[SimpleToken] in[KeywordToken] x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
}[SimpleToken]
[SimpleToken]