@@ -2310,9 +2310,12 @@ ParserStatus Parser::parseDecl(ParseDeclOptions Flags,
2310
2310
StaticLoc = SourceLoc ();
2311
2311
}
2312
2312
llvm::SmallVector<Decl *, 4 > Entries;
2313
- Status = parseDeclSubscript (Flags, Attributes, Entries);
2313
+ DeclResult = parseDeclSubscript (Flags, Attributes, Entries);
2314
+ Status = DeclResult;
2314
2315
std::for_each (Entries.begin (), Entries.end (), InternalHandler);
2315
2316
MayNeedOverrideCompletion = true ;
2317
+ if (auto *D = DeclResult.getPtrOrNull ())
2318
+ markWasHandled (D);
2316
2319
break ;
2317
2320
}
2318
2321
@@ -5427,9 +5430,10 @@ parseDeclProtocol(ParseDeclOptions Flags, DeclAttributes &Attributes) {
5427
5430
// / subscript-head
5428
5431
// / 'subscript' attribute-list parameter-clause '->' type
5429
5432
// / \endverbatim
5430
- ParserStatus Parser::parseDeclSubscript (ParseDeclOptions Flags,
5431
- DeclAttributes &Attributes,
5432
- SmallVectorImpl<Decl *> &Decls) {
5433
+ ParserResult<SubscriptDecl>
5434
+ Parser::parseDeclSubscript (ParseDeclOptions Flags,
5435
+ DeclAttributes &Attributes,
5436
+ SmallVectorImpl<Decl *> &Decls) {
5433
5437
ParserStatus Status;
5434
5438
SourceLoc SubscriptLoc = consumeToken (tok::kw_subscript);
5435
5439
@@ -5438,7 +5442,7 @@ ParserStatus Parser::parseDeclSubscript(ParseDeclOptions Flags,
5438
5442
= parseSingleParameterClause (ParameterContextKind::Subscript,
5439
5443
&argumentNames);
5440
5444
if (Indices.isNull () || Indices.hasCodeCompletion ())
5441
- return Indices;
5445
+ return ParserStatus ( Indices) ;
5442
5446
5443
5447
// '->'
5444
5448
if (!Tok.is (tok::arrow)) {
@@ -5451,7 +5455,7 @@ ParserStatus Parser::parseDeclSubscript(ParseDeclOptions Flags,
5451
5455
// type
5452
5456
ParserResult<TypeRepr> ElementTy = parseType (diag::expected_type_subscript);
5453
5457
if (ElementTy.isNull () || ElementTy.hasCodeCompletion ())
5454
- return ElementTy;
5458
+ return ParserStatus ( ElementTy) ;
5455
5459
5456
5460
5457
5461
// Build an AST for the subscript declaration.
@@ -5501,7 +5505,7 @@ ParserStatus Parser::parseDeclSubscript(ParseDeclOptions Flags,
5501
5505
5502
5506
// No need to setLocalDiscriminator because subscripts cannot
5503
5507
// validly appear outside of type decls.
5504
- return Status;
5508
+ return makeParserResult ( Status, Subscript) ;
5505
5509
}
5506
5510
5507
5511
ParserResult<ConstructorDecl>
0 commit comments