@@ -572,3 +572,74 @@ extension Parser {
572572 return RawUnexpectedNodesSyntax ( unexpected, arena: self . arena)
573573 }
574574}
575+
576+ // MARK: - Parsing `initializes` and `accesses` specifiers in init accessors
577+
578+ extension Parser {
579+ mutating func parseInitAccessorEffects( ) -> RawAccessorInitEffectsSyntax ? {
580+ let initializes = self . parseInitializesSpecifier ( )
581+ let accesses = self . parseAccessesSpecifier ( )
582+
583+ if initializes == nil , accesses == nil {
584+ return nil
585+ }
586+
587+ return RawAccessorInitEffectsSyntax (
588+ initializesEffect: initializes,
589+ accessesEffect: accesses,
590+ arena: self . arena
591+ )
592+ }
593+
594+ mutating func parseInitializesSpecifier( ) -> RawInitializesEffectSyntax ? {
595+ guard let keyword = self . consume ( if: . keyword( . initializes) ) else {
596+ return nil
597+ }
598+
599+ let ( unexpectedBeforeLeftParen, leftParen) = self . expect ( . leftParen)
600+
601+ let args = parseArgumentListElements ( pattern: . none)
602+ let argumentList = RawTupleExprElementListSyntax (
603+ elements: args,
604+ arena: self . arena
605+ )
606+
607+ let ( unexpectedBeforeRightParen, rightParen) = self . expect ( . rightParen)
608+
609+ return RawInitializesEffectSyntax (
610+ initializesKeyword: keyword,
611+ unexpectedBeforeLeftParen,
612+ leftParen: leftParen,
613+ propertyList: argumentList,
614+ unexpectedBeforeRightParen,
615+ rightParen: rightParen,
616+ arena: self . arena
617+ )
618+ }
619+
620+ mutating func parseAccessesSpecifier( ) -> RawAccessesEffectSyntax ? {
621+ guard let keyword = self . consume ( if: . keyword( . accesses) ) else {
622+ return nil
623+ }
624+
625+ let ( unexpectedBeforeLeftParen, leftParen) = self . expect ( . leftParen)
626+
627+ let args = parseArgumentListElements ( pattern: . none)
628+ let argumentList = RawTupleExprElementListSyntax (
629+ elements: args,
630+ arena: self . arena
631+ )
632+
633+ let ( unexpectedBeforeRightParen, rightParen) = self . expect ( . rightParen)
634+
635+ return RawAccessesEffectSyntax (
636+ accessesKeyword: keyword,
637+ unexpectedBeforeLeftParen,
638+ leftParen: leftParen,
639+ propertyList: argumentList,
640+ unexpectedBeforeRightParen,
641+ rightParen: rightParen,
642+ arena: self . arena
643+ )
644+ }
645+ }
0 commit comments