@@ -53,6 +53,7 @@ extension Parser {
5353 case dollarIdentifier // For recovery
5454 case letKeyword
5555 case varKeyword
56+ case inoutKeyword
5657
5758 init ? ( lexeme: Lexer . Lexeme ) {
5859 switch PrepareForKeywordMatch ( lexeme) {
@@ -62,6 +63,7 @@ extension Parser {
6263 case TokenSpec ( . dollarIdentifier) : self = . dollarIdentifier
6364 case TokenSpec ( . let) : self = . letKeyword
6465 case TokenSpec ( . var) : self = . varKeyword
66+ case TokenSpec ( . inout) : self = . inoutKeyword
6567 default : return nil
6668 }
6769 }
@@ -74,6 +76,7 @@ extension Parser {
7476 case . dollarIdentifier: return . dollarIdentifier
7577 case . letKeyword: return . keyword( . let)
7678 case . varKeyword: return . keyword( . var)
79+ case . inoutKeyword: return . keyword( . inout)
7780 }
7881 }
7982 }
@@ -120,12 +123,13 @@ extension Parser {
120123 )
121124 )
122125 case ( . letKeyword, let handle) ? ,
123- ( . varKeyword, let handle) ? :
124- let letOrVar = self . eat ( handle)
126+ ( . varKeyword, let handle) ? ,
127+ ( . inoutKeyword, let handle) ? :
128+ let bindingKeyword = self . eat ( handle)
125129 let value = self . parsePattern ( )
126130 return RawPatternSyntax (
127131 RawValueBindingPatternSyntax (
128- bindingKeyword: letOrVar ,
132+ bindingKeyword: bindingKeyword ,
129133 valuePattern: value,
130134 arena: self . arena
131135 )
@@ -239,12 +243,13 @@ extension Parser {
239243 // Parse productions that can only be patterns.
240244 switch self . at ( anyIn: MatchingPatternStart . self) {
241245 case ( . varKeyword, let handle) ? ,
242- ( . letKeyword, let handle) ? :
243- let letOrVar = self . eat ( handle)
244- let value = self . parseMatchingPattern ( context: . letOrVar)
246+ ( . letKeyword, let handle) ? ,
247+ ( . inoutKeyword, let handle) ? :
248+ let bindingKeyword = self . eat ( handle)
249+ let value = self . parseMatchingPattern ( context: . bindingIntroducer)
245250 return RawPatternSyntax (
246251 RawValueBindingPatternSyntax (
247- bindingKeyword: letOrVar ,
252+ bindingKeyword: bindingKeyword ,
248253 valuePattern: value,
249254 arena: self . arena
250255 )
@@ -287,13 +292,15 @@ extension Parser.Lookahead {
287292 /// pattern ::= pattern-tuple
288293 /// pattern ::= 'var' pattern
289294 /// pattern ::= 'let' pattern
295+ /// pattern ::= 'inout' pattern
290296 mutating func canParsePattern( ) -> Bool {
291297 enum PatternStartTokens : TokenSpecSet {
292298 case identifier
293299 case wildcard
294300 case letKeyword
295301 case varKeyword
296302 case leftParen
303+ case inoutKeyword
297304
298305 init ? ( lexeme: Lexer . Lexeme ) {
299306 switch PrepareForKeywordMatch ( lexeme) {
@@ -302,6 +309,7 @@ extension Parser.Lookahead {
302309 case TokenSpec ( . let) : self = . letKeyword
303310 case TokenSpec ( . var) : self = . varKeyword
304311 case TokenSpec ( . leftParen) : self = . leftParen
312+ case TokenSpec ( . inout) : self = . inoutKeyword
305313 default : return nil
306314 }
307315 }
@@ -313,6 +321,7 @@ extension Parser.Lookahead {
313321 case . letKeyword: return . keyword( . let)
314322 case . varKeyword: return . keyword( . var)
315323 case . leftParen: return . leftParen
324+ case . inoutKeyword: return . keyword( . inout)
316325 }
317326 }
318327 }
@@ -323,7 +332,8 @@ extension Parser.Lookahead {
323332 self . eat ( handle)
324333 return true
325334 case ( . letKeyword, let handle) ? ,
326- ( . varKeyword, let handle) ? :
335+ ( . varKeyword, let handle) ? ,
336+ ( . inoutKeyword, let handle) ? :
327337 self . eat ( handle)
328338 return self . canParsePattern ( )
329339 case ( . leftParen, _) ? :
0 commit comments