@@ -61,7 +61,12 @@ extension Parser {
61
61
case ( . declarationModifier( . unowned) , let handle) ? :
62
62
elements. append ( self . parseUnownedModifier ( handle) )
63
63
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
+ }
65
70
case ( . declarationModifier( . final) , let handle) ? ,
66
71
( . declarationModifier( . required) , let handle) ? ,
67
72
( . declarationModifier( . optional) , let handle) ? ,
@@ -99,9 +104,9 @@ extension Parser {
99
104
}
100
105
101
106
extension Parser {
102
- mutating func parseModifierDetail( _ keyword : Keyword ) -> RawDeclModifierDetailSyntax {
107
+ mutating func parseModifierDetail( ) -> RawDeclModifierDetailSyntax {
103
108
let ( unexpectedBeforeLeftParen, leftParen) = self . expect ( . leftParen)
104
- let ( unexpectedBeforeDetailToken, detailToken) = self . expect ( . identifier, TokenSpec ( keyword , remapping: . identifier) , default: . identifier)
109
+ let ( unexpectedBeforeDetailToken, detailToken) = self . expect ( . identifier, TokenSpec ( . set , remapping: . identifier) , default: . identifier)
105
110
let ( unexpectedBeforeRightParen, rightParen) = self . expect ( . rightParen)
106
111
return RawDeclModifierDetailSyntax (
107
112
unexpectedBeforeLeftParen,
@@ -119,7 +124,7 @@ extension Parser {
119
124
120
125
let detail : RawDeclModifierDetailSyntax ?
121
126
if self . at ( . leftParen) {
122
- detail = self . parseModifierDetail ( . set )
127
+ detail = self . parseModifierDetail ( )
123
128
} else {
124
129
detail = nil
125
130
}
@@ -224,7 +229,18 @@ extension Parser {
224
229
225
230
let detail : RawDeclModifierDetailSyntax ?
226
231
if self . at ( . leftParen) {
227
- detail = self . parseModifierDetail ( . unsafe)
232
+ let ( unexpectedBeforeLeftParen, leftParen) = self . expect ( . leftParen)
233
+ let ( unexpectedBeforeDetailToken, detailToken) = self . expect ( TokenSpec ( . unsafe, remapping: . identifier) )
234
+ let ( unexpectedBeforeRightParen, rightParen) = self . expect ( . rightParen)
235
+ detail = RawDeclModifierDetailSyntax (
236
+ unexpectedBeforeLeftParen,
237
+ leftParen: leftParen,
238
+ unexpectedBeforeDetailToken,
239
+ detail: detailToken,
240
+ unexpectedBeforeRightParen,
241
+ rightParen: rightParen,
242
+ arena: self . arena
243
+ )
228
244
} else {
229
245
detail = nil
230
246
}
0 commit comments