Skip to content

Commit 7a3aa5c

Browse files
stereotype441Commit Queue
authored and
Commit Queue
committed
CFE parser test cases for metadata in for-in loops with patterns.
Bug: #50035 Change-Id: I336b391c9102e4e6dd3eabce1051763e3bc797d4 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/273621 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Paul Berry <[email protected]>
1 parent b0ca324 commit 7a3aa5c

10 files changed

+360
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
void f(x) => [for (@annotation var (a, b) in x) 0];
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
beginCompilationUnit(void)
2+
beginMetadataStar(void)
3+
endMetadataStar(0)
4+
beginTopLevelMember(void)
5+
beginTopLevelMethod(, null, null)
6+
handleVoidKeyword(void)
7+
handleIdentifier(f, topLevelFunctionDeclaration)
8+
handleNoTypeVariables(()
9+
beginFormalParameters((, MemberKind.TopLevelMethod)
10+
beginMetadataStar(x)
11+
endMetadataStar(0)
12+
beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
13+
handleNoType(()
14+
handleIdentifier(x, formalParameterDeclaration)
15+
handleFormalParameterWithoutValue())
16+
endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
17+
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
18+
handleAsyncModifier(null, null)
19+
handleNoTypeArguments([)
20+
beginForControlFlow(null, for)
21+
beginMetadataStar(@)
22+
beginMetadata(@)
23+
handleIdentifier(annotation, metadataReference)
24+
handleNoTypeArguments(var)
25+
handleNoArguments(var)
26+
endMetadata(@, null, var)
27+
endMetadataStar(1)
28+
handleNoType(()
29+
handleVariablePattern(null, a)
30+
handlePatternField(null)
31+
handleNoType(,)
32+
handleVariablePattern(null, b)
33+
handlePatternField(null)
34+
handleRecordPattern((, 2)
35+
beginForInExpression(x)
36+
handleIdentifier(x, expression)
37+
handleNoTypeArguments())
38+
handleNoArguments())
39+
handleSend(x, ))
40+
endForInExpression())
41+
handleForInLoopParts(null, for, (, var, in)
42+
handleLiteralInt(0)
43+
endForInControlFlow(0)
44+
handleLiteralList(1, [, null, ])
45+
handleExpressionFunctionBody(=>, ;)
46+
endTopLevelMethod(void, null, ;)
47+
endTopLevelDeclaration()
48+
endCompilationUnit(1, )
Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
parseUnit(void)
2+
skipErrorTokens(void)
3+
listener: beginCompilationUnit(void)
4+
syntheticPreviousToken(void)
5+
parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
6+
parseMetadataStar()
7+
listener: beginMetadataStar(void)
8+
listener: endMetadataStar(0)
9+
parseTopLevelMemberImpl()
10+
listener: beginTopLevelMember(void)
11+
parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
12+
listener: beginTopLevelMethod(, null, null)
13+
listener: handleVoidKeyword(void)
14+
ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
15+
listener: handleIdentifier(f, topLevelFunctionDeclaration)
16+
parseMethodTypeVar(f)
17+
listener: handleNoTypeVariables(()
18+
parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
19+
parseFormalParameters(f, MemberKind.TopLevelMethod)
20+
parseFormalParametersRest((, MemberKind.TopLevelMethod)
21+
listener: beginFormalParameters((, MemberKind.TopLevelMethod)
22+
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
23+
parseMetadataStar(()
24+
listener: beginMetadataStar(x)
25+
listener: endMetadataStar(0)
26+
listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
27+
listener: handleNoType(()
28+
ensureIdentifier((, formalParameterDeclaration)
29+
listener: handleIdentifier(x, formalParameterDeclaration)
30+
listener: handleFormalParameterWithoutValue())
31+
listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
32+
listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
33+
parseAsyncModifierOpt())
34+
listener: handleAsyncModifier(null, null)
35+
inPlainSync()
36+
parseFunctionBody(), false, false)
37+
parseExpressionFunctionBody(=>, false)
38+
parseExpression(=>)
39+
looksLikeOuterPatternEquals(=>)
40+
skipOuterPattern(=>)
41+
parsePrecedenceExpression(=>, 1, true)
42+
parseUnaryExpression(=>, true)
43+
parsePrimary(=>, expression)
44+
listener: handleNoTypeArguments([)
45+
parseLiteralListSuffix(=>, null)
46+
listener: beginForControlFlow(null, for)
47+
parseForLoopPartsStart(null, for, ForPartsContext(null))
48+
parseExpressionStatementOrDeclaration((, ForPartsContext(null))
49+
parseMetadataStar(()
50+
listener: beginMetadataStar(@)
51+
parseMetadata(()
52+
listener: beginMetadata(@)
53+
ensureIdentifier(@, metadataReference)
54+
listener: handleIdentifier(annotation, metadataReference)
55+
parseQualifiedRestOpt(annotation, metadataContinuation)
56+
listener: handleNoTypeArguments(var)
57+
parseArgumentsOpt(annotation)
58+
listener: handleNoArguments(var)
59+
listener: endMetadata(@, null, var)
60+
listener: endMetadataStar(1)
61+
parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
62+
skipOuterPattern(var)
63+
parsePattern(var, precedence: 1, isRefutableContext: false)
64+
parsePrimaryPattern(var, isRefutableContext: false)
65+
parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
66+
parsePattern((, precedence: 1, isRefutableContext: false)
67+
parsePrimaryPattern((, isRefutableContext: false)
68+
parseVariablePattern((, typeInfo: Instance of 'NoType')
69+
listener: handleNoType(()
70+
listener: handleVariablePattern(null, a)
71+
listener: handlePatternField(null)
72+
parsePattern(,, precedence: 1, isRefutableContext: false)
73+
parsePrimaryPattern(,, isRefutableContext: false)
74+
parseVariablePattern(,, typeInfo: Instance of 'NoType')
75+
listener: handleNoType(,)
76+
listener: handleVariablePattern(null, b)
77+
listener: handlePatternField(null)
78+
ensureCloseParen(b, ()
79+
listener: handleRecordPattern((, 2)
80+
parseForInLoopPartsRest(), null, for, var, null)
81+
listener: beginForInExpression(x)
82+
parseExpression(in)
83+
looksLikeOuterPatternEquals(in)
84+
skipOuterPattern(in)
85+
skipObjectPatternRest(x)
86+
parsePrecedenceExpression(in, 1, true)
87+
parseUnaryExpression(in, true)
88+
parsePrimary(in, expression)
89+
parseSendOrFunctionLiteral(in, expression)
90+
parseSend(in, expression)
91+
isNextIdentifier(in)
92+
ensureIdentifier(in, expression)
93+
listener: handleIdentifier(x, expression)
94+
listener: handleNoTypeArguments())
95+
parseArgumentsOpt(x)
96+
listener: handleNoArguments())
97+
listener: handleSend(x, ))
98+
ensureCloseParen(x, ()
99+
listener: endForInExpression())
100+
listener: handleForInLoopParts(null, for, (, var, in)
101+
parseExpression())
102+
looksLikeOuterPatternEquals())
103+
skipOuterPattern())
104+
parsePrecedenceExpression(), 1, true)
105+
parseUnaryExpression(), true)
106+
parsePrimary(), expression)
107+
parseLiteralInt())
108+
listener: handleLiteralInt(0)
109+
listener: endForInControlFlow(0)
110+
listener: handleLiteralList(1, [, null, ])
111+
ensureSemicolon(])
112+
listener: handleExpressionFunctionBody(=>, ;)
113+
inGenerator()
114+
listener: endTopLevelMethod(void, null, ;)
115+
listener: endTopLevelDeclaration()
116+
reportAllErrorTokens(void)
117+
listener: endCompilationUnit(1, )
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
void f(x) => [for (@annotation var (a, b) in x) 0];
2+
3+
4+
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]
5+
[SimpleToken]
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
void f(x) => [for (@annotation var (a, b) in x) 0];
2+
3+
4+
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]
5+
[SimpleToken]
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
void f(x) {
2+
for (@annotation var (a, b) in x) {}
3+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
beginCompilationUnit(void)
2+
beginMetadataStar(void)
3+
endMetadataStar(0)
4+
beginTopLevelMember(void)
5+
beginTopLevelMethod(, null, null)
6+
handleVoidKeyword(void)
7+
handleIdentifier(f, topLevelFunctionDeclaration)
8+
handleNoTypeVariables(()
9+
beginFormalParameters((, MemberKind.TopLevelMethod)
10+
beginMetadataStar(x)
11+
endMetadataStar(0)
12+
beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
13+
handleNoType(()
14+
handleIdentifier(x, formalParameterDeclaration)
15+
handleFormalParameterWithoutValue())
16+
endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
17+
endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
18+
handleAsyncModifier(null, null)
19+
beginBlockFunctionBody({)
20+
beginForStatement(for)
21+
beginMetadataStar(@)
22+
beginMetadata(@)
23+
handleIdentifier(annotation, metadataReference)
24+
handleNoTypeArguments(var)
25+
handleNoArguments(var)
26+
endMetadata(@, null, var)
27+
endMetadataStar(1)
28+
handleNoType(()
29+
handleVariablePattern(null, a)
30+
handlePatternField(null)
31+
handleNoType(,)
32+
handleVariablePattern(null, b)
33+
handlePatternField(null)
34+
handleRecordPattern((, 2)
35+
beginForInExpression(x)
36+
handleIdentifier(x, expression)
37+
handleNoTypeArguments())
38+
handleNoArguments())
39+
handleSend(x, ))
40+
endForInExpression())
41+
handleForInLoopParts(null, for, (, var, in)
42+
beginForInBody({)
43+
beginBlock({, BlockKind(statement))
44+
endBlock(0, {, }, BlockKind(statement))
45+
endForInBody(})
46+
endForIn(})
47+
endBlockFunctionBody(1, {, })
48+
endTopLevelMethod(void, null, })
49+
endTopLevelDeclaration()
50+
endCompilationUnit(1, )
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
parseUnit(void)
2+
skipErrorTokens(void)
3+
listener: beginCompilationUnit(void)
4+
syntheticPreviousToken(void)
5+
parseTopLevelDeclarationImpl(, Instance of 'DirectiveContext')
6+
parseMetadataStar()
7+
listener: beginMetadataStar(void)
8+
listener: endMetadataStar(0)
9+
parseTopLevelMemberImpl()
10+
listener: beginTopLevelMember(void)
11+
parseTopLevelMethod(, null, null, , Instance of 'VoidType', null, f, false)
12+
listener: beginTopLevelMethod(, null, null)
13+
listener: handleVoidKeyword(void)
14+
ensureIdentifierPotentiallyRecovered(void, topLevelFunctionDeclaration, false)
15+
listener: handleIdentifier(f, topLevelFunctionDeclaration)
16+
parseMethodTypeVar(f)
17+
listener: handleNoTypeVariables(()
18+
parseGetterOrFormalParameters(f, f, false, MemberKind.TopLevelMethod)
19+
parseFormalParameters(f, MemberKind.TopLevelMethod)
20+
parseFormalParametersRest((, MemberKind.TopLevelMethod)
21+
listener: beginFormalParameters((, MemberKind.TopLevelMethod)
22+
parseFormalParameter((, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
23+
parseMetadataStar(()
24+
listener: beginMetadataStar(x)
25+
listener: endMetadataStar(0)
26+
listener: beginFormalParameter(x, MemberKind.TopLevelMethod, null, null, null)
27+
listener: handleNoType(()
28+
ensureIdentifier((, formalParameterDeclaration)
29+
listener: handleIdentifier(x, formalParameterDeclaration)
30+
listener: handleFormalParameterWithoutValue())
31+
listener: endFormalParameter(null, null, null, x, null, null, FormalParameterKind.requiredPositional, MemberKind.TopLevelMethod)
32+
listener: endFormalParameters(1, (, ), MemberKind.TopLevelMethod)
33+
parseAsyncModifierOpt())
34+
listener: handleAsyncModifier(null, null)
35+
inPlainSync()
36+
parseFunctionBody(), false, false)
37+
listener: beginBlockFunctionBody({)
38+
notEofOrValue(}, for)
39+
parseStatement({)
40+
parseStatementX({)
41+
parseForStatement({, null)
42+
listener: beginForStatement(for)
43+
parseForLoopPartsStart(null, for, ForPartsContext(null))
44+
parseExpressionStatementOrDeclaration((, ForPartsContext(null))
45+
parseMetadataStar(()
46+
listener: beginMetadataStar(@)
47+
parseMetadata(()
48+
listener: beginMetadata(@)
49+
ensureIdentifier(@, metadataReference)
50+
listener: handleIdentifier(annotation, metadataReference)
51+
parseQualifiedRestOpt(annotation, metadataContinuation)
52+
listener: handleNoTypeArguments(var)
53+
parseArgumentsOpt(annotation)
54+
listener: handleNoArguments(var)
55+
listener: endMetadata(@, null, var)
56+
listener: endMetadataStar(1)
57+
parseExpressionStatementOrDeclarationAfterModifiers(var, (, null, var, null, ForPartsContext(null))
58+
skipOuterPattern(var)
59+
parsePattern(var, precedence: 1, isRefutableContext: false)
60+
parsePrimaryPattern(var, isRefutableContext: false)
61+
parseParenthesizedPatternOrRecordPattern(var, isRefutableContext: false)
62+
parsePattern((, precedence: 1, isRefutableContext: false)
63+
parsePrimaryPattern((, isRefutableContext: false)
64+
parseVariablePattern((, typeInfo: Instance of 'NoType')
65+
listener: handleNoType(()
66+
listener: handleVariablePattern(null, a)
67+
listener: handlePatternField(null)
68+
parsePattern(,, precedence: 1, isRefutableContext: false)
69+
parsePrimaryPattern(,, isRefutableContext: false)
70+
parseVariablePattern(,, typeInfo: Instance of 'NoType')
71+
listener: handleNoType(,)
72+
listener: handleVariablePattern(null, b)
73+
listener: handlePatternField(null)
74+
ensureCloseParen(b, ()
75+
listener: handleRecordPattern((, 2)
76+
parseForInRest(), null, for, var, null)
77+
parseForInLoopPartsRest(), null, for, var, null)
78+
listener: beginForInExpression(x)
79+
parseExpression(in)
80+
looksLikeOuterPatternEquals(in)
81+
skipOuterPattern(in)
82+
skipObjectPatternRest(x)
83+
parsePrecedenceExpression(in, 1, true)
84+
parseUnaryExpression(in, true)
85+
parsePrimary(in, expression)
86+
parseSendOrFunctionLiteral(in, expression)
87+
parseSend(in, expression)
88+
isNextIdentifier(in)
89+
ensureIdentifier(in, expression)
90+
listener: handleIdentifier(x, expression)
91+
listener: handleNoTypeArguments())
92+
parseArgumentsOpt(x)
93+
listener: handleNoArguments())
94+
listener: handleSend(x, ))
95+
ensureCloseParen(x, ()
96+
listener: endForInExpression())
97+
listener: handleForInLoopParts(null, for, (, var, in)
98+
listener: beginForInBody({)
99+
parseStatement())
100+
parseStatementX())
101+
parseBlock(), BlockKind(statement))
102+
ensureBlock(), null, null)
103+
listener: beginBlock({, BlockKind(statement))
104+
notEofOrValue(}, })
105+
listener: endBlock(0, {, }, BlockKind(statement))
106+
listener: endForInBody(})
107+
listener: endForIn(})
108+
notEofOrValue(}, })
109+
listener: endBlockFunctionBody(1, {, })
110+
listener: endTopLevelMethod(void, null, })
111+
listener: endTopLevelDeclaration()
112+
reportAllErrorTokens(void)
113+
listener: endCompilationUnit(1, )
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
void f(x) {
2+
for (@annotation var (a, b) in x) {}
3+
}
4+
5+
6+
void[KeywordToken] f[StringToken]([BeginToken]x[StringToken])[SimpleToken] {[BeginToken]
7+
for[KeywordToken] ([BeginToken]@[SimpleToken]annotation[StringToken] var[KeywordToken] ([BeginToken]a[StringToken],[SimpleToken] b[StringToken])[SimpleToken] in[KeywordToken] x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
8+
}[SimpleToken]
9+
[SimpleToken]
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
void f(x) {
2+
for (@annotation var (a, b) in x) {}
3+
}
4+
5+
6+
void[KeywordToken] f[StringToken]([BeginToken]x[StringToken])[SimpleToken] {[BeginToken]
7+
for[KeywordToken] ([BeginToken]@[SimpleToken]annotation[StringToken] var[KeywordToken] ([BeginToken]a[StringToken],[SimpleToken] b[StringToken])[SimpleToken] in[KeywordToken] x[StringToken])[SimpleToken] {[BeginToken]}[SimpleToken]
8+
}[SimpleToken]
9+
[SimpleToken]

0 commit comments

Comments
 (0)