Skip to content

Commit 482f73c

Browse files
committed
Frontend: Don't use separate delayed parsing callbacks for primary and non-primary files
1 parent d41eec9 commit 482f73c

File tree

3 files changed

+11
-38
lines changed

3 files changed

+11
-38
lines changed

include/swift/Frontend/Frontend.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -614,8 +614,7 @@ class CompilerInstance {
614614

615615
private:
616616
void createREPLFile(const ImplicitImports &implicitImports);
617-
std::unique_ptr<DelayedParsingCallbacks>
618-
computeDelayedParsingCallback(bool isPrimary);
617+
std::unique_ptr<DelayedParsingCallbacks> computeDelayedParsingCallback();
619618

620619
void addMainFileToModule(const ImplicitImports &implicitImports);
621620

@@ -626,15 +625,13 @@ class CompilerInstance {
626625
void parseLibraryFile(unsigned BufferID,
627626
const ImplicitImports &implicitImports,
628627
PersistentParserState &PersistentState,
629-
DelayedParsingCallbacks *PrimaryDelayedCB,
630-
DelayedParsingCallbacks *SecondaryDelayedCB);
628+
DelayedParsingCallbacks *DelayedCB);
631629

632630
/// Return true if had load error
633631
bool
634632
parsePartialModulesAndLibraryFiles(const ImplicitImports &implicitImports,
635633
PersistentParserState &PersistentState,
636-
DelayedParsingCallbacks *PrimaryDelayedCB,
637-
DelayedParsingCallbacks *SecondaryDelayedCB);
634+
DelayedParsingCallbacks *DelayedCB);
638635

639636
OptionSet<TypeCheckingFlags> computeTypeCheckingOptions();
640637

include/swift/Parse/DelayedParsingCallbacks.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,6 @@ class DelayedParsingCallbacks {
3535
SourceRange BodyRange) = 0;
3636
};
3737

38-
class AlwaysDelayedCallbacks : public DelayedParsingCallbacks {
39-
bool shouldDelayFunctionBodyParsing(Parser &TheParser,
40-
AbstractFunctionDecl *AFD,
41-
const DeclAttributes &Attrs,
42-
SourceRange BodyRange) override {
43-
return true;
44-
}
45-
};
46-
4738
/// Implementation of callbacks that guide the parser in delayed
4839
/// parsing for code completion.
4940
class CodeCompleteDelayedCallbacks : public DelayedParsingCallbacks {

lib/Frontend/Frontend.cpp

Lines changed: 8 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -735,12 +735,10 @@ void CompilerInstance::createREPLFile(const ImplicitImports &implicitImports) {
735735
}
736736

737737
std::unique_ptr<DelayedParsingCallbacks>
738-
CompilerInstance::computeDelayedParsingCallback(bool isPrimary) {
738+
CompilerInstance::computeDelayedParsingCallback() {
739739
if (Invocation.isCodeCompletion())
740740
return llvm::make_unique<CodeCompleteDelayedCallbacks>(
741741
SourceMgr.getCodeCompletionLoc());
742-
if (!isPrimary)
743-
return llvm::make_unique<AlwaysDelayedCallbacks>();
744742
return nullptr;
745743
}
746744

@@ -754,22 +752,13 @@ void CompilerInstance::addMainFileToModule(
754752
void CompilerInstance::parseAndCheckTypesUpTo(
755753
const ImplicitImports &implicitImports, SourceFile::ASTStage_t limitStage) {
756754
FrontendStatsTracer tracer(Context->Stats, "parse-and-check-types");
757-
// Delayed parsing callback for the primary file, or all files
758-
// in non-WMO mode.
759-
std::unique_ptr<DelayedParsingCallbacks> PrimaryDelayedCB{
760-
computeDelayedParsingCallback(true)};
761-
762-
// Delayed parsing callback for non-primary files. Not used in
763-
// WMO mode.
764-
std::unique_ptr<DelayedParsingCallbacks> SecondaryDelayedCB{
765-
computeDelayedParsingCallback(false)};
755+
std::unique_ptr<DelayedParsingCallbacks> DelayedCB{
756+
computeDelayedParsingCallback()};
766757

767758
PersistentParserState PersistentState(getASTContext());
768759

769760
bool hadLoadError = parsePartialModulesAndLibraryFiles(
770-
implicitImports, PersistentState,
771-
PrimaryDelayedCB.get(),
772-
SecondaryDelayedCB.get());
761+
implicitImports, PersistentState, DelayedCB.get());
773762
if (Invocation.isCodeCompletion()) {
774763
// When we are doing code completion, make sure to emit at least one
775764
// diagnostic, so that ASTContext is marked as erroneous. In this case
@@ -788,7 +777,7 @@ void CompilerInstance::parseAndCheckTypesUpTo(
788777
// interwined.
789778
if (MainBufferID != NO_SUCH_BUFFER) {
790779
parseAndTypeCheckMainFileUpTo(limitStage, PersistentState,
791-
PrimaryDelayedCB.get(), TypeCheckOptions);
780+
DelayedCB.get(), TypeCheckOptions);
792781
}
793782

794783
assert(llvm::all_of(MainModule->getFiles(), [](const FileUnit *File) -> bool {
@@ -829,16 +818,14 @@ void CompilerInstance::parseAndCheckTypesUpTo(
829818
void CompilerInstance::parseLibraryFile(
830819
unsigned BufferID, const ImplicitImports &implicitImports,
831820
PersistentParserState &PersistentState,
832-
DelayedParsingCallbacks *PrimaryDelayedCB,
833-
DelayedParsingCallbacks *SecondaryDelayedCB) {
821+
DelayedParsingCallbacks *DelayedCB) {
834822
FrontendStatsTracer tracer(Context->Stats, "parse-library-file");
835823

836824
auto *NextInput = createSourceFileForMainModule(
837825
SourceFileKind::Library, implicitImports.kind, BufferID);
838826
addAdditionalInitialImportsTo(NextInput, implicitImports);
839827

840828
auto IsPrimary = isWholeModuleCompilation() || isPrimaryInput(BufferID);
841-
auto *DelayedCB = IsPrimary ? PrimaryDelayedCB : SecondaryDelayedCB;
842829

843830
auto &Diags = NextInput->getASTContext().Diags;
844831
auto DidSuppressWarnings = Diags.getSuppressWarnings();
@@ -878,8 +865,7 @@ OptionSet<TypeCheckingFlags> CompilerInstance::computeTypeCheckingOptions() {
878865
bool CompilerInstance::parsePartialModulesAndLibraryFiles(
879866
const ImplicitImports &implicitImports,
880867
PersistentParserState &PersistentState,
881-
DelayedParsingCallbacks *PrimaryDelayedCB,
882-
DelayedParsingCallbacks *SecondaryDelayedCB) {
868+
DelayedParsingCallbacks *DelayedCB) {
883869
FrontendStatsTracer tracer(Context->Stats,
884870
"parse-partial-modules-and-library-files");
885871
bool hadLoadError = false;
@@ -894,8 +880,7 @@ bool CompilerInstance::parsePartialModulesAndLibraryFiles(
894880
// Then parse all the library files.
895881
for (auto BufferID : InputSourceCodeBufferIDs) {
896882
if (BufferID != MainBufferID) {
897-
parseLibraryFile(BufferID, implicitImports, PersistentState,
898-
PrimaryDelayedCB, SecondaryDelayedCB);
883+
parseLibraryFile(BufferID, implicitImports, PersistentState, DelayedCB);
899884
}
900885
}
901886
return hadLoadError;

0 commit comments

Comments
 (0)