Skip to content

Commit 12e09fa

Browse files
committed
guard nonisolated(unsafe) by experimental feature
1 parent b73118c commit 12e09fa

File tree

4 files changed

+14
-2
lines changed

4 files changed

+14
-2
lines changed

CodeGeneration/Sources/SyntaxSupport/ExperimentalFeatures.swift

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public enum ExperimentalFeature: String, CaseIterable {
1717
case thenStatements
1818
case typedThrows
1919
case doExpressions
20+
case globalConcurrency
2021

2122
/// The name of the feature, which is used in the doc comment.
2223
public var featureName: String {
@@ -29,6 +30,8 @@ public enum ExperimentalFeature: String, CaseIterable {
2930
return "typed throws"
3031
case .doExpressions:
3132
return "'do' expressions"
33+
case .globalConcurrency:
34+
return "strict concurrency for globals"
3235
}
3336
}
3437

Sources/SwiftParser/Modifiers.swift

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,12 @@ extension Parser {
6161
case (.declarationModifier(.unowned), let handle)?:
6262
elements.append(self.parseUnownedModifier(handle))
6363
case (.declarationModifier(.nonisolated), let handle)?:
64-
elements.append(parseNonisolatedModifier(handle))
64+
if experimentalFeatures.contains(.globalConcurrency) {
65+
elements.append(parseNonisolatedModifier(handle))
66+
} else {
67+
let (unexpectedBeforeKeyword, keyword) = self.eat(handle)
68+
elements.append(RawDeclModifierSyntax(unexpectedBeforeKeyword, name: keyword, detail: nil, arena: self.arena))
69+
}
6570
case (.declarationModifier(.final), let handle)?,
6671
(.declarationModifier(.required), let handle)?,
6772
(.declarationModifier(.optional), let handle)?,

Sources/SwiftParser/generated/ExperimentalFeatures.swift

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

3636
/// Whether to enable the parsing of 'do' expressions.
3737
public static let doExpressions = Self (rawValue: 1 << 3)
38+
39+
/// Whether to enable the parsing of strict concurrency for globals.
40+
public static let globalConcurrency = Self (rawValue: 1 << 4)
3841
}

Tests/SwiftParserTest/DeclarationTests.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,8 @@ final class DeclarationTests: ParserTestCase {
265265
nonisolated(unsafe) var c: Int { 0 }
266266
nonisolated(unsafe) let d = 0
267267
}
268-
"""
268+
""",
269+
experimentalFeatures: [.globalConcurrency]
269270
)
270271
}
271272

0 commit comments

Comments
 (0)