@@ -44,17 +44,18 @@ func isExprMigrated(_ node: ExprSyntax) -> Bool {
4444 case . asExpr, . arrayExpr, . arrowExpr, . assignmentExpr, . awaitExpr, . binaryOperatorExpr,
4545 . booleanLiteralExpr, . borrowExpr, . closureExpr, . consumeExpr, . copyExpr,
4646 . discardAssignmentExpr, . declReferenceExpr, . dictionaryExpr, . doExpr,
47- . editorPlaceholderExpr, . floatLiteralExpr, . functionCallExpr, . genericSpecializationExpr,
48- . ifExpr, . infixOperatorExpr, . inOutExpr, . integerLiteralExpr, . isExpr, . memberAccessExpr,
49- . nilLiteralExpr, . packElementExpr, . packExpansionExpr, . patternExpr,
47+ . editorPlaceholderExpr, . floatLiteralExpr, . forceUnwrapExpr, . functionCallExpr,
48+ . genericSpecializationExpr, . ifExpr, . infixOperatorExpr, . inOutExpr,
49+ . integerLiteralExpr, . isExpr, . memberAccessExpr, . nilLiteralExpr, . optionalChainingExpr,
50+ . packElementExpr, . packExpansionExpr, . patternExpr,
5051 . postfixOperatorExpr, . prefixOperatorExpr, . regexLiteralExpr, . sequenceExpr,
5152 . simpleStringLiteralExpr, . subscriptCallExpr, . stringLiteralExpr, . superExpr,
5253 . switchExpr, . tryExpr, . tupleExpr, . typeExpr, . unresolvedAsExpr, . unresolvedIsExpr,
5354 . unresolvedTernaryExpr, . ternaryExpr:
5455 break
5556
5657 // Known unimplemented kinds.
57- case . forceUnwrapExpr , . keyPathExpr, . macroExpansionExpr, . optionalChainingExpr , . postfixIfConfigExpr:
58+ case . keyPathExpr, . macroExpansionExpr, . postfixIfConfigExpr:
5859 return false
5960
6061 // Unknown expr kinds.
@@ -112,8 +113,8 @@ extension ASTGenVisitor {
112113 preconditionFailure ( " EditorPlaceholderExpr is no longer generated by the parser " )
113114 case . floatLiteralExpr( let node) :
114115 return self . generate ( floatLiteralExpr: node) . asExpr
115- case . forceUnwrapExpr:
116- break
116+ case . forceUnwrapExpr( let node ) :
117+ return self . generate ( forceUnwrapExpr : node ) . asExpr
117118 case . functionCallExpr( let node) :
118119 return self . generate ( functionCallExpr: node) . asExpr
119120 case . genericSpecializationExpr( let node) :
@@ -138,8 +139,8 @@ extension ASTGenVisitor {
138139 break
139140 case . nilLiteralExpr( let node) :
140141 return self . generate ( nilLiteralExpr: node) . asExpr
141- case . optionalChainingExpr:
142- // Need special care to wrap the entire postfix chain with OptionalEvaluationExpr.
142+ case . optionalChainingExpr( let node ) :
143+ return self . generate ( optionalChainingExpr : node ) . asExpr
143144 break
144145 case . packElementExpr( let node) :
145146 return self . generate ( packElementExpr: node) . asExpr
@@ -291,6 +292,14 @@ extension ASTGenVisitor {
291292 )
292293 }
293294
295+ func generate( forceUnwrapExpr node: ForceUnwrapExprSyntax ) -> BridgedForceValueExpr {
296+ return . createParsed(
297+ self . ctx,
298+ subExpr: self . generate ( expr: node. expression) ,
299+ exclaimLoc: self . generateSourceLoc ( node. exclamationMark)
300+ )
301+ }
302+
294303 func generateArgumentList(
295304 leftParen: TokenSyntax ? ,
296305 labeledExprList: LabeledExprListSyntax ,
@@ -539,6 +548,14 @@ extension ASTGenVisitor {
539548 )
540549 }
541550
551+ func generate( optionalChainingExpr node: OptionalChainingExprSyntax ) -> BridgedBindOptionalExpr {
552+ return . createParsed(
553+ self . ctx,
554+ subExpr: self . generate ( expr: node. expression) ,
555+ questionLoc: self . generateSourceLoc ( node. questionMark)
556+ )
557+ }
558+
542559 func generate( packElementExpr node: PackElementExprSyntax ) -> BridgedPackElementExpr {
543560 return . createParsed(
544561 self . ctx,
0 commit comments