Skip to content

Commit 141631f

Browse files
authored
Merge pull request swiftlang#231 from DougGregor/async-function-types
[Concurrency] Add Syntax support for `async`.
2 parents 5e339c5 + 2c4f5dc commit 141631f

File tree

6 files changed

+139
-22
lines changed

6 files changed

+139
-22
lines changed

Sources/SwiftSyntax/gyb_generated/Misc.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,6 @@ extension Syntax {
19361936
extension SyntaxParser {
19371937
static func verifyNodeDeclarationHash() -> Bool {
19381938
return String(cString: swiftparse_syntax_structure_versioning_identifier()!) ==
1939-
"77e9551aa9f94761b9808f610830fa826cc8323a"
1939+
"3a049b2faed8cf5c7c125ffe4354a6e8b5d9620f"
19401940
}
19411941
}

Sources/SwiftSyntax/gyb_generated/SyntaxBuilders.swift

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -955,10 +955,15 @@ extension BinaryOperatorExprSyntax {
955955

956956
public struct ArrowExprSyntaxBuilder {
957957
private var layout =
958-
Array<RawSyntax?>(repeating: nil, count: 2)
958+
Array<RawSyntax?>(repeating: nil, count: 3)
959959

960960
internal init() {}
961961

962+
public mutating func useAsyncKeyword(_ node: TokenSyntax) {
963+
let idx = ArrowExprSyntax.Cursor.asyncKeyword.rawValue
964+
layout[idx] = node.raw
965+
}
966+
962967
public mutating func useThrowsToken(_ node: TokenSyntax) {
963968
let idx = ArrowExprSyntax.Cursor.throwsToken.rawValue
964969
layout[idx] = node.raw
@@ -970,8 +975,8 @@ public struct ArrowExprSyntaxBuilder {
970975
}
971976

972977
internal mutating func buildData() -> SyntaxData {
973-
if (layout[1] == nil) {
974-
layout[1] = RawSyntax.missingToken(TokenKind.arrow)
978+
if (layout[2] == nil) {
979+
layout[2] = RawSyntax.missingToken(TokenKind.arrow)
975980
}
976981

977982
return .forRoot(RawSyntax.createAndCalcLength(kind: .arrowExpr,
@@ -3304,7 +3309,7 @@ extension ReturnClauseSyntax {
33043309

33053310
public struct FunctionSignatureSyntaxBuilder {
33063311
private var layout =
3307-
Array<RawSyntax?>(repeating: nil, count: 3)
3312+
Array<RawSyntax?>(repeating: nil, count: 4)
33083313

33093314
internal init() {}
33103315

@@ -3313,6 +3318,11 @@ public struct FunctionSignatureSyntaxBuilder {
33133318
layout[idx] = node.raw
33143319
}
33153320

3321+
public mutating func useAsyncKeyword(_ node: TokenSyntax) {
3322+
let idx = FunctionSignatureSyntax.Cursor.asyncKeyword.rawValue
3323+
layout[idx] = node.raw
3324+
}
3325+
33163326
public mutating func useThrowsOrRethrowsKeyword(_ node: TokenSyntax) {
33173327
let idx = FunctionSignatureSyntax.Cursor.throwsOrRethrowsKeyword.rawValue
33183328
layout[idx] = node.raw
@@ -9480,7 +9490,7 @@ extension TupleTypeSyntax {
94809490

94819491
public struct FunctionTypeSyntaxBuilder {
94829492
private var layout =
9483-
Array<RawSyntax?>(repeating: nil, count: 6)
9493+
Array<RawSyntax?>(repeating: nil, count: 7)
94849494

94859495
internal init() {}
94869496

@@ -9505,6 +9515,11 @@ public struct FunctionTypeSyntaxBuilder {
95059515
layout[idx] = node.raw
95069516
}
95079517

9518+
public mutating func useAsyncKeyword(_ node: TokenSyntax) {
9519+
let idx = FunctionTypeSyntax.Cursor.asyncKeyword.rawValue
9520+
layout[idx] = node.raw
9521+
}
9522+
95089523
public mutating func useThrowsOrRethrowsKeyword(_ node: TokenSyntax) {
95099524
let idx = FunctionTypeSyntax.Cursor.throwsOrRethrowsKeyword.rawValue
95109525
layout[idx] = node.raw
@@ -9530,11 +9545,11 @@ public struct FunctionTypeSyntaxBuilder {
95309545
if (layout[2] == nil) {
95319546
layout[2] = RawSyntax.missingToken(TokenKind.rightParen)
95329547
}
9533-
if (layout[4] == nil) {
9534-
layout[4] = RawSyntax.missingToken(TokenKind.arrow)
9535-
}
95369548
if (layout[5] == nil) {
9537-
layout[5] = RawSyntax.missing(SyntaxKind.type)
9549+
layout[5] = RawSyntax.missingToken(TokenKind.arrow)
9550+
}
9551+
if (layout[6] == nil) {
9552+
layout[6] = RawSyntax.missing(SyntaxKind.type)
95389553
}
95399554

95409555
return .forRoot(RawSyntax.createAndCalcLength(kind: .functionType,

Sources/SwiftSyntax/gyb_generated/SyntaxFactory.swift

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -579,8 +579,9 @@ public enum SyntaxFactory {
579579
], length: .zero, presence: .present))
580580
return BinaryOperatorExprSyntax(data)
581581
}
582-
public static func makeArrowExpr(throwsToken: TokenSyntax?, arrowToken: TokenSyntax) -> ArrowExprSyntax {
582+
public static func makeArrowExpr(asyncKeyword: TokenSyntax?, throwsToken: TokenSyntax?, arrowToken: TokenSyntax) -> ArrowExprSyntax {
583583
let layout: [RawSyntax?] = [
584+
asyncKeyword?.raw,
584585
throwsToken?.raw,
585586
arrowToken.raw,
586587
]
@@ -594,6 +595,7 @@ public enum SyntaxFactory {
594595
let data = SyntaxData.forRoot(RawSyntax.create(kind: .arrowExpr,
595596
layout: [
596597
nil,
598+
nil,
597599
RawSyntax.missingToken(TokenKind.arrow),
598600
], length: .zero, presence: .present))
599601
return ArrowExprSyntax(data)
@@ -1564,9 +1566,10 @@ public enum SyntaxFactory {
15641566
], length: .zero, presence: .present))
15651567
return ReturnClauseSyntax(data)
15661568
}
1567-
public static func makeFunctionSignature(input: ParameterClauseSyntax, throwsOrRethrowsKeyword: TokenSyntax?, output: ReturnClauseSyntax?) -> FunctionSignatureSyntax {
1569+
public static func makeFunctionSignature(input: ParameterClauseSyntax, asyncKeyword: TokenSyntax?, throwsOrRethrowsKeyword: TokenSyntax?, output: ReturnClauseSyntax?) -> FunctionSignatureSyntax {
15681570
let layout: [RawSyntax?] = [
15691571
input.raw,
1572+
asyncKeyword?.raw,
15701573
throwsOrRethrowsKeyword?.raw,
15711574
output?.raw,
15721575
]
@@ -1582,6 +1585,7 @@ public enum SyntaxFactory {
15821585
RawSyntax.missing(SyntaxKind.parameterClause),
15831586
nil,
15841587
nil,
1588+
nil,
15851589
], length: .zero, presence: .present))
15861590
return FunctionSignatureSyntax(data)
15871591
}
@@ -4291,11 +4295,12 @@ public enum SyntaxFactory {
42914295
], length: .zero, presence: .present))
42924296
return TupleTypeSyntax(data)
42934297
}
4294-
public static func makeFunctionType(leftParen: TokenSyntax, arguments: TupleTypeElementListSyntax, rightParen: TokenSyntax, throwsOrRethrowsKeyword: TokenSyntax?, arrow: TokenSyntax, returnType: TypeSyntax) -> FunctionTypeSyntax {
4298+
public static func makeFunctionType(leftParen: TokenSyntax, arguments: TupleTypeElementListSyntax, rightParen: TokenSyntax, asyncKeyword: TokenSyntax?, throwsOrRethrowsKeyword: TokenSyntax?, arrow: TokenSyntax, returnType: TypeSyntax) -> FunctionTypeSyntax {
42954299
let layout: [RawSyntax?] = [
42964300
leftParen.raw,
42974301
arguments.raw,
42984302
rightParen.raw,
4303+
asyncKeyword?.raw,
42994304
throwsOrRethrowsKeyword?.raw,
43004305
arrow.raw,
43014306
returnType.raw,
@@ -4313,6 +4318,7 @@ public enum SyntaxFactory {
43134318
RawSyntax.missing(SyntaxKind.tupleTypeElementList),
43144319
RawSyntax.missingToken(TokenKind.rightParen),
43154320
nil,
4321+
nil,
43164322
RawSyntax.missingToken(TokenKind.arrow),
43174323
RawSyntax.missing(SyntaxKind.type),
43184324
], length: .zero, presence: .present))

Sources/SwiftSyntax/gyb_generated/syntax_nodes/SyntaxExprNodes.swift

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1581,6 +1581,7 @@ extension BinaryOperatorExprSyntax: CustomReflectable {
15811581

15821582
public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
15831583
enum Cursor: Int {
1584+
case asyncKeyword
15841585
case throwsToken
15851586
case arrowToken
15861587
}
@@ -1606,6 +1607,28 @@ public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
16061607
return Swift.type(of: self)
16071608
}
16081609

1610+
public var asyncKeyword: TokenSyntax? {
1611+
get {
1612+
let childData = data.child(at: Cursor.asyncKeyword,
1613+
parent: Syntax(self))
1614+
if childData == nil { return nil }
1615+
return TokenSyntax(childData!)
1616+
}
1617+
set(value) {
1618+
self = withAsyncKeyword(value)
1619+
}
1620+
}
1621+
1622+
/// Returns a copy of the receiver with its `asyncKeyword` replaced.
1623+
/// - param newChild: The new `asyncKeyword` to replace the node's
1624+
/// current `asyncKeyword`, if present.
1625+
public func withAsyncKeyword(
1626+
_ newChild: TokenSyntax?) -> ArrowExprSyntax {
1627+
let raw = newChild?.raw
1628+
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
1629+
return ArrowExprSyntax(newData)
1630+
}
1631+
16091632
public var throwsToken: TokenSyntax? {
16101633
get {
16111634
let childData = data.child(at: Cursor.throwsToken,
@@ -1652,7 +1675,7 @@ public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
16521675

16531676
public func _validateLayout() {
16541677
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
1655-
assert(rawChildren.count == 2)
1678+
assert(rawChildren.count == 3)
16561679
// Check child #0 child is TokenSyntax or missing
16571680
if let raw = rawChildren[0].raw {
16581681
let info = rawChildren[0].syntaxInfo
@@ -1661,21 +1684,30 @@ public struct ArrowExprSyntax: ExprSyntaxProtocol, SyntaxHashable {
16611684
let syntaxChild = Syntax(syntaxData)
16621685
assert(syntaxChild.is(TokenSyntax.self))
16631686
}
1664-
// Check child #1 child is TokenSyntax
1665-
assert(rawChildren[1].raw != nil)
1687+
// Check child #1 child is TokenSyntax or missing
16661688
if let raw = rawChildren[1].raw {
16671689
let info = rawChildren[1].syntaxInfo
16681690
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
16691691
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
16701692
let syntaxChild = Syntax(syntaxData)
16711693
assert(syntaxChild.is(TokenSyntax.self))
16721694
}
1695+
// Check child #2 child is TokenSyntax
1696+
assert(rawChildren[2].raw != nil)
1697+
if let raw = rawChildren[2].raw {
1698+
let info = rawChildren[2].syntaxInfo
1699+
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
1700+
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
1701+
let syntaxChild = Syntax(syntaxData)
1702+
assert(syntaxChild.is(TokenSyntax.self))
1703+
}
16731704
}
16741705
}
16751706

16761707
extension ArrowExprSyntax: CustomReflectable {
16771708
public var customMirror: Mirror {
16781709
return Mirror(self, children: [
1710+
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16791711
"throwsToken": throwsToken.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16801712
"arrowToken": Syntax(arrowToken).asProtocol(SyntaxProtocol.self),
16811713
])

Sources/SwiftSyntax/gyb_generated/syntax_nodes/SyntaxNodes.swift

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2606,6 +2606,7 @@ extension ReturnClauseSyntax: CustomReflectable {
26062606
public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
26072607
enum Cursor: Int {
26082608
case input
2609+
case asyncKeyword
26092610
case throwsOrRethrowsKeyword
26102611
case output
26112612
}
@@ -2652,6 +2653,28 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
26522653
return FunctionSignatureSyntax(newData)
26532654
}
26542655

2656+
public var asyncKeyword: TokenSyntax? {
2657+
get {
2658+
let childData = data.child(at: Cursor.asyncKeyword,
2659+
parent: Syntax(self))
2660+
if childData == nil { return nil }
2661+
return TokenSyntax(childData!)
2662+
}
2663+
set(value) {
2664+
self = withAsyncKeyword(value)
2665+
}
2666+
}
2667+
2668+
/// Returns a copy of the receiver with its `asyncKeyword` replaced.
2669+
/// - param newChild: The new `asyncKeyword` to replace the node's
2670+
/// current `asyncKeyword`, if present.
2671+
public func withAsyncKeyword(
2672+
_ newChild: TokenSyntax?) -> FunctionSignatureSyntax {
2673+
let raw = newChild?.raw
2674+
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
2675+
return FunctionSignatureSyntax(newData)
2676+
}
2677+
26552678
public var throwsOrRethrowsKeyword: TokenSyntax? {
26562679
get {
26572680
let childData = data.child(at: Cursor.throwsOrRethrowsKeyword,
@@ -2699,7 +2722,7 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
26992722

27002723
public func _validateLayout() {
27012724
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
2702-
assert(rawChildren.count == 3)
2725+
assert(rawChildren.count == 4)
27032726
// Check child #0 child is ParameterClauseSyntax
27042727
assert(rawChildren[0].raw != nil)
27052728
if let raw = rawChildren[0].raw {
@@ -2717,12 +2740,20 @@ public struct FunctionSignatureSyntax: SyntaxProtocol, SyntaxHashable {
27172740
let syntaxChild = Syntax(syntaxData)
27182741
assert(syntaxChild.is(TokenSyntax.self))
27192742
}
2720-
// Check child #2 child is ReturnClauseSyntax or missing
2743+
// Check child #2 child is TokenSyntax or missing
27212744
if let raw = rawChildren[2].raw {
27222745
let info = rawChildren[2].syntaxInfo
27232746
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
27242747
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
27252748
let syntaxChild = Syntax(syntaxData)
2749+
assert(syntaxChild.is(TokenSyntax.self))
2750+
}
2751+
// Check child #3 child is ReturnClauseSyntax or missing
2752+
if let raw = rawChildren[3].raw {
2753+
let info = rawChildren[3].syntaxInfo
2754+
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
2755+
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
2756+
let syntaxChild = Syntax(syntaxData)
27262757
assert(syntaxChild.is(ReturnClauseSyntax.self))
27272758
}
27282759
}
@@ -2732,6 +2763,7 @@ extension FunctionSignatureSyntax: CustomReflectable {
27322763
public var customMirror: Mirror {
27332764
return Mirror(self, children: [
27342765
"input": Syntax(input).asProtocol(SyntaxProtocol.self),
2766+
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
27352767
"throwsOrRethrowsKeyword": throwsOrRethrowsKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
27362768
"output": output.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
27372769
])

Sources/SwiftSyntax/gyb_generated/syntax_nodes/SyntaxTypeNodes.swift

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1444,6 +1444,7 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
14441444
case leftParen
14451445
case arguments
14461446
case rightParen
1447+
case asyncKeyword
14471448
case throwsOrRethrowsKeyword
14481449
case arrow
14491450
case returnType
@@ -1552,6 +1553,28 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
15521553
return FunctionTypeSyntax(newData)
15531554
}
15541555

1556+
public var asyncKeyword: TokenSyntax? {
1557+
get {
1558+
let childData = data.child(at: Cursor.asyncKeyword,
1559+
parent: Syntax(self))
1560+
if childData == nil { return nil }
1561+
return TokenSyntax(childData!)
1562+
}
1563+
set(value) {
1564+
self = withAsyncKeyword(value)
1565+
}
1566+
}
1567+
1568+
/// Returns a copy of the receiver with its `asyncKeyword` replaced.
1569+
/// - param newChild: The new `asyncKeyword` to replace the node's
1570+
/// current `asyncKeyword`, if present.
1571+
public func withAsyncKeyword(
1572+
_ newChild: TokenSyntax?) -> FunctionTypeSyntax {
1573+
let raw = newChild?.raw
1574+
let newData = data.replacingChild(raw, at: Cursor.asyncKeyword)
1575+
return FunctionTypeSyntax(newData)
1576+
}
1577+
15551578
public var throwsOrRethrowsKeyword: TokenSyntax? {
15561579
get {
15571580
let childData = data.child(at: Cursor.throwsOrRethrowsKeyword,
@@ -1619,7 +1642,7 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
16191642

16201643
public func _validateLayout() {
16211644
let rawChildren = Array(RawSyntaxChildren(Syntax(self)))
1622-
assert(rawChildren.count == 6)
1645+
assert(rawChildren.count == 7)
16231646
// Check child #0 child is TokenSyntax
16241647
assert(rawChildren[0].raw != nil)
16251648
if let raw = rawChildren[0].raw {
@@ -1655,22 +1678,30 @@ public struct FunctionTypeSyntax: TypeSyntaxProtocol, SyntaxHashable {
16551678
let syntaxChild = Syntax(syntaxData)
16561679
assert(syntaxChild.is(TokenSyntax.self))
16571680
}
1658-
// Check child #4 child is TokenSyntax
1659-
assert(rawChildren[4].raw != nil)
1681+
// Check child #4 child is TokenSyntax or missing
16601682
if let raw = rawChildren[4].raw {
16611683
let info = rawChildren[4].syntaxInfo
16621684
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
16631685
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
16641686
let syntaxChild = Syntax(syntaxData)
16651687
assert(syntaxChild.is(TokenSyntax.self))
16661688
}
1667-
// Check child #5 child is TypeSyntax
1689+
// Check child #5 child is TokenSyntax
16681690
assert(rawChildren[5].raw != nil)
16691691
if let raw = rawChildren[5].raw {
16701692
let info = rawChildren[5].syntaxInfo
16711693
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
16721694
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
16731695
let syntaxChild = Syntax(syntaxData)
1696+
assert(syntaxChild.is(TokenSyntax.self))
1697+
}
1698+
// Check child #6 child is TypeSyntax
1699+
assert(rawChildren[6].raw != nil)
1700+
if let raw = rawChildren[6].raw {
1701+
let info = rawChildren[6].syntaxInfo
1702+
let absoluteRaw = AbsoluteRawSyntax(raw: raw, info: info)
1703+
let syntaxData = SyntaxData(absoluteRaw, parent: Syntax(self))
1704+
let syntaxChild = Syntax(syntaxData)
16741705
assert(syntaxChild.is(TypeSyntax.self))
16751706
}
16761707
}
@@ -1682,6 +1713,7 @@ extension FunctionTypeSyntax: CustomReflectable {
16821713
"leftParen": Syntax(leftParen).asProtocol(SyntaxProtocol.self),
16831714
"arguments": Syntax(arguments).asProtocol(SyntaxProtocol.self),
16841715
"rightParen": Syntax(rightParen).asProtocol(SyntaxProtocol.self),
1716+
"asyncKeyword": asyncKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16851717
"throwsOrRethrowsKeyword": throwsOrRethrowsKeyword.map(Syntax.init)?.asProtocol(SyntaxProtocol.self) as Any,
16861718
"arrow": Syntax(arrow).asProtocol(SyntaxProtocol.self),
16871719
"returnType": Syntax(returnType).asProtocol(SyntaxProtocol.self),

0 commit comments

Comments
 (0)