File tree Expand file tree Collapse file tree 3 files changed +27
-14
lines changed
lib/ASTGen/Sources/ASTGen Expand file tree Collapse file tree 3 files changed +27
-14
lines changed Original file line number Diff line number Diff line change @@ -241,7 +241,14 @@ extension ASTGenVisitor {
241
241
}
242
242
243
243
public func generate( codeBlockItem node: CodeBlockItemSyntax ) -> ASTNode {
244
- generate ( choices: node. item)
244
+ switch node. item {
245
+ case . decl( let node) :
246
+ return . decl( self . generate ( decl: node) )
247
+ case . stmt( let node) :
248
+ return . stmt( self . generate ( stmt: node) )
249
+ case . expr( let node) :
250
+ return . expr( self . generate ( expr: node) )
251
+ }
245
252
}
246
253
247
254
public func generate( arrayElement node: ArrayElementSyntax ) -> BridgedExpr {
@@ -275,16 +282,6 @@ extension ASTGenVisitor {
275
282
return self . generate ( expr: node)
276
283
}
277
284
278
- /// DO NOT introduce another usage of this. Not all choices can produce 'ASTNode'.
279
- @inline ( __always)
280
- func generate( optional node: ( some SyntaxChildChoices ) ? ) -> ASTNode ? {
281
- guard let node else {
282
- return nil
283
- }
284
-
285
- return self . generate ( choices: node)
286
- }
287
-
288
285
@inline ( __always)
289
286
func generate( optional node: GenericParameterClauseSyntax ? ) -> BridgedGenericParamList ? {
290
287
guard let node else {
@@ -329,6 +326,15 @@ extension ASTGenVisitor {
329
326
330
327
return self . generate ( precedenceGroupNameList: node)
331
328
}
329
+
330
+ /// Generate AST from an optional node.
331
+ /// This is `node.map(body)` but with `self.generate(...)` syntax.
332
+ /// Usage:
333
+ /// self.generate(optional: node.initializer, generate(expr:))
334
+ @inline ( __always)
335
+ func generate< T: SyntaxProtocol , U> ( optional node: T ? , _ body: ( T ) -> U ) -> U ? {
336
+ return node. map ( body)
337
+ }
332
338
}
333
339
334
340
extension Collection {
Original file line number Diff line number Diff line change @@ -75,7 +75,14 @@ extension ASTGenVisitor {
75
75
condition: conditions. first!. castToExpr,
76
76
thenStmt: self . generate ( codeBlock: node. body) . asStmt,
77
77
elseLoc: node. elseKeyword. bridgedSourceLoc ( in: self ) ,
78
- elseStmt: ( self . generate ( optional: node. elseBody) ? . castToStmt) . asNullable
78
+ elseStmt: self . generate ( optional: node. elseBody) {
79
+ switch $0 {
80
+ case . codeBlock( let node) :
81
+ return self . generate ( codeBlock: node) . asStmt
82
+ case . ifExpr( let node) :
83
+ return self . makeIfStmt ( node) . asStmt
84
+ }
85
+ } . asNullable
79
86
)
80
87
}
81
88
Original file line number Diff line number Diff line change @@ -76,8 +76,8 @@ func test5(_ b: Swift.Bool) -> Int {
76
76
return if b { 0 } else { 1 }
77
77
}
78
78
79
- func test6( _ b : Bool ) -> Int {
80
- let x = if b { 0 } else { 1 }
79
+ func test6( _ b1 : Bool , b2 : Bool ) -> Int {
80
+ let x = if b1 { 0 } else if b2 { 1 } else { 2 }
81
81
return x
82
82
}
83
83
You can’t perform that action at this time.
0 commit comments