Skip to content

Commit 0512c58

Browse files
jensjohaCommit Queue
authored and
Commit Queue
committed
[parser] Use allowCascades when calling parseThrowExpression in _parsePrecedenceExpressionLoop instead of just false
For now, see what happens. Bug: #54284 Change-Id: I8e9f081ae3aa5caff7e155ef628e90547cc8afe6 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/392561 Reviewed-by: Johnni Winther <[email protected]> Reviewed-by: Erik Ernst <[email protected]> Commit-Queue: Jens Johansen <[email protected]>
1 parent 4177d28 commit 0512c58

File tree

6 files changed

+1191
-1
lines changed

6 files changed

+1191
-1
lines changed

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -6053,7 +6053,7 @@ class Parser {
60536053
operator = next;
60546054
}
60556055
token = next.next!.isA(Keyword.THROW)
6056-
? parseThrowExpression(next, /* allowCascades = */ false)
6056+
? parseThrowExpression(next, allowCascades)
60576057
: parsePrecedenceExpression(
60586058
next, level, allowCascades, ConstantPatternContext.none);
60596059
listener.handleAssignmentExpression(operator, token);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var x = throw 0..isEven;
2+
3+
void foo() {
4+
var x;
5+
print(x = throw 0..isEven);
6+
}
7+
8+
class A {
9+
var x;
10+
A() : x = throw 1.isEven;
11+
A() : this.x = throw 2.isEven;
12+
}
13+
14+
class A {
15+
var x;
16+
A() : x = (throw 3..isEven);
17+
A() : this.x = (throw 4..isEven);
18+
}
19+
20+
class A {
21+
var x;
22+
A() : x = throw 5..isEven;
23+
A() : this.x = throw 6..isEven;
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,328 @@
1+
beginCompilationUnit(var)
2+
beginMetadataStar(var)
3+
endMetadataStar(0)
4+
beginTopLevelMember(var)
5+
beginFields(DeclarationKind.TopLevel, null, null, null, null, null, null, var, )
6+
handleNoType(var)
7+
handleIdentifier(x, topLevelVariableDeclaration)
8+
beginFieldInitializer(=)
9+
handleLiteralInt(0)
10+
beginCascade(..)
11+
handleIdentifier(isEven, expressionContinuation)
12+
handleNoTypeArguments(;)
13+
handleNoArguments(;)
14+
handleSend(isEven, ;)
15+
handleEndingBinaryExpression(.., isEven)
16+
endCascade()
17+
handleThrowExpression(throw, isEven)
18+
endFieldInitializer(=, isEven)
19+
endTopLevelFields(null, null, null, null, null, var, 1, var, ;)
20+
endTopLevelDeclaration(;)
21+
beginMetadataStar(void)
22+
endMetadataStar(0)
23+
beginTopLevelMember(void)
24+
beginTopLevelMethod(;, null, null)
25+
handleVoidKeyword(void)
26+
handleIdentifier(foo, topLevelFunctionDeclaration)
27+
handleNoTypeVariables(()
28+
beginFormalParameters((, MemberKind.TopLevelMethod)
29+
endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
30+
handleAsyncModifier(null, null)
31+
beginBlockFunctionBody({)
32+
beginMetadataStar(var)
33+
endMetadataStar(0)
34+
handleNoType(var)
35+
beginVariablesDeclaration(x, null, var)
36+
handleIdentifier(x, localVariableDeclaration)
37+
beginInitializedIdentifier(x)
38+
handleNoVariableInitializer(x)
39+
endInitializedIdentifier(x)
40+
endVariablesDeclaration(1, ;)
41+
handleIdentifier(print, expression)
42+
handleNoTypeArguments(()
43+
beginArguments(()
44+
handleIdentifier(x, expression)
45+
handleNoTypeArguments(=)
46+
handleNoArguments(=)
47+
handleSend(x, =)
48+
handleLiteralInt(0)
49+
beginCascade(..)
50+
handleIdentifier(isEven, expressionContinuation)
51+
handleNoTypeArguments())
52+
handleNoArguments())
53+
handleSend(isEven, ))
54+
handleEndingBinaryExpression(.., isEven)
55+
endCascade()
56+
handleThrowExpression(throw, isEven)
57+
handleAssignmentExpression(=, isEven)
58+
endArguments(1, (, ))
59+
handleSend(print, ;)
60+
handleExpressionStatement(print, ;)
61+
endBlockFunctionBody(2, {, })
62+
endTopLevelMethod(void, null, })
63+
endTopLevelDeclaration(})
64+
beginMetadataStar(class)
65+
endMetadataStar(0)
66+
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
67+
handleIdentifier(A, classOrMixinDeclaration)
68+
handleNoTypeVariables({)
69+
beginClassDeclaration(class, null, null, null, null, null, null, null, null, A)
70+
handleNoType(A)
71+
handleClassExtends(null, 1)
72+
handleClassNoWithClause()
73+
handleImplements(null, 0)
74+
handleClassHeader(class, class, null)
75+
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
76+
beginMetadataStar(var)
77+
endMetadataStar(0)
78+
beginMember()
79+
beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, {)
80+
handleNoType(var)
81+
handleIdentifier(x, fieldDeclaration)
82+
handleNoFieldInitializer(;)
83+
endClassFields(null, null, null, null, null, null, var, 1, var, ;)
84+
endMember()
85+
beginMetadataStar(A)
86+
endMetadataStar(0)
87+
beginMember()
88+
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
89+
handleNoType(;)
90+
handleIdentifier(A, methodDeclaration)
91+
handleNoTypeVariables(()
92+
beginFormalParameters((, MemberKind.NonStaticMethod)
93+
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
94+
beginInitializers(:)
95+
beginInitializer(x)
96+
handleIdentifier(x, expression)
97+
handleNoTypeArguments(=)
98+
handleNoArguments(=)
99+
handleSend(x, =)
100+
handleLiteralInt(1)
101+
handleIdentifier(isEven, expressionContinuation)
102+
handleNoTypeArguments(;)
103+
handleNoArguments(;)
104+
handleSend(isEven, ;)
105+
handleEndingBinaryExpression(., isEven)
106+
handleThrowExpression(throw, isEven)
107+
handleAssignmentExpression(=, isEven)
108+
endInitializer(isEven)
109+
endInitializers(1, :, isEven)
110+
handleAsyncModifier(null, null)
111+
handleEmptyFunctionBody(;)
112+
endClassConstructor(null, A, (, :, ;)
113+
endMember()
114+
beginMetadataStar(A)
115+
endMetadataStar(0)
116+
beginMember()
117+
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
118+
handleNoType(;)
119+
handleIdentifier(A, methodDeclaration)
120+
handleNoTypeVariables(()
121+
beginFormalParameters((, MemberKind.NonStaticMethod)
122+
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
123+
beginInitializers(:)
124+
beginInitializer(this)
125+
handleThisExpression(this, expression)
126+
handleIdentifier(x, expressionContinuation)
127+
handleNoTypeArguments(=)
128+
handleNoArguments(=)
129+
handleSend(x, =)
130+
handleEndingBinaryExpression(., x)
131+
handleLiteralInt(2)
132+
handleIdentifier(isEven, expressionContinuation)
133+
handleNoTypeArguments(;)
134+
handleNoArguments(;)
135+
handleSend(isEven, ;)
136+
handleEndingBinaryExpression(., isEven)
137+
handleThrowExpression(throw, isEven)
138+
handleAssignmentExpression(=, isEven)
139+
endInitializer(isEven)
140+
endInitializers(1, :, isEven)
141+
handleAsyncModifier(null, null)
142+
handleEmptyFunctionBody(;)
143+
endClassConstructor(null, A, (, :, ;)
144+
endMember()
145+
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
146+
endClassDeclaration(class, })
147+
endTopLevelDeclaration(})
148+
beginMetadataStar(class)
149+
endMetadataStar(0)
150+
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
151+
handleIdentifier(A, classOrMixinDeclaration)
152+
handleNoTypeVariables({)
153+
beginClassDeclaration(class, null, null, null, null, null, null, null, null, A)
154+
handleNoType(A)
155+
handleClassExtends(null, 1)
156+
handleClassNoWithClause()
157+
handleImplements(null, 0)
158+
handleClassHeader(class, class, null)
159+
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
160+
beginMetadataStar(var)
161+
endMetadataStar(0)
162+
beginMember()
163+
beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, {)
164+
handleNoType(var)
165+
handleIdentifier(x, fieldDeclaration)
166+
handleNoFieldInitializer(;)
167+
endClassFields(null, null, null, null, null, null, var, 1, var, ;)
168+
endMember()
169+
beginMetadataStar(A)
170+
endMetadataStar(0)
171+
beginMember()
172+
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
173+
handleNoType(;)
174+
handleIdentifier(A, methodDeclaration)
175+
handleNoTypeVariables(()
176+
beginFormalParameters((, MemberKind.NonStaticMethod)
177+
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
178+
beginInitializers(:)
179+
beginInitializer(x)
180+
handleIdentifier(x, expression)
181+
handleNoTypeArguments(=)
182+
handleNoArguments(=)
183+
handleSend(x, =)
184+
beginParenthesizedExpressionOrRecordLiteral(()
185+
handleLiteralInt(3)
186+
beginCascade(..)
187+
handleIdentifier(isEven, expressionContinuation)
188+
handleNoTypeArguments())
189+
handleNoArguments())
190+
handleSend(isEven, ))
191+
handleEndingBinaryExpression(.., isEven)
192+
endCascade()
193+
handleThrowExpression(throw, isEven)
194+
endParenthesizedExpression(()
195+
handleAssignmentExpression(=, ))
196+
endInitializer())
197+
endInitializers(1, :, ))
198+
handleAsyncModifier(null, null)
199+
handleEmptyFunctionBody(;)
200+
endClassConstructor(null, A, (, :, ;)
201+
endMember()
202+
beginMetadataStar(A)
203+
endMetadataStar(0)
204+
beginMember()
205+
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
206+
handleNoType(;)
207+
handleIdentifier(A, methodDeclaration)
208+
handleNoTypeVariables(()
209+
beginFormalParameters((, MemberKind.NonStaticMethod)
210+
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
211+
beginInitializers(:)
212+
beginInitializer(this)
213+
handleThisExpression(this, expression)
214+
handleIdentifier(x, expressionContinuation)
215+
handleNoTypeArguments(=)
216+
handleNoArguments(=)
217+
handleSend(x, =)
218+
handleEndingBinaryExpression(., x)
219+
beginParenthesizedExpressionOrRecordLiteral(()
220+
handleLiteralInt(4)
221+
beginCascade(..)
222+
handleIdentifier(isEven, expressionContinuation)
223+
handleNoTypeArguments())
224+
handleNoArguments())
225+
handleSend(isEven, ))
226+
handleEndingBinaryExpression(.., isEven)
227+
endCascade()
228+
handleThrowExpression(throw, isEven)
229+
endParenthesizedExpression(()
230+
handleAssignmentExpression(=, ))
231+
endInitializer())
232+
endInitializers(1, :, ))
233+
handleAsyncModifier(null, null)
234+
handleEmptyFunctionBody(;)
235+
endClassConstructor(null, A, (, :, ;)
236+
endMember()
237+
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
238+
endClassDeclaration(class, })
239+
endTopLevelDeclaration(})
240+
beginMetadataStar(class)
241+
endMetadataStar(0)
242+
beginClassOrMixinOrNamedMixinApplicationPrelude(class)
243+
handleIdentifier(A, classOrMixinDeclaration)
244+
handleNoTypeVariables({)
245+
beginClassDeclaration(class, null, null, null, null, null, null, null, null, A)
246+
handleNoType(A)
247+
handleClassExtends(null, 1)
248+
handleClassNoWithClause()
249+
handleImplements(null, 0)
250+
handleClassHeader(class, class, null)
251+
beginClassOrMixinOrExtensionBody(DeclarationKind.Class, {)
252+
beginMetadataStar(var)
253+
endMetadataStar(0)
254+
beginMember()
255+
beginFields(DeclarationKind.Class, null, null, null, null, null, null, var, {)
256+
handleNoType(var)
257+
handleIdentifier(x, fieldDeclaration)
258+
handleNoFieldInitializer(;)
259+
endClassFields(null, null, null, null, null, null, var, 1, var, ;)
260+
endMember()
261+
beginMetadataStar(A)
262+
endMetadataStar(0)
263+
beginMember()
264+
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
265+
handleNoType(;)
266+
handleIdentifier(A, methodDeclaration)
267+
handleNoTypeVariables(()
268+
beginFormalParameters((, MemberKind.NonStaticMethod)
269+
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
270+
beginInitializers(:)
271+
beginInitializer(x)
272+
handleIdentifier(x, expression)
273+
handleNoTypeArguments(=)
274+
handleNoArguments(=)
275+
handleSend(x, =)
276+
handleLiteralInt(5)
277+
beginCascade(..)
278+
handleIdentifier(isEven, expressionContinuation)
279+
handleNoTypeArguments(;)
280+
handleNoArguments(;)
281+
handleSend(isEven, ;)
282+
handleEndingBinaryExpression(.., isEven)
283+
endCascade()
284+
handleThrowExpression(throw, isEven)
285+
handleAssignmentExpression(=, isEven)
286+
endInitializer(isEven)
287+
endInitializers(1, :, isEven)
288+
handleAsyncModifier(null, null)
289+
handleEmptyFunctionBody(;)
290+
endClassConstructor(null, A, (, :, ;)
291+
endMember()
292+
beginMetadataStar(A)
293+
endMetadataStar(0)
294+
beginMember()
295+
beginMethod(DeclarationKind.Class, null, null, null, null, null, null, A, A)
296+
handleNoType(;)
297+
handleIdentifier(A, methodDeclaration)
298+
handleNoTypeVariables(()
299+
beginFormalParameters((, MemberKind.NonStaticMethod)
300+
endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
301+
beginInitializers(:)
302+
beginInitializer(this)
303+
handleThisExpression(this, expression)
304+
handleIdentifier(x, expressionContinuation)
305+
handleNoTypeArguments(=)
306+
handleNoArguments(=)
307+
handleSend(x, =)
308+
handleEndingBinaryExpression(., x)
309+
handleLiteralInt(6)
310+
beginCascade(..)
311+
handleIdentifier(isEven, expressionContinuation)
312+
handleNoTypeArguments(;)
313+
handleNoArguments(;)
314+
handleSend(isEven, ;)
315+
handleEndingBinaryExpression(.., isEven)
316+
endCascade()
317+
handleThrowExpression(throw, isEven)
318+
handleAssignmentExpression(=, isEven)
319+
endInitializer(isEven)
320+
endInitializers(1, :, isEven)
321+
handleAsyncModifier(null, null)
322+
handleEmptyFunctionBody(;)
323+
endClassConstructor(null, A, (, :, ;)
324+
endMember()
325+
endClassOrMixinOrExtensionBody(DeclarationKind.Class, 3, {, })
326+
endClassDeclaration(class, })
327+
endTopLevelDeclaration(})
328+
endCompilationUnit(5, )

0 commit comments

Comments
 (0)