@@ -3523,14 +3523,6 @@ ParserStatus Parser::parseNewDeclAttribute(DeclAttributes &Attributes,
35233523 break ;
35243524 }
35253525
3526- case DAK_Initializes: {
3527- llvm_unreachable (" InitializesAttr not yet implemented" );
3528- }
3529-
3530- case DAK_Accesses: {
3531- llvm_unreachable (" AccessesAttr not yet implemented" );
3532- }
3533-
35343526 case DAK_StorageRestrictions: {
35353527 ParserResult<StorageRestrictionsAttr> Attr =
35363528 parseStorageRestrictionsAttribute (AtLoc, Loc);
@@ -7446,71 +7438,6 @@ ParserStatus Parser::parseGetEffectSpecifier(ParsedAccessors &accessors,
74467438 return Status;
74477439}
74487440
7449- template <typename EffectAttr>
7450- static ParserStatus parseInitAccessorEffect (Parser &P,
7451- DeclAttributes &attributes,
7452- StringRef attrName) {
7453- ParserStatus status;
7454-
7455- if (P.Tok .isContextualKeyword (attrName)) {
7456- auto effectLoc = P.consumeToken ();
7457- if (!P.Tok .is (tok::l_paren)) {
7458- P.diagnose (P.Tok .getLoc (), diag::attr_expected_lparen,
7459- attrName, true );
7460- status.setIsParseError ();
7461- return status;
7462- }
7463-
7464- // Consume '('
7465- P.consumeToken ();
7466-
7467- bool hasNextProperty = false ;
7468- // Consume the identifier list
7469- SmallVector<Identifier, 4 > properties;
7470- do {
7471- Identifier propertyName;
7472- SourceLoc propertyNameLoc;
7473- if (P.parseIdentifier (propertyName, propertyNameLoc,
7474- diag::init_accessor_expected_name,
7475- /* diagnoseDollarPrefix=*/ true )) {
7476- status.setIsParseError ();
7477- return status;
7478- }
7479-
7480- properties.push_back (propertyName);
7481-
7482- // Parse the comma, if the list continues.
7483- hasNextProperty = P.consumeIf (tok::comma);
7484- } while (hasNextProperty);
7485-
7486- if (!P.Tok .is (tok::r_paren)) {
7487- P.diagnose (P.Tok .getLoc (), diag::attr_expected_rparen,
7488- attrName, true );
7489- status.setIsParseError ();
7490- return status;
7491- }
7492-
7493- // Consume ')'
7494- SourceLoc rParenLoc = P.consumeToken ();
7495-
7496- auto *attr = EffectAttr::create (P.Context , SourceLoc (),
7497- SourceRange (effectLoc, rParenLoc),
7498- properties);
7499- attributes.add (attr);
7500- }
7501-
7502- return status;
7503- }
7504-
7505- ParserStatus Parser::parseInitAccessorEffects (ParsedAccessors &accessors,
7506- AccessorKind currentKind,
7507- DeclAttributes &attrs) {
7508- ParserStatus status;
7509- status |= parseInitAccessorEffect<InitializesAttr>(*this , attrs, " initializes" );
7510- status |= parseInitAccessorEffect<AccessesAttr>(*this , attrs, " accesses" );
7511- return status;
7512- }
7513-
75147441bool Parser::parseAccessorAfterIntroducer (
75157442 SourceLoc Loc, AccessorKind Kind, ParsedAccessors &accessors,
75167443 bool &hasEffectfulGet, ParameterList *Indices, bool &parsingLimitedSyntax,
@@ -7525,7 +7452,6 @@ bool Parser::parseAccessorAfterIntroducer(
75257452 SourceLoc throwsLoc;
75267453 Status |= parseGetEffectSpecifier (accessors, asyncLoc, throwsLoc,
75277454 hasEffectfulGet, Kind, Loc);
7528- Status |= parseInitAccessorEffects (accessors, Kind, Attributes);
75297455
75307456 // Set up a function declaration.
75317457 auto accessor =
0 commit comments