@@ -40,13 +40,13 @@ func isExprMigrated(_ node: ExprSyntax) -> Bool {
40
40
while true {
41
41
switch current. kind {
42
42
case // Known implemented kinds.
43
- . arrayExpr, . arrowExpr, . assignmentExpr, . binaryOperatorExpr,
44
- . booleanLiteralExpr, . closureExpr, . discardAssignmentExpr ,
45
- . declReferenceExpr , . dictionaryExpr , . functionCallExpr , . ifExpr ,
46
- . integerLiteralExpr , . memberAccessExpr , . nilLiteralExpr ,
47
- . postfixOperatorExpr , . prefixOperatorExpr , . sequenceExpr ,
48
- . stringLiteralExpr, . tupleExpr , . typeExpr , . unresolvedAsExpr ,
49
- . unresolvedIsExpr, . unresolvedTernaryExpr:
43
+ . arrayExpr, . arrowExpr, . assignmentExpr, . awaitExpr , . binaryOperatorExpr,
44
+ . booleanLiteralExpr, . borrowExpr , . closureExpr, . consumeExpr , . copyExpr ,
45
+ . discardAssignmentExpr , . declReferenceExpr , . dictionaryExpr ,
46
+ . functionCallExpr , . ifExpr , . integerLiteralExpr , . memberAccessExpr ,
47
+ . nilLiteralExpr , . postfixOperatorExpr , . prefixOperatorExpr ,
48
+ . sequenceExpr , . stringLiteralExpr, . tryExpr , . tupleExpr , . typeExpr ,
49
+ . unresolvedAsExpr , . unresolvedIsExpr, . unresolvedTernaryExpr:
50
50
51
51
// `generate(stringLiteralExpr:)` doesn't support interpolations.
52
52
if let str = current. as ( StringLiteralExprSyntax . self) {
@@ -58,13 +58,13 @@ func isExprMigrated(_ node: ExprSyntax) -> Bool {
58
58
59
59
break
60
60
case // Known unimplemented kinds.
61
- . asExpr, . awaitExpr , . borrowExpr , . canImportExpr, . canImportVersionInfo,
61
+ . asExpr, . canImportExpr, . canImportVersionInfo,
62
62
. doExpr, . editorPlaceholderExpr, . floatLiteralExpr, . forceUnwrapExpr,
63
63
. inOutExpr, . infixOperatorExpr, . isExpr, . keyPathExpr,
64
- . macroExpansionExpr, . consumeExpr , . copyExpr , . optionalChainingExpr,
64
+ . macroExpansionExpr, . optionalChainingExpr,
65
65
. packElementExpr, . packExpansionExpr, . postfixIfConfigExpr,
66
66
. regexLiteralExpr, . genericSpecializationExpr, . simpleStringLiteralExpr,
67
- . subscriptCallExpr, . superExpr, . switchExpr, . ternaryExpr, . tryExpr ,
67
+ . subscriptCallExpr, . superExpr, . switchExpr, . ternaryExpr,
68
68
. patternExpr:
69
69
return false
70
70
case // Unknown expr kinds.
@@ -96,24 +96,24 @@ extension ASTGenVisitor {
96
96
break
97
97
case . assignmentExpr:
98
98
preconditionFailure ( " should be handled in generate(sequenceExpr:) " )
99
- case . awaitExpr:
100
- break
99
+ case . awaitExpr( let node ) :
100
+ return self . generate ( awaitExpr : node ) . asExpr
101
101
case . binaryOperatorExpr:
102
102
preconditionFailure ( " should be handled in generate(sequenceExpr:) " )
103
103
case . booleanLiteralExpr( let node) :
104
104
return self . generate ( booleanLiteralExpr: node) . asExpr
105
- case . borrowExpr:
106
- break
105
+ case . borrowExpr( let node ) :
106
+ return self . generate ( borrowExpr : node ) . asExpr
107
107
case . canImportExpr:
108
108
break
109
109
case . canImportVersionInfo:
110
110
break
111
111
case . closureExpr( let node) :
112
112
return self . generate ( closureExpr: node) . asExpr
113
- case . consumeExpr:
114
- break
115
- case . copyExpr:
116
- break
113
+ case . consumeExpr( let node ) :
114
+ return self . generate ( consumeExpr : node ) . asExpr
115
+ case . copyExpr( let node ) :
116
+ return self . generate ( copyExpr : node ) . asExpr
117
117
case . declReferenceExpr( let node) :
118
118
return self . generate ( declReferenceExpr: node) . asExpr
119
119
case . dictionaryExpr( let node) :
@@ -183,8 +183,8 @@ extension ASTGenVisitor {
183
183
break
184
184
case . ternaryExpr:
185
185
break
186
- case . tryExpr:
187
- break
186
+ case . tryExpr( let node ) :
187
+ return self . generate ( tryExpr : node )
188
188
case . tupleExpr( let node) :
189
189
return self . generate ( tupleExpr: node) . asExpr
190
190
case . typeExpr( let node) :
@@ -235,6 +235,22 @@ extension ASTGenVisitor {
235
235
return . createParsed( self . ctx, equalsLoc: self . generateSourceLoc ( node. equal) )
236
236
}
237
237
238
+ func generate( awaitExpr node: AwaitExprSyntax ) -> BridgedAwaitExpr {
239
+ return . createParsed(
240
+ self . ctx,
241
+ awaitLoc: self . generateSourceLoc ( node. awaitKeyword) ,
242
+ subExpr: self . generate ( expr: node. expression)
243
+ )
244
+ }
245
+
246
+ func generate( borrowExpr node: BorrowExprSyntax ) -> BridgedBorrowExpr {
247
+ return . createParsed(
248
+ self . ctx,
249
+ borrowLoc: self . generateSourceLoc ( node. borrowKeyword) ,
250
+ subExpr: self . generate ( expr: node. expression)
251
+ )
252
+ }
253
+
238
254
func generate( binaryOperatorExpr node: BinaryOperatorExprSyntax ) -> BridgedUnresolvedDeclRefExpr {
239
255
return createOperatorRefExpr ( token: node. operator, kind: . binaryOperator)
240
256
}
@@ -251,6 +267,22 @@ extension ASTGenVisitor {
251
267
return . createParsed( self . ctx, declContext: self . declContext, body: body)
252
268
}
253
269
270
+ func generate( consumeExpr node: ConsumeExprSyntax ) -> BridgedConsumeExpr {
271
+ return . createParsed(
272
+ self . ctx,
273
+ consumeLoc: self . generateSourceLoc ( node. consumeKeyword) ,
274
+ subExpr: self . generate ( expr: node. expression)
275
+ )
276
+ }
277
+
278
+ func generate( copyExpr node: CopyExprSyntax ) -> BridgedCopyExpr {
279
+ return . createParsed(
280
+ self . ctx,
281
+ copyLoc: self . generateSourceLoc ( node. copyKeyword) ,
282
+ subExpr: self . generate ( expr: node. expression)
283
+ )
284
+ }
285
+
254
286
func generate( functionCallExpr node: FunctionCallExprSyntax ) -> BridgedCallExpr {
255
287
if !node. arguments. isEmpty || node. trailingClosure == nil {
256
288
if node. leftParen == nil {
@@ -471,6 +503,36 @@ extension ASTGenVisitor {
471
503
) . asExpr
472
504
}
473
505
506
+ func generate( tryExpr node: TryExprSyntax ) -> BridgedExpr {
507
+ let tryLoc = self . generateSourceLoc ( node. tryKeyword)
508
+ let subExpr = self . generate ( expr: node. expression)
509
+
510
+ switch node. questionOrExclamationMark {
511
+ case nil :
512
+ return BridgedTryExpr . createParsed (
513
+ self . ctx,
514
+ tryLoc: tryLoc,
515
+ subExpr: subExpr
516
+ ) . asExpr
517
+ case let exclaim? where exclaim. rawTokenKind == . exclamationMark:
518
+ return BridgedForceTryExpr . createParsed (
519
+ self . ctx,
520
+ tryLoc: tryLoc,
521
+ subExpr: subExpr,
522
+ exclaimLoc: self . generateSourceLoc ( exclaim)
523
+ ) . asExpr
524
+ case let question? where question. rawTokenKind == . postfixQuestionMark:
525
+ return BridgedOptionalTryExpr . createParsed (
526
+ self . ctx,
527
+ tryLoc: tryLoc,
528
+ subExpr: subExpr,
529
+ questionLoc: self . generateSourceLoc ( question)
530
+ ) . asExpr
531
+ default :
532
+ preconditionFailure ( " TryExprSyntax.questionOrExclamationMark must be .exclamationMark or .postfixQuestionMark " )
533
+ }
534
+ }
535
+
474
536
func generate( tupleExpr node: TupleExprSyntax ) -> BridgedTupleExpr {
475
537
return self . generate ( labeledExprList: node. elements, leftParen: node. leftParen, rightParen: node. rightParen)
476
538
}
0 commit comments