Skip to content

Commit 2192ca1

Browse files
committed
[Parse] Make parseDeclSubscript return ParserResult for SubscriptDecl
1 parent 5537727 commit 2192ca1

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

include/swift/Parse/Parser.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -798,9 +798,9 @@ class Parser {
798798
ParserResult<ProtocolDecl> parseDeclProtocol(ParseDeclOptions Flags,
799799
DeclAttributes &Attributes);
800800

801-
ParserStatus parseDeclSubscript(ParseDeclOptions Flags,
802-
DeclAttributes &Attributes,
803-
SmallVectorImpl<Decl *> &Decls);
801+
ParserResult<SubscriptDecl>
802+
parseDeclSubscript(ParseDeclOptions Flags, DeclAttributes &Attributes,
803+
SmallVectorImpl<Decl *> &Decls);
804804

805805
ParserResult<ConstructorDecl>
806806
parseDeclInit(ParseDeclOptions Flags, DeclAttributes &Attributes);

lib/Parse/ParseDecl.cpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2310,9 +2310,12 @@ ParserStatus Parser::parseDecl(ParseDeclOptions Flags,
23102310
StaticLoc = SourceLoc();
23112311
}
23122312
llvm::SmallVector<Decl *, 4> Entries;
2313-
Status = parseDeclSubscript(Flags, Attributes, Entries);
2313+
DeclResult = parseDeclSubscript(Flags, Attributes, Entries);
2314+
Status = DeclResult;
23142315
std::for_each(Entries.begin(), Entries.end(), InternalHandler);
23152316
MayNeedOverrideCompletion = true;
2317+
if (auto *D = DeclResult.getPtrOrNull())
2318+
markWasHandled(D);
23162319
break;
23172320
}
23182321

@@ -5427,9 +5430,10 @@ parseDeclProtocol(ParseDeclOptions Flags, DeclAttributes &Attributes) {
54275430
/// subscript-head
54285431
/// 'subscript' attribute-list parameter-clause '->' type
54295432
/// \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) {
54335437
ParserStatus Status;
54345438
SourceLoc SubscriptLoc = consumeToken(tok::kw_subscript);
54355439

@@ -5438,7 +5442,7 @@ ParserStatus Parser::parseDeclSubscript(ParseDeclOptions Flags,
54385442
= parseSingleParameterClause(ParameterContextKind::Subscript,
54395443
&argumentNames);
54405444
if (Indices.isNull() || Indices.hasCodeCompletion())
5441-
return Indices;
5445+
return ParserStatus(Indices);
54425446

54435447
// '->'
54445448
if (!Tok.is(tok::arrow)) {
@@ -5451,7 +5455,7 @@ ParserStatus Parser::parseDeclSubscript(ParseDeclOptions Flags,
54515455
// type
54525456
ParserResult<TypeRepr> ElementTy = parseType(diag::expected_type_subscript);
54535457
if (ElementTy.isNull() || ElementTy.hasCodeCompletion())
5454-
return ElementTy;
5458+
return ParserStatus(ElementTy);
54555459

54565460

54575461
// Build an AST for the subscript declaration.
@@ -5501,7 +5505,7 @@ ParserStatus Parser::parseDeclSubscript(ParseDeclOptions Flags,
55015505

55025506
// No need to setLocalDiscriminator because subscripts cannot
55035507
// validly appear outside of type decls.
5504-
return Status;
5508+
return makeParserResult(Status, Subscript);
55055509
}
55065510

55075511
ParserResult<ConstructorDecl>

0 commit comments

Comments
 (0)