Skip to content

Commit 39e732e

Browse files
Merge pull request #2342 from sophiapoirier/nonisolated-unsafe-experimental-feature-flag
guard nonisolated(unsafe) by experimental feature
2 parents 86783bd + 0361e88 commit 39e732e

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
@@ -18,6 +18,7 @@ public enum ExperimentalFeature: String, CaseIterable {
1818
case typedThrows
1919
case doExpressions
2020
case nonEscapableTypes
21+
case globalConcurrency
2122

2223
/// The name of the feature, which is used in the doc comment.
2324
public var featureName: String {
@@ -32,6 +33,8 @@ public enum ExperimentalFeature: String, CaseIterable {
3233
return "'do' expressions"
3334
case .nonEscapableTypes:
3435
return "NonEscableTypes"
36+
case .globalConcurrency:
37+
return "strict concurrency for globals"
3538
}
3639
}
3740

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
@@ -38,4 +38,7 @@ extension Parser.ExperimentalFeatures {
3838

3939
/// Whether to enable the parsing of NonEscableTypes.
4040
public static let nonEscapableTypes = Self (rawValue: 1 << 4)
41+
42+
/// Whether to enable the parsing of strict concurrency for globals.
43+
public static let globalConcurrency = Self (rawValue: 1 << 5)
4144
}

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)