Skip to content

Commit 2bcaa31

Browse files
committed
Remove last usage of TokenList for closure specifiers
1 parent 678014d commit 2bcaa31

File tree

23 files changed

+607
-587
lines changed

23 files changed

+607
-587
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: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,37 @@ public let EXPR_NODES: [Node] = [
659659
kind: "Type")
660660
]),
661661

662+
Node(name: "ClosureCaptureItemSpecifier",
663+
nameForDiagnostics: "closure capture specifier",
664+
kind: "Syntax",
665+
children: [
666+
Child(name: "Specifier",
667+
kind: "ContextualKeywordToken",
668+
textChoices: [
669+
"weak",
670+
"unowned"
671+
]),
672+
Child(name: "LeftParen",
673+
kind: "LeftParenToken",
674+
isOptional: true,
675+
tokenChoices: [
676+
"LeftParen"
677+
]),
678+
Child(name: "Detail",
679+
kind: "ContextualKeywordToken",
680+
isOptional: true,
681+
textChoices: [
682+
"safe",
683+
"unsafe"
684+
]),
685+
Child(name: "RightParen",
686+
kind: "RightParenToken",
687+
isOptional: true,
688+
tokenChoices: [
689+
"RightParen"
690+
])
691+
]),
692+
662693
Node(name: "ClosureCaptureItem",
663694
nameForDiagnostics: "closure capture item",
664695
kind: "Syntax",
@@ -667,9 +698,8 @@ public let EXPR_NODES: [Node] = [
667698
],
668699
children: [
669700
Child(name: "Specifier",
670-
kind: "TokenList",
671-
isOptional: true,
672-
collectionElementName: "SpecifierToken"),
701+
kind: "ClosureCaptureItemSpecifier",
702+
isOptional: true),
673703
Child(name: "Name",
674704
kind: "IdentifierToken",
675705
isOptional: true,

Sources/SwiftParser/Expressions.swift

Lines changed: 33 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2333,39 +2333,42 @@ extension Parser {
23332333
}
23342334

23352335
@_spi(RawSyntax)
2336-
public mutating func parseClosureCaptureSpecifiers() -> RawTokenListSyntax? {
2337-
var specifiers = [RawTokenSyntax]()
2338-
do {
2339-
// Check for the strength specifier: "weak", "unowned", or
2340-
// "unowned(safe/unsafe)".
2341-
if let weakKeyword = self.consume(if: .keyword(.weak)) {
2342-
specifiers.append(weakKeyword)
2343-
} else if let unownedKeyword = self.consume(if: .keyword(.unowned)) {
2344-
specifiers.append(unownedKeyword)
2345-
if let lparen = self.consume(if: .leftParen) {
2346-
specifiers.append(lparen)
2347-
if self.currentToken.tokenText == "safe" {
2348-
specifiers.append(self.expectWithoutRecovery(.keyword(.safe)))
2349-
} else {
2350-
specifiers.append(self.expectWithoutRecovery(.keyword(.unsafe)))
2351-
}
2352-
specifiers.append(self.expectWithoutRecovery(.rightParen))
2353-
}
2354-
} else if self.at(.identifier) || self.at(.keyword(.self)) {
2355-
let next = self.peek()
2356-
// "x = 42", "x," and "x]" are all strong captures of x.
2357-
guard
2358-
next.rawTokenKind == .equal || next.rawTokenKind == .comma
2359-
|| next.rawTokenKind == .rightSquareBracket || next.rawTokenKind == .period
2360-
else {
2361-
return nil
2362-
}
2336+
public mutating func parseClosureCaptureSpecifiers() -> RawClosureCaptureItemSpecifierSyntax? {
2337+
// Check for the strength specifier: "weak", "unowned", or
2338+
// "unowned(safe/unsafe)".
2339+
if let weakContextualKeyword = self.consume(if: .keyword(.weak)) {
2340+
return RawClosureCaptureItemSpecifierSyntax(
2341+
specifier: weakContextualKeyword,
2342+
leftParen: nil,
2343+
detail: nil,
2344+
rightParen: nil,
2345+
arena: self.arena
2346+
)
2347+
} else if let unownedContextualKeyword = self.consume(if: .keyword(.unowned)) {
2348+
if let lparen = self.consume(if: .leftParen) {
2349+
let (unexpectedBeforeDetail, detail) = self.expectAny([.keyword(.safe), .keyword(.unsafe)], default: .keyword(.safe))
2350+
let (unexpectedBeforeRParen, rparen) = self.expect(.rightParen)
2351+
return RawClosureCaptureItemSpecifierSyntax(
2352+
specifier: unownedContextualKeyword,
2353+
leftParen: lparen,
2354+
unexpectedBeforeDetail,
2355+
detail: detail,
2356+
unexpectedBeforeRParen,
2357+
rightParen: rparen,
2358+
arena: self.arena
2359+
)
23632360
} else {
2364-
return nil
2361+
return RawClosureCaptureItemSpecifierSyntax(
2362+
specifier: unownedContextualKeyword,
2363+
leftParen: nil,
2364+
detail: nil,
2365+
rightParen: nil,
2366+
arena: self.arena
2367+
)
23652368
}
2369+
} else {
2370+
return nil
23662371
}
2367-
// Squash all tokens, if any, as the specifier of the captured item.
2368-
return RawTokenListSyntax(elements: specifiers, arena: self.arena)
23692372
}
23702373
}
23712374

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
282282
- <doc:SwiftSyntax/TupleExprElementSyntax>
283283
- <doc:SwiftSyntax/ArrayElementSyntax>
284284
- <doc:SwiftSyntax/DictionaryElementSyntax>
285+
- <doc:SwiftSyntax/ClosureCaptureItemSpecifierSyntax>
285286
- <doc:SwiftSyntax/ClosureCaptureItemSyntax>
286287
- <doc:SwiftSyntax/ClosureCaptureItemListSyntax>
287288
- <doc:SwiftSyntax/ClosureCaptureSignatureSyntax>
@@ -337,7 +338,6 @@ allows Swift tools to parse, inspect, generate, and transform Swift source code.
337338
- <doc:SwiftSyntax/PrecedenceGroupNameElementSyntax>
338339
- <doc:SwiftSyntax/PrecedenceGroupAssignmentSyntax>
339340
- <doc:SwiftSyntax/PrecedenceGroupAssociativitySyntax>
340-
- <doc:SwiftSyntax/TokenListSyntax>
341341
- <doc:SwiftSyntax/AttributeSyntax>
342342
- <doc:SwiftSyntax/AttributeListSyntax>
343343
- <doc:SwiftSyntax/SpecializeAttributeSpecListSyntax>

Sources/SwiftSyntax/Raw/gyb_generated/RawSyntaxNodes.swift

Lines changed: 83 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3192,6 +3192,86 @@ public struct RawTypeExprSyntax: RawExprSyntaxNodeProtocol {
31923192
}
31933193
}
31943194

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

@@ -3217,7 +3297,7 @@ public struct RawClosureCaptureItemSyntax: RawSyntaxNodeProtocol {
32173297

32183298
public init(
32193299
_ unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? = nil,
3220-
specifier: RawTokenListSyntax?,
3300+
specifier: RawClosureCaptureItemSpecifierSyntax?,
32213301
_ unexpectedBetweenSpecifierAndName: RawUnexpectedNodesSyntax? = nil,
32223302
name: RawTokenSyntax?,
32233303
_ unexpectedBetweenNameAndAssignToken: RawUnexpectedNodesSyntax? = nil,
@@ -3250,8 +3330,8 @@ public struct RawClosureCaptureItemSyntax: RawSyntaxNodeProtocol {
32503330
public var unexpectedBeforeSpecifier: RawUnexpectedNodesSyntax? {
32513331
layoutView.children[0].map(RawUnexpectedNodesSyntax.init(raw:))
32523332
}
3253-
public var specifier: RawTokenListSyntax? {
3254-
layoutView.children[1].map(RawTokenListSyntax.init(raw:))
3333+
public var specifier: RawClosureCaptureItemSpecifierSyntax? {
3334+
layoutView.children[1].map(RawClosureCaptureItemSpecifierSyntax.init(raw:))
32553335
}
32563336
public var unexpectedBetweenSpecifierAndName: RawUnexpectedNodesSyntax? {
32573337
layoutView.children[2].map(RawUnexpectedNodesSyntax.init(raw:))
@@ -10285,46 +10365,6 @@ public struct RawMacroExpansionDeclSyntax: RawDeclSyntaxNodeProtocol {
1028510365
}
1028610366
}
1028710367

10288-
@_spi(RawSyntax)
10289-
public struct RawTokenListSyntax: RawSyntaxNodeProtocol {
10290-
10291-
@_spi(RawSyntax)
10292-
public var layoutView: RawSyntaxLayoutView {
10293-
return raw.layoutView!
10294-
}
10295-
10296-
public static func isKindOf(_ raw: RawSyntax) -> Bool {
10297-
return raw.kind == .tokenList
10298-
}
10299-
10300-
public var raw: RawSyntax
10301-
init(raw: RawSyntax) {
10302-
assert(Self.isKindOf(raw))
10303-
self.raw = raw
10304-
}
10305-
10306-
public init?<Node: RawSyntaxNodeProtocol>(_ other: Node) {
10307-
guard Self.isKindOf(other.raw) else { return nil }
10308-
self.init(raw: other.raw)
10309-
}
10310-
10311-
public init(elements: [RawTokenSyntax], arena: __shared SyntaxArena) {
10312-
let raw = RawSyntax.makeLayout(
10313-
kind: .tokenList, uninitializedCount: elements.count, arena: arena) { layout in
10314-
guard var ptr = layout.baseAddress else { return }
10315-
for elem in elements {
10316-
ptr.initialize(to: elem.raw)
10317-
ptr += 1
10318-
}
10319-
}
10320-
self.init(raw: raw)
10321-
}
10322-
10323-
public var elements: [RawTokenSyntax] {
10324-
layoutView.children.map { RawTokenSyntax(raw: $0!) }
10325-
}
10326-
}
10327-
1032810368
@_spi(RawSyntax)
1032910369
public struct RawAttributeSyntax: RawSyntaxNodeProtocol {
1033010370
@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
@@ -484,10 +484,22 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
484484
assertNoError(kind, 1, verify(layout[1], as: RawTypeSyntax.self))
485485
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
486486
break
487+
case .closureCaptureItemSpecifier:
488+
assert(layout.count == 9)
489+
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
490+
assertNoError(kind, 1, verify(layout[1], as: RawTokenSyntax.self))
491+
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
492+
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self))
493+
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
494+
assertNoError(kind, 5, verify(layout[5], as: RawTokenSyntax?.self))
495+
assertNoError(kind, 6, verify(layout[6], as: RawUnexpectedNodesSyntax?.self))
496+
assertNoError(kind, 7, verify(layout[7], as: RawTokenSyntax?.self))
497+
assertNoError(kind, 8, verify(layout[8], as: RawUnexpectedNodesSyntax?.self))
498+
break
487499
case .closureCaptureItem:
488500
assert(layout.count == 11)
489501
assertNoError(kind, 0, verify(layout[0], as: RawUnexpectedNodesSyntax?.self))
490-
assertNoError(kind, 1, verify(layout[1], as: RawTokenListSyntax?.self))
502+
assertNoError(kind, 1, verify(layout[1], as: RawClosureCaptureItemSpecifierSyntax?.self))
491503
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
492504
assertNoError(kind, 3, verify(layout[3], as: RawTokenSyntax?.self))
493505
assertNoError(kind, 4, verify(layout[4], as: RawUnexpectedNodesSyntax?.self))
@@ -1527,11 +1539,6 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
15271539
assertNoError(kind, 15, verify(layout[15], as: RawMultipleTrailingClosureElementListSyntax?.self))
15281540
assertNoError(kind, 16, verify(layout[16], as: RawUnexpectedNodesSyntax?.self))
15291541
break
1530-
case .tokenList:
1531-
for (index, element) in layout.enumerated() {
1532-
assertNoError(kind, index, verify(element, as: RawTokenSyntax.self))
1533-
}
1534-
break
15351542
case .attribute:
15361543
assert(layout.count == 11)
15371544
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
@@ -60,6 +60,7 @@ extension Syntax {
6060
.node(ClassDeclSyntax.self),
6161
.node(ClassRestrictionTypeSyntax.self),
6262
.node(ClosureCaptureItemListSyntax.self),
63+
.node(ClosureCaptureItemSpecifierSyntax.self),
6364
.node(ClosureCaptureItemSyntax.self),
6465
.node(ClosureCaptureSignatureSyntax.self),
6566
.node(ClosureExprSyntax.self),
@@ -246,7 +247,6 @@ extension Syntax {
246247
.node(TargetFunctionEntrySyntax.self),
247248
.node(TernaryExprSyntax.self),
248249
.node(ThrowStmtSyntax.self),
249-
.node(TokenListSyntax.self),
250250
.node(TryExprSyntax.self),
251251
.node(TupleExprElementListSyntax.self),
252252
.node(TupleExprElementSyntax.self),
@@ -369,6 +369,8 @@ extension SyntaxKind {
369369
return ClassRestrictionTypeSyntax.self
370370
case .closureCaptureItemList:
371371
return ClosureCaptureItemListSyntax.self
372+
case .closureCaptureItemSpecifier:
373+
return ClosureCaptureItemSpecifierSyntax.self
372374
case .closureCaptureItem:
373375
return ClosureCaptureItemSyntax.self
374376
case .closureCaptureSignature:
@@ -741,8 +743,6 @@ extension SyntaxKind {
741743
return TernaryExprSyntax.self
742744
case .throwStmt:
743745
return ThrowStmtSyntax.self
744-
case .tokenList:
745-
return TokenListSyntax.self
746746
case .tryExpr:
747747
return TryExprSyntax.self
748748
case .tupleExprElementList:
@@ -896,6 +896,8 @@ extension SyntaxKind {
896896
return nil
897897
case .closureCaptureItemList:
898898
return nil
899+
case .closureCaptureItemSpecifier:
900+
return "closure capture specifier"
899901
case .closureCaptureItem:
900902
return "closure capture item"
901903
case .closureCaptureSignature:
@@ -1268,8 +1270,6 @@ extension SyntaxKind {
12681270
return "ternay expression"
12691271
case .throwStmt:
12701272
return "'throw' statement"
1271-
case .tokenList:
1272-
return "token list"
12731273
case .tryExpr:
12741274
return "'try' expression"
12751275
case .tupleExprElementList:

0 commit comments

Comments
 (0)