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 {
241241 }
242242
243243 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+ }
245252 }
246253
247254 public func generate( arrayElement node: ArrayElementSyntax ) -> BridgedExpr {
@@ -275,16 +282,6 @@ extension ASTGenVisitor {
275282 return self . generate ( expr: node)
276283 }
277284
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-
288285 @inline ( __always)
289286 func generate( optional node: GenericParameterClauseSyntax ? ) -> BridgedGenericParamList ? {
290287 guard let node else {
@@ -329,6 +326,15 @@ extension ASTGenVisitor {
329326
330327 return self . generate ( precedenceGroupNameList: node)
331328 }
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+ }
332338}
333339
334340extension Collection {
Original file line number Diff line number Diff line change @@ -75,7 +75,14 @@ extension ASTGenVisitor {
7575 condition: conditions. first!. castToExpr,
7676 thenStmt: self . generate ( codeBlock: node. body) . asStmt,
7777 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
7986 )
8087 }
8188
Original file line number Diff line number Diff line change @@ -76,8 +76,8 @@ func test5(_ b: Swift.Bool) -> Int {
7676 return if b { 0 } else { 1 }
7777}
7878
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 }
8181 return x
8282}
8383
You can’t perform that action at this time.
0 commit comments