Skip to content

Commit 7c8041a

Browse files
authored
Merge pull request #33672 from CodaFi/ceci-nest-pas-une-pipeline
[NFC] Clean Up FrontendTool
2 parents 539b241 + 4c56c95 commit 7c8041a

File tree

10 files changed

+319
-185
lines changed

10 files changed

+319
-185
lines changed

include/swift/Frontend/Frontend.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,7 @@ class CompilerInstance {
621621
///
622622
/// This is similar to a parse-only invocation, but module imports will also
623623
/// be processed.
624-
void performParseAndResolveImportsOnly();
624+
bool performParseAndResolveImportsOnly();
625625

626626
/// Performs mandatory, diagnostic, and optimization passes over the SIL.
627627
/// \param silModule The SIL module that was generated during SILGen.

include/swift/Frontend/FrontendOptions.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,9 +294,16 @@ class FrontendOptions {
294294
/// '.../lib/swift', otherwise '.../lib/swift_static'.
295295
bool UseSharedResourceFolder = true;
296296

297-
/// \return true if action only parses without doing other compilation steps.
297+
/// \return true if the given action only parses without doing other compilation steps.
298298
static bool shouldActionOnlyParse(ActionType);
299299

300+
/// \return true if the given action requires the standard library to be
301+
/// loaded before it is run.
302+
static bool doesActionRequireSwiftStandardLibrary(ActionType);
303+
304+
/// \return true if the given action requires input files to be provided.
305+
static bool doesActionRequireInputs(ActionType action);
306+
300307
/// Return a hash code of any components from these options that should
301308
/// contribute to a Swift Bridging PCH hash.
302309
llvm::hash_code getPCHHashComponents() const {

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -406,8 +406,7 @@ bool ArgsToFrontendOptionsConverter::setUpInputKindAndImmediateArgs() {
406406
if (Opts.InputsAndOutputs.verifyInputs(
407407
Diags, treatAsSIL,
408408
Opts.RequestedAction == FrontendOptions::ActionType::REPL,
409-
(Opts.RequestedAction == FrontendOptions::ActionType::NoneAction ||
410-
Opts.RequestedAction == FrontendOptions::ActionType::PrintVersion))){
409+
!FrontendOptions::doesActionRequireInputs(Opts.RequestedAction))) {
411410
return true;
412411
}
413412
if (Opts.RequestedAction == FrontendOptions::ActionType::Immediate) {

lib/Frontend/Frontend.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -848,7 +848,7 @@ void CompilerInstance::setMainModule(ModuleDecl *newMod) {
848848
Context->addLoadedModule(newMod);
849849
}
850850

851-
void CompilerInstance::performParseAndResolveImportsOnly() {
851+
bool CompilerInstance::performParseAndResolveImportsOnly() {
852852
FrontendStatsTracer tracer(getStatsReporter(), "parse-and-resolve-imports");
853853

854854
// Resolve imports for all the source files.
@@ -867,6 +867,7 @@ void CompilerInstance::performParseAndResolveImportsOnly() {
867867
mainModule->setHasResolvedImports();
868868

869869
bindExtensions(*mainModule);
870+
return Context->hadError();
870871
}
871872

872873
void CompilerInstance::performSema() {

lib/Frontend/FrontendOptions.cpp

Lines changed: 92 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -73,20 +73,104 @@ bool FrontendOptions::needsProperModuleName(ActionType action) {
7373

7474
bool FrontendOptions::shouldActionOnlyParse(ActionType action) {
7575
switch (action) {
76-
case FrontendOptions::ActionType::Parse:
77-
case FrontendOptions::ActionType::DumpParse:
78-
case FrontendOptions::ActionType::EmitSyntax:
79-
case FrontendOptions::ActionType::DumpInterfaceHash:
80-
case FrontendOptions::ActionType::EmitImportedModules:
81-
case FrontendOptions::ActionType::ScanDependencies:
82-
case FrontendOptions::ActionType::ScanClangDependencies:
83-
case FrontendOptions::ActionType::PrintVersion:
76+
case ActionType::Parse:
77+
case ActionType::DumpParse:
78+
case ActionType::EmitSyntax:
79+
case ActionType::DumpInterfaceHash:
80+
case ActionType::EmitImportedModules:
81+
case ActionType::ScanDependencies:
82+
case ActionType::ScanClangDependencies:
83+
case ActionType::PrintVersion:
8484
return true;
8585
default:
8686
return false;
8787
}
8888
}
8989

90+
bool FrontendOptions::doesActionRequireSwiftStandardLibrary(ActionType action) {
91+
switch (action) {
92+
case ActionType::NoneAction:
93+
case ActionType::Parse:
94+
case ActionType::DumpParse:
95+
case ActionType::EmitSyntax:
96+
case ActionType::DumpInterfaceHash:
97+
case ActionType::EmitImportedModules:
98+
case ActionType::ScanDependencies:
99+
case ActionType::ScanClangDependencies:
100+
case ActionType::PrintVersion:
101+
case ActionType::EmitPCH:
102+
case ActionType::EmitPCM:
103+
case ActionType::DumpPCM:
104+
case ActionType::CompileModuleFromInterface:
105+
case ActionType::TypecheckModuleFromInterface:
106+
return false;
107+
case ActionType::ResolveImports:
108+
case ActionType::Typecheck:
109+
case ActionType::DumpAST:
110+
case ActionType::PrintAST:
111+
case ActionType::DumpScopeMaps:
112+
case ActionType::DumpTypeRefinementContexts:
113+
case ActionType::EmitSILGen:
114+
case ActionType::EmitSIL:
115+
case ActionType::EmitModuleOnly:
116+
case ActionType::MergeModules:
117+
case ActionType::EmitSIBGen:
118+
case ActionType::EmitSIB:
119+
case ActionType::Immediate:
120+
case ActionType::REPL:
121+
case ActionType::EmitAssembly:
122+
case ActionType::EmitIR:
123+
case ActionType::EmitBC:
124+
case ActionType::EmitObject:
125+
case ActionType::DumpTypeInfo:
126+
assert(!FrontendOptions::shouldActionOnlyParse(action) &&
127+
"Parse-only actions should not load modules!");
128+
return true;
129+
}
130+
llvm_unreachable("Unknown ActionType");
131+
}
132+
133+
bool FrontendOptions::doesActionRequireInputs(ActionType action) {
134+
switch (action) {
135+
case ActionType::NoneAction:
136+
case ActionType::PrintVersion:
137+
return false;
138+
case ActionType::REPL:
139+
case ActionType::Parse:
140+
case ActionType::DumpParse:
141+
case ActionType::EmitSyntax:
142+
case ActionType::DumpInterfaceHash:
143+
case ActionType::EmitImportedModules:
144+
case ActionType::ScanDependencies:
145+
case ActionType::ScanClangDependencies:
146+
case ActionType::EmitPCH:
147+
case ActionType::EmitPCM:
148+
case ActionType::DumpPCM:
149+
case ActionType::CompileModuleFromInterface:
150+
case ActionType::TypecheckModuleFromInterface:
151+
case ActionType::ResolveImports:
152+
case ActionType::Typecheck:
153+
case ActionType::DumpAST:
154+
case ActionType::PrintAST:
155+
case ActionType::DumpScopeMaps:
156+
case ActionType::DumpTypeRefinementContexts:
157+
case ActionType::EmitSILGen:
158+
case ActionType::EmitSIL:
159+
case ActionType::EmitModuleOnly:
160+
case ActionType::MergeModules:
161+
case ActionType::EmitSIBGen:
162+
case ActionType::EmitSIB:
163+
case ActionType::Immediate:
164+
case ActionType::EmitAssembly:
165+
case ActionType::EmitIR:
166+
case ActionType::EmitBC:
167+
case ActionType::EmitObject:
168+
case ActionType::DumpTypeInfo:
169+
return true;
170+
}
171+
llvm_unreachable("Unknown ActionType");
172+
}
173+
90174
void FrontendOptions::forAllOutputPaths(
91175
const InputFile &input, llvm::function_ref<void(StringRef)> fn) const {
92176
if (RequestedAction != FrontendOptions::ActionType::EmitModuleOnly &&

0 commit comments

Comments
 (0)