Skip to content

Commit ab4b2bd

Browse files
authored
Merge pull request #2386 from apple/resultDependsOn
Add initial support for _resultDependsOn
2 parents 434503a + c9ee77f commit ab4b2bd

File tree

11 files changed

+49
-4
lines changed

11 files changed

+49
-4
lines changed

CodeGeneration/Sources/SyntaxSupport/KeywordSpec.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ public enum Keyword: CaseIterable {
239239
case renamed
240240
case `repeat`
241241
case required
242+
case _resultDependsOn
242243
case _resultDependsOnSelf
243244
case `rethrows`
244245
case retroactive
@@ -611,6 +612,8 @@ public enum Keyword: CaseIterable {
611612
return KeywordSpec("repeat", isLexerClassified: true)
612613
case .required:
613614
return KeywordSpec("required")
615+
case ._resultDependsOn:
616+
return KeywordSpec("_resultDependsOn", experimentalFeature: .nonEscapableTypes)
614617
case ._resultDependsOnSelf:
615618
return KeywordSpec("_resultDependsOnSelf", experimentalFeature: .nonEscapableTypes)
616619
case .rethrows:

CodeGeneration/Sources/SyntaxSupport/TypeNodes.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ public let TYPE_NODES: [Node] = [
5252
.keyword(._const),
5353
.keyword(.borrowing),
5454
.keyword(.consuming),
55+
.keyword(._resultDependsOn),
5556
]),
5657
isOptional: true
5758
),

Sources/SwiftParser/Declarations.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ extension DeclarationModifier {
1818
case .__consuming, .__setter_access, ._const, ._local, .async,
1919
.borrowing, .class, .consuming, .convenience, .distributed, .dynamic,
2020
.final, .indirect, .infix, .isolated, .lazy, .mutating, .nonmutating,
21-
.optional, .override, .postfix, .prefix, .reasync, ._resultDependsOnSelf, .required,
21+
.optional, .override, .postfix, .prefix, .reasync, ._resultDependsOn, ._resultDependsOnSelf, .required,
2222
.rethrows, .static, .weak:
2323
return false
2424
case .fileprivate, .internal, .nonisolated, .package, .open, .private,

Sources/SwiftParser/Patterns.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,7 @@ extension Parser.Lookahead {
354354
&& !self.at(.keyword(.__owned))
355355
&& !self.at(.keyword(.borrowing))
356356
&& !self.at(.keyword(.consuming))
357+
&& !(experimentalFeatures.contains(.nonEscapableTypes) && self.at(.keyword(._resultDependsOn)))
357358
{
358359
return true
359360
}

Sources/SwiftParser/TokenPrecedence.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ enum TokenPrecedence: Comparable {
230230
// Declaration Modifiers
231231
.__consuming, .final, .required, .optional, .lazy, .dynamic, .infix, .postfix, .prefix, .mutating, .nonmutating, .convenience, .override, .package, .open,
232232
.__setter_access, .indirect, .isolated, .nonisolated, .distributed, ._local,
233-
.inout, ._mutating, ._borrow, ._borrowing, .borrowing, ._consuming, .consuming, .consume, ._resultDependsOnSelf,
233+
.inout, ._mutating, ._borrow, ._borrowing, .borrowing, ._consuming, .consuming, .consume, ._resultDependsOnSelf, ._resultDependsOn,
234234
// Accessors
235235
.get, .set, .didSet, .willSet, .unsafeAddress, .addressWithOwner, .addressWithNativeOwner, .unsafeMutableAddress,
236236
.mutableAddressWithOwner, .mutableAddressWithNativeOwner, ._read, ._modify,

Sources/SwiftParser/TokenSpecSet.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,7 @@ enum DeclarationModifier: TokenSpecSet {
376376
case `static`
377377
case unowned
378378
case weak
379+
case _resultDependsOn
379380
case _resultDependsOnSelf
380381

381382
init?(lexeme: Lexer.Lexeme, experimentalFeatures: Parser.ExperimentalFeatures) {
@@ -415,6 +416,7 @@ enum DeclarationModifier: TokenSpecSet {
415416
case TokenSpec(.static): self = .static
416417
case TokenSpec(.unowned): self = .unowned
417418
case TokenSpec(.weak): self = .weak
419+
case TokenSpec(._resultDependsOn) where experimentalFeatures.contains(.nonEscapableTypes): self = ._resultDependsOn
418420
case TokenSpec(._resultDependsOnSelf) where experimentalFeatures.contains(.nonEscapableTypes): self = ._resultDependsOnSelf
419421
default: return nil
420422
}
@@ -457,6 +459,7 @@ enum DeclarationModifier: TokenSpecSet {
457459
case .static: return .keyword(.static)
458460
case .unowned: return TokenSpec(.unowned, recoveryPrecedence: .declKeyword)
459461
case .weak: return TokenSpec(.weak, recoveryPrecedence: .declKeyword)
462+
case ._resultDependsOn: return TokenSpec(._resultDependsOn, recoveryPrecedence: .declKeyword)
460463
case ._resultDependsOnSelf: return TokenSpec(._resultDependsOnSelf, recoveryPrecedence: .declKeyword)
461464
}
462465
}

Sources/SwiftParser/generated/Parser+TokenSpecSet.swift

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,8 @@ extension AttributedTypeSyntax {
183183
case _const
184184
case borrowing
185185
case consuming
186+
@_spi(ExperimentalLanguageFeatures)
187+
case _resultDependsOn
186188

187189
init?(lexeme: Lexer.Lexeme, experimentalFeatures: Parser.ExperimentalFeatures) {
188190
switch PrepareForKeywordMatch(lexeme) {
@@ -200,6 +202,8 @@ extension AttributedTypeSyntax {
200202
self = .borrowing
201203
case TokenSpec(.consuming):
202204
self = .consuming
205+
case TokenSpec(._resultDependsOn) where experimentalFeatures.contains(.nonEscapableTypes):
206+
self = ._resultDependsOn
203207
default:
204208
return nil
205209
}
@@ -221,6 +225,8 @@ extension AttributedTypeSyntax {
221225
return .keyword(.borrowing)
222226
case .consuming:
223227
return .keyword(.consuming)
228+
case ._resultDependsOn:
229+
return .keyword(._resultDependsOn)
224230
}
225231
}
226232

@@ -244,6 +250,8 @@ extension AttributedTypeSyntax {
244250
return .keyword(.borrowing)
245251
case .consuming:
246252
return .keyword(.consuming)
253+
case ._resultDependsOn:
254+
return .keyword(._resultDependsOn)
247255
}
248256
}
249257
}

Sources/SwiftSyntax/generated/Keyword.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,8 @@ public enum Keyword: UInt8, Hashable {
182182
case `repeat`
183183
case required
184184
@_spi(ExperimentalLanguageFeatures)
185+
case _resultDependsOn
186+
@_spi(ExperimentalLanguageFeatures)
185187
case _resultDependsOnSelf
186188
case `rethrows`
187189
case retroactive
@@ -688,6 +690,8 @@ public enum Keyword: UInt8, Hashable {
688690
self = ._objcRuntimeName
689691
case "addressWithOwner":
690692
self = .addressWithOwner
693+
case "_resultDependsOn":
694+
self = ._resultDependsOn
691695
default:
692696
return nil
693697
}
@@ -946,6 +950,7 @@ public enum Keyword: UInt8, Hashable {
946950
"renamed",
947951
"repeat",
948952
"required",
953+
"_resultDependsOn",
949954
"_resultDependsOnSelf",
950955
"rethrows",
951956
"retroactive",

Sources/SwiftSyntax/generated/raw/RawSyntaxValidation.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -386,7 +386,8 @@ func validateLayout(layout: RawSyntaxBuffer, as kind: SyntaxKind) {
386386
.keyword("isolated"),
387387
.keyword("_const"),
388388
.keyword("borrowing"),
389-
.keyword("consuming")
389+
.keyword("consuming"),
390+
.keyword("_resultDependsOn")
390391
]))
391392
assertNoError(kind, 2, verify(layout[2], as: RawUnexpectedNodesSyntax?.self))
392393
assertNoError(kind, 3, verify(layout[3], as: RawAttributeListSyntax.self))

Sources/SwiftSyntax/generated/syntaxNodes/SyntaxNodesAB.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3257,7 +3257,7 @@ public struct AttributeSyntax: SyntaxProtocol, SyntaxHashable, _LeafSyntaxNodePr
32573257

32583258
/// ### Children
32593259
///
3260-
/// - `specifier`: (`inout` | `__shared` | `__owned` | `isolated` | `_const` | `borrowing` | `consuming`)?
3260+
/// - `specifier`: (`inout` | `__shared` | `__owned` | `isolated` | `_const` | `borrowing` | `consuming` | `_resultDependsOn`)?
32613261
/// - `attributes`: ``AttributeListSyntax``
32623262
/// - `baseType`: ``TypeSyntax``
32633263
public struct AttributedTypeSyntax: TypeSyntaxProtocol, SyntaxHashable, _LeafTypeSyntaxNodeProtocol {
@@ -3336,6 +3336,7 @@ public struct AttributedTypeSyntax: TypeSyntaxProtocol, SyntaxHashable, _LeafTyp
33363336
/// - `_const`
33373337
/// - `borrowing`
33383338
/// - `consuming`
3339+
/// - `_resultDependsOn`
33393340
public var specifier: TokenSyntax? {
33403341
get {
33413342
return Syntax(self).child(at: 1)?.cast(TokenSyntax.self)

0 commit comments

Comments
 (0)