@@ -18,28 +18,28 @@ import SwiftDiagnostics
1818// MARK: - TypeDecl
1919
2020extension 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 " )
2525 case . actorDecl( let node) :
26- return self . generate ( actorDecl: node) . asDecl
26+ return self . generate ( actorDecl: node) ? . asDecl
2727 case . associatedTypeDecl( let node) :
28- return self . generate ( associatedTypeDecl: node) . asDecl
28+ return self . generate ( associatedTypeDecl: node) ? . asDecl
2929 case . classDecl( let node) :
30- return self . generate ( classDecl: node) . asDecl
30+ return self . generate ( classDecl: node) ? . asDecl
3131 case . deinitializerDecl( let node) :
3232 return self . generate ( deinitializerDecl: node) . asDecl
3333 case . editorPlaceholderDecl:
3434 break
3535 case . enumCaseDecl( let node) :
3636 return self . generate ( enumCaseDecl: node) . asDecl
3737 case . enumDecl( let node) :
38- return self . generate ( enumDecl: node) . asDecl
38+ return self . generate ( enumDecl: node) ? . asDecl
3939 case . extensionDecl( let node) :
4040 return self . generate ( extensionDecl: node) . asDecl
4141 case . functionDecl( let node) :
42- return self . generate ( functionDecl: node) . asDecl
42+ return self . generate ( functionDecl: node) ? . asDecl
4343 case . ifConfigDecl:
4444 fatalError ( " Should have been handled by the caller " )
4545 case . importDecl( let node) :
@@ -53,33 +53,46 @@ extension ASTGenVisitor {
5353 case . missingDecl:
5454 break
5555 case . operatorDecl( let node) :
56- return self . generate ( operatorDecl: node) . asDecl
56+ return self . generate ( operatorDecl: node) ? . asDecl
5757 case . poundSourceLocation:
5858 break
5959 case . precedenceGroupDecl( let node) :
60- return self . generate ( precedenceGroupDecl: node) . asDecl
60+ return self . generate ( precedenceGroupDecl: node) ? . asDecl
6161 case . protocolDecl( let node) :
62- return self . generate ( protocolDecl: node) . asDecl
62+ return self . generate ( protocolDecl: node) ? . asDecl
6363 case . structDecl( let node) :
64- return self . generate ( structDecl: node) . asDecl
64+ return self . generate ( structDecl: node) ? . asDecl
6565 case . subscriptDecl( let node) :
6666 return self . generate ( subscriptDecl: node) . asDecl
6767 case . typeAliasDecl( let node) :
68- return self . generate ( typeAliasDecl: node) . asDecl
68+ return self . generate ( typeAliasDecl: node) ? . asDecl
6969 case . variableDecl( let node) :
7070 return self . generate ( variableDecl: node) . asDecl
7171 }
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 }
7979
80- func generate( typeAliasDecl node: TypeAliasDeclSyntax ) -> BridgedTypeAliasDecl {
80+ func generateIdentifierDeclNameAndLoc( _ node: TokenSyntax ) -> ( identifier: BridgedIdentifier , sourceLoc: BridgedSourceLoc ) ? {
81+ guard node. presence == . present else {
82+ return nil
83+ }
84+ let result = self . generateIdentifierAndSourceLoc ( node)
85+ guard result. identifier != nil else {
86+ return nil
87+ }
88+ return result
89+ }
90+
91+ func generate( typeAliasDecl node: TypeAliasDeclSyntax ) -> BridgedTypeAliasDecl ? {
8192 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
82- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
93+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
94+ return nil
95+ }
8396
8497 let decl = BridgedTypeAliasDecl . createParsed (
8598 self . ctx,
@@ -96,9 +109,11 @@ extension ASTGenVisitor {
96109 return decl
97110 }
98111
99- func generate( enumDecl node: EnumDeclSyntax ) -> BridgedNominalTypeDecl {
112+ func generate( enumDecl node: EnumDeclSyntax ) -> BridgedNominalTypeDecl ? {
100113 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
101- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
114+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
115+ return nil
116+ }
102117
103118 let decl = BridgedEnumDecl . createParsed (
104119 self . ctx,
@@ -123,9 +138,11 @@ extension ASTGenVisitor {
123138 return decl
124139 }
125140
126- func generate( structDecl node: StructDeclSyntax ) -> BridgedNominalTypeDecl {
141+ func generate( structDecl node: StructDeclSyntax ) -> BridgedNominalTypeDecl ? {
127142 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
128- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
143+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
144+ return nil
145+ }
129146
130147 let decl = BridgedStructDecl . createParsed (
131148 self . ctx,
@@ -150,9 +167,11 @@ extension ASTGenVisitor {
150167 return decl
151168 }
152169
153- func generate( classDecl node: ClassDeclSyntax ) -> BridgedNominalTypeDecl {
170+ func generate( classDecl node: ClassDeclSyntax ) -> BridgedNominalTypeDecl ? {
154171 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
155- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
172+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
173+ return nil
174+ }
156175
157176 let decl = BridgedClassDecl . createParsed (
158177 self . ctx,
@@ -178,9 +197,11 @@ extension ASTGenVisitor {
178197 return decl
179198 }
180199
181- func generate( actorDecl node: ActorDeclSyntax ) -> BridgedNominalTypeDecl {
200+ func generate( actorDecl node: ActorDeclSyntax ) -> BridgedNominalTypeDecl ? {
182201 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
183- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
202+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
203+ return nil
204+ }
184205
185206 let decl = BridgedClassDecl . createParsed (
186207 self . ctx,
@@ -206,9 +227,11 @@ extension ASTGenVisitor {
206227 return decl
207228 }
208229
209- func generate( protocolDecl node: ProtocolDeclSyntax ) -> BridgedNominalTypeDecl {
230+ func generate( protocolDecl node: ProtocolDeclSyntax ) -> BridgedNominalTypeDecl ? {
210231 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
211- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
232+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
233+ return nil
234+ }
212235 let primaryAssociatedTypeNames = node. primaryAssociatedTypeClause? . primaryAssociatedTypes. lazy. map {
213236 self . generateLocatedIdentifier ( $0. name)
214237 }
@@ -236,9 +259,11 @@ extension ASTGenVisitor {
236259 return decl
237260 }
238261
239- func generate( associatedTypeDecl node: AssociatedTypeDeclSyntax ) -> BridgedAssociatedTypeDecl {
262+ func generate( associatedTypeDecl node: AssociatedTypeDeclSyntax ) -> BridgedAssociatedTypeDecl ? {
240263 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
241- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
264+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
265+ return nil
266+ }
242267
243268 let decl = BridgedAssociatedTypeDecl . createParsed (
244269 self . ctx,
@@ -285,8 +310,10 @@ extension ASTGenVisitor {
285310// MARK: - EnumCaseDecl
286311
287312extension ASTGenVisitor {
288- func generate( enumCaseElement node: EnumCaseElementSyntax ) -> BridgedEnumElementDecl {
289- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
313+ func generate( enumCaseElement node: EnumCaseElementSyntax ) -> BridgedEnumElementDecl ? {
314+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
315+ return nil
316+ }
290317
291318 return . createParsed(
292319 self . ctx,
@@ -303,8 +330,10 @@ extension ASTGenVisitor {
303330 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
304331
305332 // All attributes goes to each element.
306- let elements = node. elements. lazy. map ( { elem -> BridgedEnumElementDecl in
307- let elemDecl = self . generate ( enumCaseElement: elem)
333+ let elements = node. elements. lazy. compactMap ( { elem -> BridgedEnumElementDecl ? in
334+ guard let elemDecl = self . generate ( enumCaseElement: elem) else {
335+ return nil
336+ }
308337 elemDecl. asDecl. setAttrs ( attrs. attributes)
309338 return elemDecl
310339 } )
@@ -548,10 +577,11 @@ extension ASTGenVisitor {
548577// MARK: - AbstractFunctionDecl
549578
550579extension ASTGenVisitor {
551- func generate( functionDecl node: FunctionDeclSyntax ) -> BridgedFuncDecl {
580+ func generate( functionDecl node: FunctionDeclSyntax ) -> BridgedFuncDecl ? {
552581 let attrs = self . generateDeclAttributes ( node, allowStatic: true )
553-
554- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
582+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
583+ return nil
584+ }
555585
556586 let decl = BridgedFuncDecl . createParsed (
557587 self . ctx,
@@ -664,8 +694,10 @@ extension BridgedOperatorFixity {
664694}
665695
666696extension ASTGenVisitor {
667- func generate( operatorDecl node: OperatorDeclSyntax ) -> BridgedOperatorDecl {
668- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
697+ func generate( operatorDecl node: OperatorDeclSyntax ) -> BridgedOperatorDecl ? {
698+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
699+ return nil
700+ }
669701 let ( precedenceGroupName, precedenceGroupLoc) =
670702 self . generateIdentifierAndSourceLoc ( node. operatorPrecedenceAndTypes? . precedenceGroup)
671703
@@ -705,9 +737,11 @@ extension BridgedAssociativity {
705737}
706738
707739extension ASTGenVisitor {
708- func generate( precedenceGroupDecl node: PrecedenceGroupDeclSyntax ) -> BridgedPrecedenceGroupDecl {
740+ func generate( precedenceGroupDecl node: PrecedenceGroupDeclSyntax ) -> BridgedPrecedenceGroupDecl ? {
709741 let attrs = self . generateDeclAttributes ( node, allowStatic: false )
710- let ( name, nameLoc) = self . generateIdentifierAndSourceLoc ( node. name)
742+ guard let ( name, nameLoc) = self . generateIdentifierDeclNameAndLoc ( node. name) else {
743+ return nil
744+ }
711745
712746 struct PrecedenceGroupBody {
713747 var associativity : PrecedenceGroupAssociativitySyntax ? = nil
@@ -852,19 +886,22 @@ extension ASTGenVisitor {
852886extension ASTGenVisitor {
853887 @inline ( __always)
854888 func generate( memberBlockItemList node: MemberBlockItemListSyntax ) -> [ BridgedDecl ] {
855- var allBridged : [ BridgedDecl ] = [ ]
889+ var allMembers : [ BridgedDecl ] = [ ]
856890 visitIfConfigElements ( node, of: MemberBlockItemSyntax . self) { element in
857891 if let ifConfigDecl = element. decl. as ( IfConfigDeclSyntax . self) {
858892 return . ifConfigDecl( ifConfigDecl)
859893 }
860894
861895 return . underlying( element)
862896 } body: { member in
897+ guard let member = self . generate ( decl: member. decl) else {
898+ return
899+ }
863900 // TODO: Set semicolon loc.
864- allBridged . append ( self . generate ( decl : member. decl ) )
901+ allMembers . append ( member)
865902 }
866903
867- return allBridged
904+ return allMembers
868905 }
869906
870907 @inline ( __always)
0 commit comments