8000 [Concurrency] Add support for 'async' on closures. · swiftlang/swift-syntax@e2b1c40 · GitHub
[go: up one dir, main page]

Skip to content

Commit e2b1c40

Browse files
committed
[Concurrency] Add support for 'async' on closures.
1 parent 27bc2a1 commit e2b1c40

File tree

5 files changed

+51
-10
lines changed

5 files changed

+51
-10
lines changed

Sources/SwiftSyntax/gyb_generated/Misc.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1944,6 +1944,6 @@ extension Syntax {
19441944
extension SyntaxParser {
19451945
static func verifyNodeDeclarationHash() -> Bool {
19461946
return String(cString: swiftparse_syntax_structure_versioning_identifier()!) ==
1947-
"9700f84ac29d74406d59a6433d59aebb33227ade"
1947+
"71bf2d5d9308cb7092ce3660702fe668381dbbab"
19481948
}
19491949
}

Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1917,7 +1917,7 @@ extension ClosureParamSyntax {
19171917

19181918
public struct ClosureSignatureSyntaxBuilder {
19191919
private var layout =
1920-
Array<RawSyntax?>(repeating: nil, count: 5)
1920+
Array<RawSyntax?>(repeating: nil, count: 6)
19211921

19221922
internal init() {}
19231923

@@ -1931,6 +1931,11 @@ public struct ClosureSignatureSyntaxBuilder {
19311931
layout[idx] = node.raw
19321932
}
19331933

1934+
public mutating func useAsyncKeyword(_ node: TokenSyntax) {
1935+
let idx = ClosureSignatureSyntax.Cursor.asyncKeyword.rawValue
1936+
layout[idx] = node.raw
1937+
}
1938+
19341939
public mutating func useThrowsTok(_ node: TokenSyntax) {
19351940
let idx = ClosureSignatureSyntax.Cursor.throwsTok.rawValue
19361941
layout[idx] = node.raw
@@ -1947,8 +1952,8 @@ public struct ClosureSignatureSyntaxBuilder {
19471952
}
19481953

19491954
internal mutating func buildData() -> SyntaxData {
1950-
if (layout[4] == nil) {
1951-
layout[4] = RawSyntax.missingToken(TokenKind.inKeyword)
1955+
if (layout[5] == nil) {
1956+
layout[5] = RawSyntax.missingToken(TokenKind.inKeyword)
19521957
}
19531958

19541959
return .forRoot(RawSyntax.createAndCalcLength(kind: .closureSignature,

Sources/SwiftSyntax/gyb_generated/SyntaxClassification.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ extension SyntaxClassification {
6767
switch (parentKind, indexInParent) {
6868
case (.arrowExpr, 0):
6969
return (.keyword, false)
70+
case (.closureSignature, 2):
71+
return (.keyword, false)
7072
case (.expressionSegment, 2):
7173
return (.stringInterpolationAnchor, true)
7274
case (.functionSignature, 1):

Sources/SwiftSyntax/gyb_generated/SyntaxFactory.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -996,10 +996,11 @@ public enum SyntaxFactory {
996996
], length: .zero, presence: .present))
997997
return ClosureParamListSyntax(data)
998998
}
999-
public static func makeClosureSignature(capture: ClosureCaptureSignatureSyntax?, input: Syntax?, throwsTok: TokenSyntax?, output: ReturnClauseSyntax?, inTok: TokenSyntax) -> ClosureSignatureSyntax {
999+
public static func makeClosureSignature(capture: ClosureCaptureSignatureSyntax?, input: Syntax?, asyncKeyword: TokenSyntax?, throwsTok: TokenSyntax?, output: ReturnClauseSyntax?, inTok: TokenSyntax) -> ClosureSignatureSyntax {
10001000
let layout: [RawSyntax?] = [
10011001
capture?.raw,
10021002
input?.raw,
1003+
asyncKeyword?.raw,
10031004
throwsTok?.raw,
10041005
output?.raw,
10051006
inTok.raw,
@@ -1017,6 +1018,7 @@ public enum SyntaxFactory {
10171018
nil,
10181019
nil,
10191020
nil,
1021+
nil,
10201022
RawSyntax.missingToken(TokenKind.inKeyword),
10211023
], length: .zero, presence: .present))
10221024
return ClosureSignatureSyntax(data)

Sources/SwiftSyntax/gyb_generated/syntax_nodes/SyntaxNodes.swift

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1505,6 +1505,7 @@ public struct ClosureSignatureSyntax: SyntaxProtocol, SyntaxHashable {
15051505
enum Cursor: Int {
15061506
case capture
15071507
case input
1508+
case asyncKeyword
15081509
case throwsTok
15091510
case output
15101511
case inTok
@@ -1575,6 +1576,28 @@ public struct ClosureSignatureSyntax: SyntaxProtocol, SyntaxHashable {
15751576
return ClosureSignatureSyntax(newData)
15761577
}
15771578

1579+
public var asyncKeyword: TokenSyntax? {
1580+
get {
1581+
let childData = data.child(at: Cursor.asyncKeyword,
1582+
parent: Syntax(self))
1583+
if childData == nil { return nil }
1584+
return TokenSyntax(childData!)
1585+
}
1586+
set(value) {
1587+
self = withAsyncKeyword(value)
1588+
}
1589+
}
1590+
1591+
/// Returns a copy of the receiver with its `asyncKeyword` replaced.
1592+
/// - param newChild: The new `asyncKeyword` to replace the node's
1593+
/// current `asyncKeyword`, if present.
1594+
public func withAsyncKeyword(
1595+
_ newChild: TokenSyntax?) -> ClosureSignatureSyntax {
1596+
let raw = newChild?.raw
1597+
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
1598+
return ClosureSignatureSyntax(newData)
1599+
}
1600+
15781601
public var throwsTok: TokenSyntax? {
15791602
get {
15801603
let childData = data.child(at: Cursor.throwsTok,
@@ -1643,7 +1666,7 @@ public struct ClosureSignatureSyntax: SyntaxProtocol, SyntaxHashable {
16431666

16441667
public func _validateLayout() {
16451668
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
1646-
assert(rawChildren.count == 5)
1669+
assert(rawChildren.count == 6)
16471670
// Check child #0 child is ClosureCaptureSignatureSyntax or missing
16481671
if let raw = rawChildren[0].raw {
16491672
let info = rawChildren[0].syntaxInfo
@@ -1668,21 +1691,29 @@ public struct ClosureSignatureSyntax: SyntaxProtocol, SyntaxHashable {
16681691
let syntaxChild = Syntax(syntaxData)
16691692
assert(syntaxChild.is(TokenSyntax.self))
16701693
}
1671-
// Check child #3 child is ReturnClauseSyntax or missing
1694+
// Check child #3 child is TokenSyntax or missing
16721695
if let raw = rawChildren[3].raw {
16731696
let info = rawChildren[3].syntaxInfo
16741697
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
16751698
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
16761699
let syntaxChild = Syntax(syntaxData)
1677-
assert(syntaxChild.is(ReturnClauseSyntax.self))
1700+
assert(syntaxChild.is(TokenSyntax.self))
16781701
}
1679-
// Check child #4 child is TokenSyntax
1680-
assert(rawChildren[4].raw != nil)
1702+
// Check child #4 child is ReturnClauseSyntax or missing
16811703
if let raw = rawChildren[4].raw {
16821704
let info = rawChildren[4].syntaxInfo
16831705
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
16841706
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
16851707
let syntaxChild = Syntax(syntaxData)
1708+
assert(syntaxChild.is(ReturnClauseSyntax.self))
1709+
}
1710+
// Check child #5 child is TokenSyntax
1711+
assert(rawChildren[5].raw != nil)
1712+
if let raw = rawChildren[5].raw {
1713+
let info = rawChildren[5].syntaxInfo
1714+
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
1715+
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
1716+
let syntaxChild = Syntax(syntaxData)
16861717
assert(syntaxChild.is(TokenSyntax.self))
16871718
}
16881719
}
@@ -1693,6 +1724,7 @@ extension ClosureSignatureSyntax: CustomReflectable {
16931724
return Mirror(self, children: [
16941725
"capture": capture.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16951726
"input": input.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
1727+
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16961728
"throwsTok": throwsTok.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16971729
"output": output.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16981730
"inTok": Syntax(inTok).asProtocol(SyntaxProtocol.self),

0 commit comments

Comments
 (0)
0