Skip to content

Commit f22da2e

Browse files
authored
Merge pull request #2661 from gottesmm/release/6.0-rdar128216574
[6.0] Add support for sending
2 parents acc70ad + d1ae52a commit f22da2e

File tree

15 files changed

+74
-6
lines changed

15 files changed

+74
-6
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 borrowingSwitch
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 .borrowingSwitch:
3738
return "borrowing pattern matching"
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)

Sources/SwiftParser/generated/ExperimentalFeatures.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,7 @@ extension Parser.ExperimentalFeatures {
4141

4242
/// Whether to enable the parsing of borrowing pattern matching.
4343
public static let borrowingSwitch = Self (rawValue: 1 << 5)
44+
45+
/// Whether to enable the parsing of SendingArgsAndResults.
46+
public static let sendingArgsAndResults = Self (rawValue: 1 << 6)
4447
}

Sources/SwiftParser/generated/Parser+TokenSpecSet.swift

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -814,6 +814,10 @@ extension DeclModifierSyntax {
814814
case transferring
815815
case unowned
816816
case weak
817+
#if compiler(>=5.8)
818+
@_spi(ExperimentalLanguageFeatures)
819+
#endif
820+
case sending
817821

818822
init?(lexeme: Lexer.Lexeme, experimentalFeatures: Parser.ExperimentalFeatures) {
819823
switch PrepareForKeywordMatch(lexeme) {
@@ -891,6 +895,8 @@ extension DeclModifierSyntax {
891895
self = .unowned
892896
case TokenSpec(.weak):
893897
self = .weak
898+
case TokenSpec(.sending) where experimentalFeatures.contains(.sendingArgsAndResults):
899+
self = .sending
894900
default:
895901
return nil
896902
}
@@ -972,6 +978,8 @@ extension DeclModifierSyntax {
972978
self = .unowned
973979
case TokenSpec(.weak):
974980
self = .weak
981+
case TokenSpec(.sending):
982+
self = .sending
975983
default:
976984
return nil
977985
}
@@ -1053,6 +1061,8 @@ extension DeclModifierSyntax {
10531061
return .keyword(.unowned)
10541062
case .weak:
10551063
return .keyword(.weak)
1064+
case .sending:
1065+
return .keyword(.sending)
10561066
}
10571067
}
10581068

@@ -1136,6 +1146,8 @@ extension DeclModifierSyntax {
11361146
return .keyword(.unowned)
11371147
case .weak:
11381148
return .keyword(.weak)
1149+
case .sending:
1150+
return .keyword(.sending)
11391151
}
11401152
}
11411153
}
@@ -3347,6 +3359,10 @@ extension SimpleTypeSpecifierSyntax {
33473359
@_spi(ExperimentalLanguageFeatures)
33483360
#endif
33493361
case _resultDependsOn
3362+
#if compiler(>=5.8)
3363+
@_spi(ExperimentalLanguageFeatures)
3364+
#endif
3365+
case sending
33503366

33513367
init?(lexeme: Lexer.Lexeme, experimentalFeatures: Parser.ExperimentalFeatures) {
33523368
switch PrepareForKeywordMatch(lexeme) {
@@ -3368,6 +3384,8 @@ extension SimpleTypeSpecifierSyntax {
33683384
self = .transferring
33693385
case TokenSpec(._resultDependsOn) where experimentalFeatures.contains(.nonescapableTypes):
33703386
self = ._resultDependsOn
3387+
case TokenSpec(.sending) where experimentalFeatures.contains(.sendingArgsAndResults):
3388+
self = .sending
33713389
default:
33723390
return nil
33733391
}
@@ -3393,6 +3411,8 @@ extension SimpleTypeSpecifierSyntax {
33933411
self = .transferring
33943412
case TokenSpec(._resultDependsOn):
33953413
self = ._resultDependsOn
3414+
case TokenSpec(.sending):
3415+
self = .sending
33963416
default:
33973417
return nil
33983418
}
@@ -3418,6 +3438,8 @@ extension SimpleTypeSpecifierSyntax {
34183438
return .keyword(.transferring)
34193439
case ._resultDependsOn:
34203440
return .keyword(._resultDependsOn)
3441+
case .sending:
3442+
return .keyword(.sending)
34213443
}
34223444
}
34233445

@@ -3445,6 +3467,8 @@ extension SimpleTypeSpecifierSyntax {
34453467
return .keyword(.transferring)
34463468
case ._resultDependsOn:
34473469
return .keyword(._resultDependsOn)
3470+
case .sending:
3471+
return .keyword(.sending)
34483472
}
34493473
}
34503474
}

0 commit comments

Comments
 (0)