Skip to content

Commit 902dedf

Browse files
committed
[sending] Add support for 'sending'.
rdar://128216574
1 parent 3f80354 commit 902dedf

File tree

9 files changed

+32
-2
lines changed

9 files changed

+32
-2
lines changed

CodeGeneration/Sources/SyntaxSupport/DeclNodes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,7 @@ public let DECL_NODES: [Node] = [
472472
.keyword(.transferring),
473473
.keyword(.unowned),
474474
.keyword(.weak),
475+
.keyword(.sending),
475476
])
476477
),
477478
Child(

CodeGeneration/Sources/SyntaxSupport/ExperimentalFeatures.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public enum ExperimentalFeature: String, CaseIterable {
1919
case nonescapableTypes
2020
case transferringArgsAndResults
2121
case trailingComma
22+
case sendingArgsAndResults
2223

2324
/// The name of the feature, which is used in the doc comment.
2425
public var featureName: String {
@@ -35,6 +36,8 @@ public enum ExperimentalFeature: String, CaseIterable {
3536
return "TransferringArgsAndResults"
3637
case .trailingComma:
3738
return "trailing comma"
39+
case .sendingArgsAndResults:
40+
return "SendingArgsAndResults"
3841
}
3942
}
4043

CodeGeneration/Sources/SyntaxSupport/KeywordSpec.swift

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ public enum Keyword: CaseIterable {
263263
case safe
264264
case scoped
265265
case `self`
266+
case sending
266267
case `Self`
267268
case Sendable
268269
case set
@@ -701,6 +702,11 @@ public enum Keyword: CaseIterable {
701702
"transferring",
702703
experimentalFeature: .transferringArgsAndResults
703704
)
705+
case .sending:
706+
return KeywordSpec(
707+
"sending",
708+
experimentalFeature: .sendingArgsAndResults
709+
)
704710
case .transpose:
705711
return KeywordSpec("transpose")
706712
case .true:

CodeGeneration/Sources/SyntaxSupport/TypeNodes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -593,6 +593,7 @@ public let TYPE_NODES: [Node] = [
593593
.keyword(.consuming),
594594
.keyword(.transferring),
595595
.keyword(._resultDependsOn),
596+
.keyword(.sending),
596597
]),
597598
documentation: "The specifier token that's attached to the type."
598599
)

Sources/SwiftParser/Declarations.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ extension DeclarationModifier {
2323
.borrowing, .class, .consuming, .convenience, .distributed, .dynamic,
2424
.final, .indirect, .infix, .isolated, .lazy, .mutating, .nonmutating,
2525
.optional, .override, .postfix, .prefix, .reasync, ._resultDependsOn, ._resultDependsOnSelf, .required,
26-
.rethrows, .static, .weak, .transferring:
26+
.rethrows, .static, .weak, .transferring, .sending:
2727
return false
2828
case .fileprivate, .internal, .nonisolated, .package, .open, .private,
2929
.public, .unowned:

Sources/SwiftParser/Patterns.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -378,6 +378,7 @@ extension Parser.Lookahead {
378378
&& !self.at(.keyword(.borrowing))
379379
&& !self.at(.keyword(.consuming))
380380
&& !(experimentalFeatures.contains(.transferringArgsAndResults) && self.at(.keyword(.transferring)))
381+
&& !(experimentalFeatures.contains(.sendingArgsAndResults) && self.at(.keyword(.sending)))
381382
&& !(experimentalFeatures.contains(.nonescapableTypes) && self.at(.keyword(._resultDependsOn)))
382383
{
383384
return true

Sources/SwiftParser/TokenPrecedence.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ enum TokenPrecedence: Comparable {
237237
.__setter_access, .indirect, .isolated, .nonisolated, .distributed, ._local,
238238
.inout, ._mutating, ._borrow, ._borrowing, .borrowing, ._consuming, .consuming, .consume, ._resultDependsOnSelf,
239239
._resultDependsOn,
240-
.transferring, .dependsOn, .scoped,
240+
.transferring, .dependsOn, .scoped, .sending,
241241
// Accessors
242242
.get, .set, .didSet, .willSet, .unsafeAddress, .addressWithOwner, .addressWithNativeOwner, .unsafeMutableAddress,
243243
.mutableAddressWithOwner, .mutableAddressWithNativeOwner, ._read, ._modify,

Sources/SwiftParser/TokenSpecSet.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -377,6 +377,7 @@ enum DeclarationModifier: TokenSpecSet {
377377
case reasync
378378
case required
379379
case `rethrows`
380+
case sending
380381
case `static`
381382
case transferring
382383
case unowned
@@ -420,6 +421,7 @@ enum DeclarationModifier: TokenSpecSet {
420421
case TokenSpec(.rethrows): self = .rethrows
421422
case TokenSpec(.static): self = .static
422423
case TokenSpec(.transferring): self = .transferring
424+
case TokenSpec(.sending): self = .sending
423425
case TokenSpec(.unowned): self = .unowned
424426
case TokenSpec(.weak): self = .weak
425427
case TokenSpec(._resultDependsOn) where experimentalFeatures.contains(.nonescapableTypes): self = ._resultDependsOn
@@ -465,6 +467,7 @@ enum DeclarationModifier: TokenSpecSet {
465467
case .rethrows: return TokenSpec(.rethrows, recoveryPrecedence: .declKeyword)
466468
case .static: return .keyword(.static)
467469
case .transferring: return .keyword(.transferring)
470+
case .sending: return .keyword(.sending)
468471
case .unowned: return TokenSpec(.unowned, recoveryPrecedence: .declKeyword)
469472
case .weak: return TokenSpec(.weak, recoveryPrecedence: .declKeyword)
470473
case ._resultDependsOn: return TokenSpec(._resultDependsOn, recoveryPrecedence: .declKeyword)

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3309,6 +3309,21 @@ final class DeclarationTests: ParserTestCase {
33093309
)
33103310
}
33113311

3312+
func testSendingTypeSpecifier() {
3313+
assertParse(
3314+
"func testVarDeclTupleElt() -> (sending String, String) {}",
3315+
experimentalFeatures: .sendingArgsAndResults
3316+
)
3317+
assertParse(
3318+
"func testVarDeclTuple2(_ x: (sending String)) {}",
3319+
experimentalFeatures: .sendingArgsAndResults
3320+
)
3321+
assertParse(
3322+
"func testVarDeclTuple2(_ x: (sending String, String)) {}",
3323+
experimentalFeatures: .sendingArgsAndResults
3324+
)
3325+
}
3326+
33123327
func testMisplacedAttributeInVarDeclWithMultipleBindings() {
33133328
assertParse(
33143329
"""

0 commit comments

Comments
 (0)