Skip to content

Commit 2891d9e

Browse files
committed
[ASTGen] Make generate(decl:) return optional value
1 parent 29315e6 commit 2891d9e

File tree

3 files changed

+18
-10
lines changed

3 files changed

+18
-10
lines changed

lib/ASTGen/Sources/ASTGen/ASTGen.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,9 @@ struct ASTGenVisitor {
110110
of: CodeBlockItemSyntax.self,
111111
split: Self.splitCodeBlockItemIfConfig
112112
) { element in
113-
let astNode = generate(codeBlockItem: element)
113+
guard let astNode = generate(codeBlockItem: element) else {
114+
return
115+
}
114116
if !isTopLevel {
115117
out.append(astNode)
116118
return
@@ -463,7 +465,7 @@ public func buildTopLevelASTNodes(
463465
/// Generate an AST node at the given source location. Returns the generated
464466
/// ASTNode and mutate the pointee of `endLocPtr` to the end of the node.
465467
private func _build<Node: SyntaxProtocol, Result>(
466-
generator: (ASTGenVisitor) -> (Node) -> Result,
468+
generator: (ASTGenVisitor) -> (Node) -> Result?,
467469
diagEngine: BridgedDiagnosticEngine,
468470
sourceFilePtr: UnsafeMutableRawPointer,
469471
sourceLoc: BridgedSourceLoc,

lib/ASTGen/Sources/ASTGen/Decls.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import SwiftDiagnostics
1818
// MARK: - TypeDecl
1919

2020
extension ASTGenVisitor {
21-
func generate(decl node: DeclSyntax) -> BridgedDecl {
21+
func generate(decl node: DeclSyntax) -> BridgedDecl? {
2222
switch node.as(DeclSyntaxEnum.self) {
2323
case .accessorDecl:
2424
fatalError("Should be generated as a part of another decl")
@@ -72,7 +72,7 @@ extension ASTGenVisitor {
7272
return self.generateWithLegacy(node)
7373
}
7474

75-
func generate(memberBlockItem node: MemberBlockItemSyntax) -> BridgedDecl {
75+
func generate(memberBlockItem node: MemberBlockItemSyntax) -> BridgedDecl? {
7676
// TODO: Set semicolon loc.
7777
generate(decl: node.decl)
7878
}
@@ -852,19 +852,22 @@ extension ASTGenVisitor {
852852
extension ASTGenVisitor {
853853
@inline(__always)
854854
func generate(memberBlockItemList node: MemberBlockItemListSyntax) -> [BridgedDecl] {
855-
var allBridged: [BridgedDecl] = []
855+
var allMembers: [BridgedDecl] = []
856856
visitIfConfigElements(node, of: MemberBlockItemSyntax.self) { element in
857857
if let ifConfigDecl = element.decl.as(IfConfigDeclSyntax.self) {
858858
return .ifConfigDecl(ifConfigDecl)
859859
}
860860

861861
return .underlying(element)
862862
} body: { member in
863+
guard let member = self.generate(decl: member.decl) else {
864+
return
865+
}
863866
// TODO: Set semicolon loc.
864-
allBridged.append(self.generate(decl: member.decl))
867+
allMembers.append(member)
865868
}
866869

867-
return allBridged
870+
return allMembers
868871
}
869872

870873
@inline(__always)

lib/ASTGen/Sources/ASTGen/Stmts.swift

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,11 @@ extension ASTGenVisitor {
6767
return self.generateWithLegacy(node)
6868
}
6969

70-
func generate(codeBlockItem node: CodeBlockItemSyntax) -> ASTNode {
70+
func generate(codeBlockItem node: CodeBlockItemSyntax) -> ASTNode? {
7171
// TODO: Set semicolon loc.
7272
switch node.item {
7373
case .decl(let node):
74-
return .decl(self.generate(decl: node))
74+
return self.generate(decl: node).map { .decl($0) }
7575
case .stmt(let node):
7676
return .stmt(self.generate(stmt: node))
7777
case .expr(let node):
@@ -87,7 +87,10 @@ extension ASTGenVisitor {
8787
of: CodeBlockItemSyntax.self,
8888
split: Self.splitCodeBlockItemIfConfig
8989
) { codeBlockItem in
90-
allItems.append(self.generate(codeBlockItem: codeBlockItem).bridged)
90+
guard let item = self.generate(codeBlockItem: codeBlockItem) else {
91+
return
92+
}
93+
allItems.append(item.bridged)
9194
}
9295

9396
return allItems.lazy.bridgedArray(in: self)

0 commit comments

Comments
 (0)