@@ -288,7 +288,7 @@ extension ASTGenVisitor {
288288// MARK: - AbstractStorageDecl
289289
290290extension ASTGenVisitor {
291- private func generate( accessorSpecifier specifier: TokenSyntax ) -> BridgedAccessorKind {
291+ private func generate( accessorSpecifier specifier: TokenSyntax ) -> BridgedAccessorKind ? {
292292 switch specifier. keywordKind {
293293 case . get:
294294 return . get
@@ -300,35 +300,33 @@ extension ASTGenVisitor {
300300 return . willSet
301301 case . unsafeAddress:
302302 return . address
303- case . addressWithOwner:
304- return . address
305- case . addressWithNativeOwner:
306- return . address
307303 case . unsafeMutableAddress:
308304 return . mutableAddress
309- case . mutableAddressWithOwner:
310- return . mutableAddress
311- case . mutableAddressWithNativeOwner:
312- return . mutableAddress
313305 case . _read:
314306 return . read
315307 case . _modify:
316308 return . modify
317309 case . `init`:
318310 return . `init`
319311 default :
320- fatalError ( " Should have diagnosed this " )
312+ self . diagnose ( Diagnostic ( node: specifier, message: UnknownAccessorSpecifierError ( specifier) ) )
313+ return nil
321314 }
322315 }
323316
324317 private func generate(
325318 accessorDecl node: AccessorDeclSyntax ,
326319 for storage: BridgedAbstractStorageDecl
327- ) -> BridgedAccessorDecl {
320+ ) -> BridgedAccessorDecl ? {
321+ guard let kind = self . generate ( accessorSpecifier: node. accessorSpecifier) else {
322+ // TODO: We could potentially recover if this is the first accessor by treating
323+ // it as an implicit getter.
324+ return nil
325+ }
328326 let accessor = BridgedAccessorDecl . createParsed (
329327 self . ctx,
330328 declContext: self . declContext,
331- kind: self . generate ( accessorSpecifier : node . accessorSpecifier ) ,
329+ kind: kind ,
332330 storage: storage,
333331 declLoc: self . generateSourceLoc ( node. accessorSpecifier) ,
334332 accessorKeywordLoc: self . generateSourceLoc ( node. accessorSpecifier) ,
@@ -358,7 +356,9 @@ extension ASTGenVisitor {
358356 case . accessors( let accessors) :
359357 return BridgedAccessorRecord (
360358 lBraceLoc: leftBrace,
361- accessors: accessors. lazy. map { self . generate ( accessorDecl: $0, for: storage) } . bridgedArray ( in: self ) ,
359+ accessors: accessors. lazy. compactMap {
360+ self . generate ( accessorDecl: $0, for: storage)
361+ } . bridgedArray ( in: self ) ,
362362 rBraceLoc: rightBrace
363363 )
364364 case . getter( let codeBlock) :
0 commit comments