@@ -44,17 +44,18 @@ func isExprMigrated(_ node: ExprSyntax) -> Bool {
44
44
case . asExpr, . arrayExpr, . arrowExpr, . assignmentExpr, . awaitExpr, . binaryOperatorExpr,
45
45
. booleanLiteralExpr, . borrowExpr, . closureExpr, . consumeExpr, . copyExpr,
46
46
. 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,
50
51
. postfixOperatorExpr, . prefixOperatorExpr, . regexLiteralExpr, . sequenceExpr,
51
52
. simpleStringLiteralExpr, . subscriptCallExpr, . stringLiteralExpr, . superExpr,
52
53
. switchExpr, . tryExpr, . tupleExpr, . typeExpr, . unresolvedAsExpr, . unresolvedIsExpr,
53
54
. unresolvedTernaryExpr, . ternaryExpr:
54
55
break
55
56
56
57
// Known unimplemented kinds.
57
- case . forceUnwrapExpr , . keyPathExpr, . macroExpansionExpr, . optionalChainingExpr , . postfixIfConfigExpr:
58
+ case . keyPathExpr, . macroExpansionExpr, . postfixIfConfigExpr:
58
59
return false
59
60
60
61
// Unknown expr kinds.
@@ -112,8 +113,8 @@ extension ASTGenVisitor {
112
113
preconditionFailure ( " EditorPlaceholderExpr is no longer generated by the parser " )
113
114
case . floatLiteralExpr( let node) :
114
115
return self . generate ( floatLiteralExpr: node) . asExpr
115
- case . forceUnwrapExpr:
116
- break
116
+ case . forceUnwrapExpr( let node ) :
117
+ return self . generate ( forceUnwrapExpr : node ) . asExpr
117
118
case . functionCallExpr( let node) :
118
119
return self . generate ( functionCallExpr: node) . asExpr
119
120
case . genericSpecializationExpr( let node) :
@@ -138,8 +139,8 @@ extension ASTGenVisitor {
138
139
break
139
140
case . nilLiteralExpr( let node) :
140
141
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
143
144
break
144
145
case . packElementExpr( let node) :
145
146
return self . generate ( packElementExpr: node) . asExpr
@@ -291,6 +292,14 @@ extension ASTGenVisitor {
291
292
)
292
293
}
293
294
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
+
294
303
func generateArgumentList(
295
304
leftParen: TokenSyntax ? ,
296
305
labeledExprList: LabeledExprListSyntax ,
@@ -539,6 +548,14 @@ extension ASTGenVisitor {
539
548
)
540
549
}
541
550
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
+
542
559
func generate( packElementExpr node: PackElementExprSyntax ) -> BridgedPackElementExpr {
543
560
return . createParsed(
544
561
self . ctx,
0 commit comments