Skip to content

Commit 2e094a5

Browse files
rintarorjmccall
authored andcommitted
[Syntax] Update for braceless multiple trailing closure syntax
1 parent 8df09a0 commit 2e094a5

File tree

6 files changed

+36
-42
lines changed

6 files changed

+36
-42
lines changed

lib/Parse/ParseExpr.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3196,6 +3196,8 @@ Parser::parseTrailingClosures(bool isExprBasic, SourceRange calleeRange,
31963196

31973197
// Parse labeled trailing closures.
31983198
while (isStartOfLabelledTrailingClosure(*this)) {
3199+
SyntaxParsingContext ClosureCtx(SyntaxContext,
3200+
SyntaxKind::MultipleTrailingClosureElement);
31993201
Identifier label;
32003202
auto labelLoc = consumeArgumentLabel(label);
32013203
consumeToken(tok::colon);
@@ -3208,6 +3210,8 @@ Parser::parseTrailingClosures(bool isExprBasic, SourceRange calleeRange,
32083210

32093211
// Don't diagnose whitespace gaps before labelled closures.
32103212
}
3213+
SyntaxContext->collectNodesInPlace(
3214+
SyntaxKind::MultipleTrailingClosureElementList);
32113215

32123216
return result;
32133217
}

test/Syntax/Outputs/round_trip_parse_gen.swift.withkinds

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class C <MemberDeclBlock>{<MemberDeclListItem><FunctionDecl>
9393
func implictMember<FunctionSignature><ParameterClause>() </ParameterClause></FunctionSignature><CodeBlock>{<SequenceExpr><DiscardAssignmentExpr>
9494
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><MemberAccessExpr>.foo</MemberAccessExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
9595
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><FunctionCallExpr><MemberAccessExpr>.foo</MemberAccessExpr>(<TupleExprElement>x: <IntegerLiteralExpr>12</IntegerLiteralExpr></TupleExprElement>)</FunctionCallExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
96-
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><FunctionCallExpr><MemberAccessExpr>.foo </MemberAccessExpr><ClosureExpr>{ <IntegerLiteralExpr>12 </IntegerLiteralExpr>}</ClosureExpr></FunctionCallExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
96+
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><FunctionCallExpr><MemberAccessExpr>.foo</MemberAccessExpr>() <ClosureExpr>{ <IntegerLiteralExpr>12 </IntegerLiteralExpr>}</ClosureExpr></FunctionCallExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
9797
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><SubscriptExpr><MemberAccessExpr>.foo</MemberAccessExpr>[<TupleExprElement><IntegerLiteralExpr>12</IntegerLiteralExpr></TupleExprElement>]</SubscriptExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
9898
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><MemberAccessExpr><MemberAccessExpr>.foo</MemberAccessExpr>.bar</MemberAccessExpr></SequenceExpr>
9999
}</CodeBlock></FunctionDecl></MemberDeclListItem><MemberDeclListItem><InitializerDecl>
@@ -257,21 +257,22 @@ func closure<FunctionSignature><ParameterClause>() </ParameterClause></FunctionS
257257
func postfix<FunctionSignature><ParameterClause>() </ParameterClause></FunctionSignature><CodeBlock>{<FunctionCallExpr><IdentifierExpr>
258258
foo</IdentifierExpr>()</FunctionCallExpr><FunctionCallExpr><IdentifierExpr>
259259
foo</IdentifierExpr>() <ClosureExpr>{}</ClosureExpr></FunctionCallExpr><FunctionCallExpr><IdentifierExpr>
260-
foo </IdentifierExpr><ClosureExpr>{}</ClosureExpr></FunctionCallExpr><IdentifierExpr>
261-
foo</IdentifierExpr>() <ClosureExpr>{}</ClosureExpr>
262-
arg2: <ClosureExpr>{}</ClosureExpr><FunctionCallExpr><IdentifierExpr>
260+
foo </IdentifierExpr><ClosureExpr>{}</ClosureExpr></FunctionCallExpr><FunctionCallExpr><IdentifierExpr>
261+
foo </IdentifierExpr><ClosureExpr>{ }</ClosureExpr><MultipleTrailingClosureElement>
262+
arg2: <ClosureExpr>{}</ClosureExpr></MultipleTrailingClosureElement></FunctionCallExpr><FunctionCallExpr><IdentifierExpr>
263263
foo </IdentifierExpr><ClosureExpr>{}</ClosureExpr></FunctionCallExpr><FunctionCallExpr><MemberAccessExpr><IdentifierExpr>
264264
foo</IdentifierExpr>.bar</MemberAccessExpr>()</FunctionCallExpr><FunctionCallExpr><MemberAccessExpr><IdentifierExpr>
265-
foo</IdentifierExpr>.bar</MemberAccessExpr>() <ClosureExpr>{}</ClosureExpr></FunctionCallExpr><MemberAccessExpr><IdentifierExpr>
266-
foo</IdentifierExpr>.bar</MemberAccessExpr>() <ClosureExpr>{}</ClosureExpr>
267-
arg2: <ClosureExpr>{}</ClosureExpr><FunctionCallExpr><MemberAccessExpr><IdentifierExpr>
265+
foo</IdentifierExpr>.bar</MemberAccessExpr>() <ClosureExpr>{}</ClosureExpr></FunctionCallExpr><FunctionCallExpr><MemberAccessExpr><IdentifierExpr>
266+
foo</IdentifierExpr>.bar</MemberAccessExpr>() <ClosureExpr>{}</ClosureExpr><MultipleTrailingClosureElement>
267+
arg2: <ClosureExpr>{}</ClosureExpr></MultipleTrailingClosureElement><MultipleTrailingClosureElement>
268+
in: <ClosureExpr>{}</ClosureExpr></MultipleTrailingClosureElement></FunctionCallExpr><FunctionCallExpr><MemberAccessExpr><IdentifierExpr>
268269
foo</IdentifierExpr>.bar </MemberAccessExpr><ClosureExpr>{}</ClosureExpr></FunctionCallExpr><SubscriptExpr><IdentifierExpr>
269270
foo</IdentifierExpr>[]</SubscriptExpr><SubscriptExpr><IdentifierExpr>
270271
foo</IdentifierExpr>[<TupleExprElement><IntegerLiteralExpr>1</IntegerLiteralExpr></TupleExprElement>]</SubscriptExpr><SubscriptExpr><IdentifierExpr>
271272
foo</IdentifierExpr>[] <ClosureExpr>{}</ClosureExpr></SubscriptExpr><SubscriptExpr><IdentifierExpr>
272-
foo</IdentifierExpr>[<TupleExprElement><IntegerLiteralExpr>1</IntegerLiteralExpr></TupleExprElement>] <ClosureExpr>{}</ClosureExpr></SubscriptExpr><IdentifierExpr>
273-
foo</IdentifierExpr>[<TupleExprElement><IntegerLiteralExpr>1</IntegerLiteralExpr></TupleExprElement>] <ClosureExpr>{}</ClosureExpr>
274-
arg2: <ClosureExpr>{}</ClosureExpr><SubscriptExpr><SubscriptExpr><IdentifierExpr>
273+
foo</IdentifierExpr>[<TupleExprElement><IntegerLiteralExpr>1</IntegerLiteralExpr></TupleExprElement>] <ClosureExpr>{}</ClosureExpr></SubscriptExpr><SubscriptExpr><IdentifierExpr>
274+
foo</IdentifierExpr>[<TupleExprElement><IntegerLiteralExpr>1</IntegerLiteralExpr></TupleExprElement>] <ClosureExpr>{}</ClosureExpr><MultipleTrailingClosureElement>
275+
arg2: <ClosureExpr>{}</ClosureExpr></MultipleTrailingClosureElement></SubscriptExpr><SubscriptExpr><SubscriptExpr><IdentifierExpr>
275276
foo</IdentifierExpr>[<TupleExprElement><IntegerLiteralExpr>1</IntegerLiteralExpr></TupleExprElement>]</SubscriptExpr>[<TupleExprElement><IntegerLiteralExpr>2</IntegerLiteralExpr>,</TupleExprElement><TupleExprElement>x:<IntegerLiteralExpr>3</IntegerLiteralExpr></TupleExprElement>]</SubscriptExpr><MemberAccessExpr><FunctionCallExpr><ForcedValueExpr><MemberAccessExpr><PostfixUnaryExpr><OptionalChainingExpr><IdentifierExpr>
276277
foo</IdentifierExpr>?</OptionalChainingExpr>++</PostfixUnaryExpr>.bar</MemberAccessExpr>!</ForcedValueExpr>(<TupleExprElement><IdentifierExpr>baz</IdentifierExpr></TupleExprElement>)</FunctionCallExpr>.self</MemberAccessExpr><MemberAccessExpr><FunctionCallExpr><IdentifierExpr>
277278
foo</IdentifierExpr>()</FunctionCallExpr>.0</MemberAccessExpr><MemberAccessExpr><SpecializeExpr><IdentifierExpr>

test/Syntax/round_trip_parse_gen.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ class C {
9393
func implictMember() {
9494
_ = .foo
9595
_ = .foo(x: 12)
96-
_ = .foo { 12 }
96+
_ = .foo() { 12 }
9797
_ = .foo[12]
9898
_ = .foo.bar
9999
}
@@ -258,13 +258,14 @@ func postfix() {
258258
foo()
259259
foo() {}
260260
foo {}
261-
foo() {}
261+
foo { }
262262
arg2: {}
263263
foo {}
264264
foo.bar()
265265
foo.bar() {}
266266
foo.bar() {}
267267
arg2: {}
268+
in: {}
268269
foo.bar {}
269270
foo[]
270271
foo[1]

unittests/Syntax/ExprSyntaxTests.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,8 +400,8 @@ TEST(ExprSyntaxTests, FunctionCallExprGetAPIs) {
400400
auto ArgList = getFullArgumentList();
401401
auto RightParen = SyntaxFactory::makeRightParenToken({}, {});
402402

403-
auto Call = SyntaxFactory::makeFunctionCallExpr(SymbolicRef, LeftParen,
404-
ArgList, RightParen, None);
403+
auto Call = SyntaxFactory::makeFunctionCallExpr(
404+
SymbolicRef, LeftParen, ArgList, RightParen, None, None);
405405

406406
{
407407
auto GottenExpression1 = Call.getCalledExpression();
@@ -435,8 +435,8 @@ TEST(ExprSyntaxTests, FunctionCallExprMakeAPIs) {
435435
auto RightParen = SyntaxFactory::makeRightParenToken({}, {});
436436

437437
{
438-
auto Call = SyntaxFactory::makeFunctionCallExpr(SymbolicRef, LeftParen,
439-
ArgList, RightParen, None);
438+
auto Call = SyntaxFactory::makeFunctionCallExpr(
439+
SymbolicRef, LeftParen, ArgList, RightParen, None, None);
440440
llvm::SmallString<64> Scratch;
441441
llvm::raw_svector_ostream OS(Scratch);
442442
Call.print(OS);

utils/gyb_syntax_support/ExprNodes.py

Lines changed: 12 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -409,17 +409,6 @@
409409
Node('MultipleTrailingClosureElementList', kind='SyntaxCollection',
410410
element='MultipleTrailingClosureElement'),
411411

412-
# multiple-trailing-closure-clause ->
413-
# '{' multiple-trailing-closure-element-list '}'
414-
Node('MultipleTrailingClosureClause', kind='Syntax',
415-
traits=['Braced'],
416-
children=[
417-
Child('LeftBrace', kind='LeftBraceToken'),
418-
Child('Elements', kind='MultipleTrailingClosureElementList',
419-
collection_element_name='Element'),
420-
Child('RightBrace', kind='RightBraceToken'),
421-
]),
422-
423412
# call-expr -> expr '(' call-argument-list ')' closure-expr?
424413
# | expr closure-expr
425414
Node('FunctionCallExpr', kind='Expr',
@@ -431,12 +420,12 @@
431420
collection_element_name='Argument'),
432421
Child('RightParen', kind='RightParenToken',
433422
is_optional=True),
434-
Child('TrailingClosure', kind='Syntax', is_optional=True,
435-
node_choices=[
436-
Child('SingleClosure', kind='ClosureExpr'),
437-
Child('MultipleTrailingClosures',
438-
kind='MultipleTrailingClosureClause'),
439-
]),
423+
Child('TrailingClosure', kind='ClosureExpr',
424+
is_optional=True),
425+
Child('AdditionalTrailingClosures',
426+
kind='MultipleTrailingClosureElementList',
427+
collection_element_name='AdditionalTralingClosure',
428+
is_optional=True),
440429
]),
441430

442431
# subscript-expr -> expr '[' call-argument-list ']' closure-expr?
@@ -447,12 +436,12 @@
447436
Child('ArgumentList', kind='TupleExprElementList',
448437
collection_element_name='Argument'),
449438
Child('RightBracket', kind='RightSquareBracketToken'),
450-
Child('TrailingClosure', kind='Syntax', is_optional=True,
451-
node_choices=[
452-
Child('SingleClosure', kind='ClosureExpr'),
453-
Child('MultipleTrailingClosures',
454-
kind='MultipleTrailingClosureClause'),
455-
]),
439+
Child('TrailingClosure', kind='ClosureExpr',
440+
is_optional=True),
441+
Child('AdditionalTrailingClosures',
442+
kind='MultipleTrailingClosureElementList',
443+
collection_element_name='AdditionalTralingClosure',
444+
is_optional=True),
456445
]),
457446

458447
# optional-chaining-expr -> expr '?'

utils/gyb_syntax_support/NodeSerializationCodes.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,8 @@
246246
'QualifiedDeclName': 242,
247247
'CatchItem': 243,
248248
'CatchItemList': 244,
249-
'MultipleTrailingClosureClause': 245,
250-
'MultipleTrailingClosureElementList': 246,
251-
'MultipleTrailingClosureElement': 247,
249+
'MultipleTrailingClosureElementList': 245,
250+
'MultipleTrailingClosureElement': 246,
252251
}
253252

254253

0 commit comments

Comments
 (0)