Skip to content

Commit 5cd3e3f

Browse files
committed
Remove last usage of TokenList for closure specifiers
1 parent 94ff88a commit 5cd3e3f

File tree

24 files changed

+620
-572
lines changed

24 files changed

+620
-572
lines changed

CodeGeneration/Sources/SyntaxSupport/gyb_generated/AttributeNodes.swift

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,6 @@
1313
//===----------------------------------------------------------------------===//
1414

1515
public let ATTRIBUTE_NODES: [Node] = [
16-
Node(name: "TokenList",
17-
nameForDiagnostics: "token list",
18-
kind: "SyntaxCollection",
19-
element: "Token"),
20-
2116
Node(name: "Attribute",
2217
nameForDiagnostics: "attribute",
2318
description: "An `@` attribute.",

CodeGeneration/Sources/SyntaxSupport/gyb_generated/ExprNodes.swift

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,43 @@ public let EXPR_NODES: [Node] = [
626626
kind: "Type")
627627
]),
628628

629+
Node(name: "ClosureCaptureItemSpecifier",
630+
nameForDiagnostics: "closure capture specifier",
631+
kind: "Syntax",
632+
children: [
633+
Child(name: "Specifier",
634+
kind: "ContextualKeywordToken",
635+
tokenChoices: [
636+
"ContextualKeyword"
637+
],
638+
textChoices: [
639+
"weak",
640+
"unowned"
641+
]),
642+
Child(name: "LeftParen",
643+
kind: "LeftParenToken",
644+
isOptional: true,
645+
tokenChoices: [
646+
"LeftParen"
647+
]),
648+
Child(name: "Detail",
649+
kind: "ContextualKeywordToken",
650+
isOptional: true,
651+
tokenChoices: [
652+
"ContextualKeyword"
653+
],
654+
textChoices: [
655+
"safe",
656+
"unsafe"
657+
]),
658+
Child(name: "RightParen",
659+
kind: "RightParenToken",
660+
isOptional: true,
661+
tokenChoices: [
662+
"RightParen"
663+
])
664+
]),
665+
629666
Node(name: "ClosureCaptureItem",
630667
nameForDiagnostics: "closure capture item",
631668
kind: "Syntax",
@@ -634,9 +671,8 @@ public let EXPR_NODES: [Node] = [
634671
],
635672
children: [
636673
Child(name: "Specifier",
637-
kind: "TokenList",
638-
isOptional: true,
639-
collectionElementName: "SpecifierToken"),
674+
kind: "ClosureCaptureItemSpecifier",
675+
isOptional: true),
640676
Child(name: "Name",
641677
kind: "IdentifierToken",
642678
isOptional: true,

Sources/SwiftParser/Expressions.swift

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2277,39 +2277,42 @@ extension Parser {
22772277
}
22782278

22792279
@_spi(RawSyntax)
2280-
public mutating func parseClosureCaptureSpecifiers() -> RawTokenListSyntax? {
2281-
var specifiers = [RawTokenSyntax]()
2282-
do {
2283-
// Check for the strength specifier: "weak", "unowned", or
2284-
// "unowned(safe/unsafe)".
2285-
if let weakContextualKeyword = self.consumeIfContextualKeyword("weak") {
2286-
specifiers.append(weakContextualKeyword)
2287-
} else if let unownedContextualKeyword = self.consumeIfContextualKeyword("unowned") {
2288-
specifiers.append(unownedContextualKeyword)
2289-
if let lparen = self.consume(if: .leftParen) {
2290-
specifiers.append(lparen)
2291-
if self.currentToken.tokenText == "safe" {
2292-
specifiers.append(self.expectContextualKeywordWithoutRecovery("safe"))
2293-
} else {
2294-
specifiers.append(self.expectContextualKeywordWithoutRecovery("unsafe"))
2295-
}
2296-
specifiers.append(self.expectWithoutRecovery(.rightParen))
2297-
}
2298-
} else if self.at(.identifier) || self.at(.selfKeyword) {
2299-
let next = self.peek()
2300-
// "x = 42", "x," and "x]" are all strong captures of x.
2301-
guard
2302-
next.tokenKind == .equal || next.tokenKind == .comma
2303-
|| next.tokenKind == .rightSquareBracket || next.tokenKind == .period
2304-
else {
2305-
return nil
2306-
}
2280+
public mutating func parseClosureCaptureSpecifiers() -> RawClosureCaptureItemSpecifierSyntax? {
2281+
// Check for the strength specifier: "weak", "unowned", or
2282+
// "unowned(safe/unsafe)".
2283+
if let weakContextualKeyword = self.consumeIfContextualKeyword("weak") {
2284+
return RawClosureCaptureItemSpecifierSyntax(
2285+
specifier: weakContextualKeyword,
2286+
leftParen: nil,
2287+
detail: nil,
2288+
rightParen: nil,
2289+
arena: self.arena
2290+
)
2291+
} else if let unownedContextualKeyword = self.consumeIfContextualKeyword("unowned") {
2292+
if let lparen = self.consume(if: .leftParen) {
2293+
let (unexpectedBeforeDetail, detail) = self.expectAny([], contextualKeywords: ["safe", "unsafe"], default: .contextualKeyword)
2294+
let (unexpectedBeforeRParen, rparen) = self.expect(.rightParen)
2295+
return RawClosureCaptureItemSpecifierSyntax(
2296+
specifier: unownedContextualKeyword,
2297+
leftParen: lparen,
2298+
unexpectedBeforeDetail,
2299+
detail: detail,
2300+
unexpectedBeforeRParen,
2301+
rightParen: rparen,
2302+
arena: self.arena
2303+
)
23072304
} else {
2308-
return nil
2305+
return RawClosureCaptureItemSpecifierSyntax(
2306+
specifier: unownedContextualKeyword,
2307+
leftParen: nil,
2308+
detail: nil,
2309+
rightParen: nil,
2310+
arena: self.arena
2311+
)
23092312
}
2313+
} else {
2314+
return nil
23102315
}
2311-
// Squash all tokens, if any, as the specifier of the captured item.
2312-
return RawTokenListSyntax(elements: specifiers, arena: self.arena)
23132316
}
23142317
}
23152318

Sources/SwiftSyntax/Documentation.docc/gyb_generated/SwiftSyntax.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
280280
- <doc:SwiftSyntax/TupleExprElementSyntax>
281281
- <doc:SwiftSyntax/ArrayElementSyntax>
282282
- <doc:SwiftSyntax/DictionaryElementSyntax>
283+
- <doc:SwiftSyntax/ClosureCaptureItemSpecifierSyntax>
283284
- <doc:SwiftSyntax/ClosureCaptureItemSyntax>
284285
- <doc:SwiftSyntax/ClosureCaptureItemListSyntax>
285286
- <doc:SwiftSyntax/ClosureCaptureSignatureSyntax>
@@ -336,7 +337,6 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
336337
- <doc:SwiftSyntax/PrecedenceGroupNameElementSyntax>
337338
- <doc:SwiftSyntax/PrecedenceGroupAssignmentSyntax>
338339
- <doc:SwiftSyntax/PrecedenceGroupAssociativitySyntax>
339-
- <doc:SwiftSyntax/TokenListSyntax>
340340
- <doc:SwiftSyntax/AttributeSyntax>
341341
- <doc:SwiftSyntax/AttributeListSyntax>
342342
- <doc:SwiftSyntax/SpecializeAttributeSpecListSyntax>

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxNodes.swift

Lines changed: 83 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3182,6 +3182,86 @@ public struct RawTypeExprSyntax: RawExprSyntaxNodeProtocol {
31823182
}
31833183
}
31843184

3185+
@_spi(RawSyntax)
3186+
public struct RawClosureCaptureItemSpecifierSyntax: RawSyntaxNodeProtocol {
3187+
3188+
@_spi(RawSyntax)
3189+
public var layoutView: RawSyntaxLayoutView {
3190+
return raw.layoutView!
3191+
}
3192+
3193+
public static func isKindOf(_ raw: RawSyntax) -> Bool {
3194+
return raw.kind == .closureCaptureItemSpecifier
3195+
}
3196+
3197+
public var raw: RawSyntax
3198+
init(raw: RawSyntax) {
3199+
assert(Self.isKindOf(raw))
3200+
self.raw = raw
3201+
}
3202+
3203+
public init?<Node: RawSyntaxNodeProtocol>(_ other: Node) {
3204+
guard Self.isKindOf(other.raw) else { return nil }
3205+
self.init(raw: other.raw)
3206+
}
3207+
3208+
public init(
3209+
_ unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? = nil,
3210+
specifier: RawTokenSyntax,
3211+
_ unexpectedBetweenSpecifierAndLeftParen: RawUnexpectedNodesSyntax? = nil,
3212+
leftParen: RawTokenSyntax?,
3213+
_ unexpectedBetweenLeftParenAndDetail: RawUnexpectedNodesSyntax? = nil,
3214+
detail: RawTokenSyntax?,
3215+
_ unexpectedBetweenDetailAndRightParen: RawUnexpectedNodesSyntax? = nil,
3216+
rightParen: RawTokenSyntax?,
3217+
_ unexpectedAfterRightParen: RawUnexpectedNodesSyntax? = nil,
3218+
arena: __shared SyntaxArena
3219+
) {
3220+
let raw = RawSyntax.makeLayout(
3221+
kind: .closureCaptureItemSpecifier, uninitializedCount: 9, arena: arena) { layout in
3222+
layout.initialize(repeating: nil)
3223+
layout[0] = unexpectedBeforeSpecifier?.raw
3224+
layout[1] = specifier.raw
3225+
layout[2] = unexpectedBetweenSpecifierAndLeftParen?.raw
3226+
layout[3] = leftParen?.raw
3227+
layout[4] = unexpectedBetweenLeftParenAndDetail?.raw
3228+
layout[5] = detail?.raw
3229+
layout[6] = unexpectedBetweenDetailAndRightParen?.raw
3230+
layout[7] = rightParen?.raw
3231+
layout[8] = unexpectedAfterRightParen?.raw
3232+
}
3233+
self.init(raw: raw)
3234+
}
3235+
3236+
public var unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? {
3237+
layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:))
3238+
}
3239+
public var specifier: RawTokenSyntax {
3240+
layoutView.children[1].map(RawTokenSyntax.init(raw:))!
3241+
}
3242+
public var unexpectedBetweenSpecifierAndLeftParen: RawUnexpectedNodesSyntax? {
3243+
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
3244+
}
3245+
public var leftParen: RawTokenSyntax? {
3246+
layoutView.children[3].map(RawTokenSyntax.init(raw:))
3247+
}
3248+
public var unexpectedBetweenLeftParenAndDetail: RawUnexpectedNodesSyntax? {
3249+
layoutView.children[4].map(RawUnexpectedNodesSyntax.init(raw:))
3250+
}
3251+
public var detail: RawTokenSyntax? {
3252+
layoutView.children[5].map(RawTokenSyntax.init(raw:))
3253+
}
3254+
public var unexpectedBetweenDetailAndRightParen: RawUnexpectedNodesSyntax? {
3255+
layoutView.children[6].map(RawUnexpectedNodesSyntax.init(raw:))
3256+
}
3257+
public var rightParen: RawTokenSyntax? {
3258+
layoutView.children[7].map(RawTokenSyntax.init(raw:))
3259+
}
3260+
public var unexpectedAfterRightParen: RawUnexpectedNodesSyntax? {
3261+
layoutView.children[8].map(RawUnexpectedNodesSyntax.init(raw:))
3262+
}
3263+
}
3264+
31853265
@_spi(RawSyntax)
31863266
public struct RawClosureCaptureItemSyntax: RawSyntaxNodeProtocol {
31873267

@@ -3207,7 +3287,7 @@ public struct RawClosureCaptureItemSyntax: RawSyntaxNodeProtocol {
32073287

32083288
public init(
32093289
_ unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? = nil,
3210-
specifier: RawTokenListSyntax?,
3290+
specifier: RawClosureCaptureItemSpecifierSyntax?,
32113291
_ unexpectedBetweenSpecifierAndName: RawUnexpectedNodesSyntax? = nil,
32123292
name: RawTokenSyntax?,
32133293
_ unexpectedBetweenNameAndAssignToken: RawUnexpectedNodesSyntax? = nil,
@@ -3240,8 +3320,8 @@ public struct RawClosureCaptureItemSyntax: RawSyntaxNodeProtocol {
32403320
public var unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? {
32413321
layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:))
32423322
}
3243-
public var specifier: RawTokenListSyntax? {
3244-
layoutView.children[1].map(RawTokenListSyntax.init(raw:))
3323+
public var specifier: RawClosureCaptureItemSpecifierSyntax? {
3324+
layoutView.children[1].map(RawClosureCaptureItemSpecifierSyntax.init(raw:))
32453325
}
32463326
public var unexpectedBetweenSpecifierAndName: RawUnexpectedNodesSyntax? {
32473327
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
@@ -10335,46 +10415,6 @@ public struct RawMacroExpansionDeclSyntax: RawDeclSyntaxNodeProtocol {
1033510415
}
1033610416
}
1033710417

10338-
@_spi(RawSyntax)
10339-
public struct RawTokenListSyntax: RawSyntaxNodeProtocol {
10340-
10341-
@_spi(RawSyntax)
10342-
public var layoutView: RawSyntaxLayoutView {
10343-
return raw.layoutView!
10344-
}
10345-
10346-
public static func isKindOf(_ raw: RawSyntax) -> Bool {
10347-
return raw.kind == .tokenList
10348-
}
10349-
10350-
public var raw: RawSyntax
10351-
init(raw: RawSyntax) {
10352-
assert(Self.isKindOf(raw))
10353-
self.raw = raw
10354-
}
10355-
10356-
public init?<Node: RawSyntaxNodeProtocol>(_ other: Node) {
10357-
guard Self.isKindOf(other.raw) else { return nil }
10358-
self.init(raw: other.raw)
10359-
}
10360-
10361-
public init(elements: [RawTokenSyntax], arena: __shared SyntaxArena) {
10362-
let raw = RawSyntax.makeLayout(
10363-
kind: .tokenList, uninitializedCount: elements.count, arena: arena) { layout in
10364-
guard var ptr = layout.baseAddress else { return }
10365-
for elem in elements {
10366-
ptr.initialize(to: elem.raw)
10367-
ptr += 1
10368-
}
10369-
}
10370-
self.init(raw: raw)
10371-
}
10372-
10373-
public var elements: [RawTokenSyntax] {
10374-
layoutView.children.map { RawTokenSyntax(raw: $0!) }
10375-
}
10376-
}
10377-
1037810418
@_spi(RawSyntax)
1037910419
public struct RawAttributeSyntax: RawSyntaxNodeProtocol {
1038010420
@frozen // FIXME: Not actually stable, works around a miscompile

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxValidation.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -482,10 +482,22 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
482482
assertNoError(kind, 1, verify(layout[1], as: RawTypeSyntax.self))
483483
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
484484
break
485+
case .closureCaptureItemSpecifier:
486+
assert(layout.count == 9)
487+
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
488+
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
489+
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
490+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self))
491+
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
492+
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax?.self))
493+
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
494+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self))
495+
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
496+
break
485497
case .closureCaptureItem:
486498
assert(layout.count == 11)
487499
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
488-
assertNoError(kind, 1, verify(layout[1], as: RawTokenListSyntax?.self))
500+
assertNoError(kind, 1, verify(layout[1], as: RawClosureCaptureItemSpecifierSyntax?.self))
489501
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
490502
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self))
491503
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
@@ -1533,11 +1545,6 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
15331545
assertNoError(kind, 15, verify(layout[15], as: RawMultipleTrailingClosureElementListSyntax?.self))
15341546
assertNoError(kind, 16, verify(layout[16], as: RawUnexpectedNodesSyntax?.self))
15351547
break
1536-
case .tokenList:
1537-
for (index, element) in layout.enumerated() {
1538-
assertNoError(kind, index, verify(element, as: RawTokenSyntax.self))
1539-
}
1540-
break
15411548
case .attribute:
15421549
assert(layout.count == 11)
15431550
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))

Sources/SwiftSyntax/generated/Misc.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ extension Syntax {
6161
.node(ClassDeclSyntax.self),
6262
.node(ClassRestrictionTypeSyntax.self),
6363
.node(ClosureCaptureItemListSyntax.self),
64+
.node(ClosureCaptureItemSpecifierSyntax.self),
6465
.node(ClosureCaptureItemSyntax.self),
6566
.node(ClosureCaptureSignatureSyntax.self),
6667
.node(ClosureExprSyntax.self),
@@ -250,7 +251,6 @@ extension Syntax {
250251
.node(TargetFunctionEntrySyntax.self),
251252
.node(TernaryExprSyntax.self),
252253
.node(ThrowStmtSyntax.self),
253-
.node(TokenListSyntax.self),
254254
.node(TryExprSyntax.self),
255255
.node(TupleExprElementListSyntax.self),
256256
.node(TupleExprElementSyntax.self),
@@ -376,6 +376,8 @@ extension SyntaxKind {
376376
return ClassRestrictionTypeSyntax.self
377377
case .closureCaptureItemList:
378378
return ClosureCaptureItemListSyntax.self
379+
case .closureCaptureItemSpecifier:
380+
return ClosureCaptureItemSpecifierSyntax.self
379381
case .closureCaptureItem:
380382
return ClosureCaptureItemSyntax.self
381383
case .closureCaptureSignature:
@@ -754,8 +756,6 @@ extension SyntaxKind {
754756
return TernaryExprSyntax.self
755757
case .throwStmt:
756758
return ThrowStmtSyntax.self
757-
case .tokenList:
758-
return TokenListSyntax.self
759759
case .tryExpr:
760760
return TryExprSyntax.self
761761
case .tupleExprElementList:
@@ -913,6 +913,8 @@ extension SyntaxKind {
913913
return nil
914914
case .closureCaptureItemList:
915915
return nil
916+
case .closureCaptureItemSpecifier:
917+
return "closure capture specifier"
916918
case .closureCaptureItem:
917919
return "closure capture item"
918920
case .closureCaptureSignature:
@@ -1291,8 +1293,6 @@ extension SyntaxKind {
12911293
return "ternay expression"
12921294
case .throwStmt:
12931295
return "'throw' statement"
1294-
case .tokenList:
1295-
return "token list"
12961296
case .tryExpr:
12971297
return "'try' expression"
12981298
case .tupleExprElementList:

0 commit comments

Comments
 (0)