Skip to content

Commit 7bbb5fa

Browse files
committed
[libSyntax] Fix parsing of key paths on specialised generics
1 parent 3fd922a commit 7bbb5fa

File tree

3 files changed

+7
-1
lines changed

3 files changed

+7
-1
lines changed

test/Syntax/Outputs/round_trip_parse_gen.swift.withkinds

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ func keypath<FunctionSignature><ParameterClause>() </ParameterClause></FunctionS
446446
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><KeyPathExpr>\<MemberAccessExpr><MemberAccessExpr><IdentifierExpr>a</IdentifierExpr>.b</MemberAccessExpr>.c</MemberAccessExpr></KeyPathExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
447447
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><KeyPathExpr>\<SubscriptExpr><MemberAccessExpr><IdentifierExpr>a</IdentifierExpr>.b</MemberAccessExpr>[<FunctionCallArgument><IntegerLiteralExpr>1</IntegerLiteralExpr></FunctionCallArgument>]</SubscriptExpr></KeyPathExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
448448
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><KeyPathExpr>\<MemberAccessExpr><MemberAccessExpr>.a</MemberAccessExpr>.b</MemberAccessExpr></KeyPathExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
449+
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><KeyPathExpr>\<SpecializeExpr><IdentifierExpr>Array</IdentifierExpr><GenericArgumentClause><<GenericArgument><SimpleTypeIdentifier>Int</SimpleTypeIdentifier></GenericArgument>></GenericArgumentClause></SpecializeExpr><SubscriptExpr><KeyPathBaseExpr>.</KeyPathBaseExpr>[]</SubscriptExpr></KeyPathExpr></SequenceExpr><SequenceExpr><DiscardAssignmentExpr>
449450
_ </DiscardAssignmentExpr><AssignmentExpr>= </AssignmentExpr><ObjcKeyPathExpr>#keyPath(<ObjcNamePiece>a.</ObjcNamePiece><ObjcNamePiece>b.</ObjcNamePiece><ObjcNamePiece>c</ObjcNamePiece>)</ObjcKeyPathExpr></SequenceExpr>
450451
}</CodeBlock></FunctionDecl><FunctionDecl>
451452
func objcSelector<FunctionSignature><ParameterClause>() </ParameterClause></FunctionSignature><CodeBlock>{<SequenceExpr><DiscardAssignmentExpr>

test/Syntax/round_trip_parse_gen.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,7 @@ func keypath() {
446446
_ = \a.b.c
447447
_ = \a.b[1]
448448
_ = \.a.b
449+
_ = \Array<Int>.[]
449450
_ = #keyPath(a.b.c)
450451
}
451452
func objcSelector() {

utils/gyb_syntax_support/ExprNodes.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,11 @@
498498
Node('KeyPathExpr', kind='Expr',
499499
children=[
500500
Child('Backslash', kind='BackslashToken'),
501-
Child('RootExpr', kind='IdentifierExpr', is_optional=True),
501+
Child('RootExpr', kind='Expr', is_optional=True,
502+
node_choices=[
503+
Child('IdentifierExpr', kind='IdentifierExpr'),
504+
Child('SpecializeExpr', kind='SpecializeExpr')
505+
]),
502506
Child('Expression', kind='Expr'),
503507
]),
504508

0 commit comments

Comments
 (0)