Skip to content

Commit 0bdf0fd

Browse files
committed
Parse: Refactor parseDeclList() to take an IterableDeclContext instead of a callback function
1 parent acb37b2 commit 0bdf0fd

File tree

2 files changed

+11
-20
lines changed

2 files changed

+11
-20
lines changed

include/swift/Parse/Parser.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -894,7 +894,7 @@ class Parser {
894894
llvm::function_ref<void(Decl*)> handler);
895895
bool parseDeclList(SourceLoc LBLoc, SourceLoc &RBLoc,
896896
Diag<> ErrorDiag, ParseDeclOptions Options,
897-
llvm::function_ref<void(Decl*)> handler);
897+
IterableDeclContext *IDC);
898898
ParserResult<ExtensionDecl> parseDeclExtension(ParseDeclOptions Flags,
899899
DeclAttributes &Attributes);
900900
ParserResult<EnumDecl> parseDeclEnum(ParseDeclOptions Flags,

lib/Parse/ParseDecl.cpp

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3045,20 +3045,13 @@ void Parser::parseDeclListDelayed(IterableDeclContext *IDC) {
30453045
if (auto *ext = dyn_cast<ExtensionDecl>(D)) {
30463046
parseDeclList(ext->getBraces().Start, RBLoc, Id,
30473047
ParseDeclOptions(DelayedState->Flags),
3048-
[&] (Decl *D) { ext->addMember(D); });
3048+
ext);
30493049
ext->setBraces({LBLoc, RBLoc});
3050-
} else if (auto *cd = dyn_cast<ClassDecl>(D)) {
3051-
auto handler = [&] (Decl *D) {
3052-
cd->addMember(D);
3053-
};
3054-
parseDeclList(cd->getBraces().Start, RBLoc, Id,
3055-
ParseDeclOptions(DelayedState->Flags), handler);
3056-
cd->setBraces({LBLoc, RBLoc});
30573050
} else {
30583051
auto *ntd = cast<NominalTypeDecl>(D);
30593052
parseDeclList(ntd->getBraces().Start, RBLoc, Id,
30603053
ParseDeclOptions(DelayedState->Flags),
3061-
[&] (Decl *D) { ntd->addMember(D); });
3054+
ntd);
30623055
ntd->setBraces({LBLoc, RBLoc});
30633056
}
30643057
}
@@ -3475,13 +3468,14 @@ ParserStatus Parser::parseDeclItem(bool &PreviousHadSemi,
34753468
/// \endverbatim
34763469
bool Parser::parseDeclList(SourceLoc LBLoc, SourceLoc &RBLoc,
34773470
Diag<> ErrorDiag, ParseDeclOptions Options,
3478-
llvm::function_ref<void(Decl*)> handler) {
3471+
IterableDeclContext *IDC) {
34793472
ParserStatus Status;
34803473
bool PreviousHadSemi = true;
34813474
{
34823475
SyntaxParsingContext ListContext(SyntaxContext, SyntaxKind::MemberDeclList);
34833476
while (Tok.isNot(tok::r_brace)) {
3484-
Status |= parseDeclItem(PreviousHadSemi, Options, handler);
3477+
Status |= parseDeclItem(PreviousHadSemi, Options,
3478+
[&](Decl *D) { IDC->addMember(D); });
34853479
if (Tok.isAny(tok::eof, tok::pound_endif, tok::pound_else,
34863480
tok::pound_elseif)) {
34873481
IsInputIncomplete = true;
@@ -3608,7 +3602,7 @@ Parser::parseDeclExtension(ParseDeclOptions Flags, DeclAttributes &Attributes) {
36083602
PosBeforeLB);
36093603
} else {
36103604
if (parseDeclList(LBLoc, RBLoc, diag::expected_rbrace_extension,
3611-
Options, [&] (Decl *D) { ext->addMember(D); }))
3605+
Options, ext))
36123606
status.setIsParseError();
36133607
}
36143608

@@ -5748,7 +5742,7 @@ ParserResult<EnumDecl> Parser::parseDeclEnum(ParseDeclOptions Flags,
57485742
PosBeforeLB);
57495743
} else {
57505744
if (parseDeclList(LBLoc, RBLoc, diag::expected_rbrace_enum,
5751-
Options, [&] (Decl *D) { ED->addMember(D); }))
5745+
Options, ED))
57525746
Status.setIsParseError();
57535747
}
57545748
}
@@ -6033,7 +6027,7 @@ ParserResult<StructDecl> Parser::parseDeclStruct(ParseDeclOptions Flags,
60336027
PosBeforeLB);
60346028
} else {
60356029
if (parseDeclList(LBLoc, RBLoc, diag::expected_rbrace_struct,
6036-
Options, [&](Decl *D) {SD->addMember(D);}))
6030+
Options,SD))
60376031
Status.setIsParseError();
60386032
}
60396033
}
@@ -6156,11 +6150,8 @@ ParserResult<ClassDecl> Parser::parseDeclClass(ParseDeclOptions Flags,
61566150
State->delayDeclList(CD, Options.toRaw(), CurDeclContext, { LBLoc, RBLoc },
61576151
PosBeforeLB);
61586152
} else {
6159-
auto Handler = [&] (Decl *D) {
6160-
CD->addMember(D);
6161-
};
61626153
if (parseDeclList(LBLoc, RBLoc, diag::expected_rbrace_class,
6163-
Options, Handler))
6154+
Options, CD))
61646155
Status.setIsParseError();
61656156
}
61666157
}
@@ -6266,7 +6257,7 @@ parseDeclProtocol(ParseDeclOptions Flags, DeclAttributes &Attributes) {
62666257
PosBeforeLB);
62676258
} else {
62686259
if (parseDeclList(LBraceLoc, RBraceLoc, diag::expected_rbrace_protocol,
6269-
Options, [&](Decl *D) {Proto->addMember(D);}))
6260+
Options, Proto))
62706261
Status.setIsParseError();
62716262
}
62726263
}

0 commit comments

Comments
 (0)