Skip to content

Commit 3a02629

Browse files
committed
Frontend: Make lazy typechecking a TC opt instead of a frontend action.
1 parent 537770c commit 3a02629

File tree

12 files changed

+35
-47
lines changed

12 files changed

+35
-47
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,10 @@ namespace swift {
802802

803803
/// Defer typechecking of declarations to their use at runtime
804804
bool DeferToRuntime = false;
805+
806+
/// Allow request evalutation to perform type checking lazily, instead of
807+
/// eagerly typechecking source files after parsing.
808+
bool EnableLazyTypecheck = false;
805809
};
806810

807811
/// Options for controlling the behavior of the Clang importer.

include/swift/Frontend/FrontendOptions.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ class FrontendOptions {
155155
NoneAction, ///< No specific action
156156
Parse, ///< Parse only
157157
ResolveImports, ///< Parse and resolve imports only
158-
LazyTypecheck, ///< Parse and then do minimal type-checking for outputs
159158
Typecheck, ///< Parse and type-check only
160159
DumpParse, ///< Parse only and dump AST
161160
DumpInterfaceHash, ///< Parse and dump the interface token hash.

include/swift/Option/FrontendOptions.td

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,9 @@ def debug_forbid_typecheck_prefix : Separate<["-"], "debug-forbid-typecheck-pref
406406
HelpText<"Triggers llvm fatal_error if typechecker tries to typecheck a decl "
407407
"with the provided prefix name">;
408408

409+
def experimental_lazy_typecheck : Flag<["-"], "experimental-lazy-typecheck">,
410+
HelpText<"Type-check lazily as needed to produce requested outputs">;
411+
409412
def debug_emit_invalid_swiftinterface_syntax : Flag<["-"], "debug-emit-invalid-swiftinterface-syntax">,
410413
HelpText<"Write an invalid declaration into swiftinterface files">;
411414

include/swift/Option/Options.td

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1164,9 +1164,6 @@ def resolve_imports : Flag<["-"], "resolve-imports">,
11641164
def typecheck : Flag<["-"], "typecheck">,
11651165
HelpText<"Parse and type-check input file(s)">, ModeOpt,
11661166
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild]>;
1167-
def experimental_lazy_typecheck : Flag<["-"], "experimental-lazy-typecheck">,
1168-
HelpText<"Parse input file(s), then type-check lazily as needed to produce requested outputs">, ModeOpt,
1169-
Flags<[FrontendOption, NoInteractiveOption, HelpHidden, DoesNotAffectIncrementalBuild]>;
11701167
def dump_parse : Flag<["-"], "dump-parse">,
11711168
HelpText<"Parse input file(s) and dump AST(s)">, ModeOpt,
11721169
Flags<[FrontendOption, NoInteractiveOption, DoesNotAffectIncrementalBuild]>;

lib/Frontend/ArgsToFrontendOptionsConverter.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -552,8 +552,6 @@ ArgsToFrontendOptionsConverter::determineRequestedAction(const ArgList &args) {
552552
return FrontendOptions::ActionType::Parse;
553553
if (Opt.matches(OPT_resolve_imports))
554554
return FrontendOptions::ActionType::ResolveImports;
555-
if (Opt.matches(OPT_experimental_lazy_typecheck))
556-
return FrontendOptions::ActionType::LazyTypecheck;
557555
if (Opt.matches(OPT_typecheck))
558556
return FrontendOptions::ActionType::Typecheck;
559557
if (Opt.matches(OPT_dump_parse))

lib/Frontend/CompilerInvocation.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1423,6 +1423,8 @@ static bool ParseTypeCheckerArgs(TypeCheckerOptions &Opts, ArgList &Args,
14231423

14241424
Opts.DebugGenericSignatures |= Args.hasArg(OPT_debug_generic_signatures);
14251425

1426+
Opts.EnableLazyTypecheck |= Args.hasArg(OPT_experimental_lazy_typecheck);
1427+
14261428
return HadError;
14271429
}
14281430

lib/Frontend/Frontend.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1395,6 +1395,11 @@ bool CompilerInstance::performParseAndResolveImportsOnly() {
13951395
void CompilerInstance::performSema() {
13961396
performParseAndResolveImportsOnly();
13971397

1398+
// Skip eager type checking. Instead, let later stages of compilation drive
1399+
// type checking as needed through request evaluation.
1400+
if (getASTContext().TypeCheckerOpts.EnableLazyTypecheck)
1401+
return;
1402+
13981403
FrontendStatsTracer tracer(getStatsReporter(), "perform-sema");
13991404

14001405
forEachFileToTypeCheck([&](SourceFile &SF) {

lib/Frontend/FrontendOptions.cpp

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ bool FrontendOptions::needsProperModuleName(ActionType action) {
3333
case ActionType::NoneAction:
3434
case ActionType::Parse:
3535
case ActionType::ResolveImports:
36-
case ActionType::LazyTypecheck:
3736
case ActionType::Typecheck:
3837
case ActionType::DumpParse:
3938
case ActionType::DumpAST:
@@ -105,7 +104,6 @@ bool FrontendOptions::doesActionRequireSwiftStandardLibrary(ActionType action) {
105104
case ActionType::PrintFeature:
106105
return false;
107106
case ActionType::ResolveImports:
108-
case ActionType::LazyTypecheck:
109107
case ActionType::Typecheck:
110108
case ActionType::DumpAST:
111109
case ActionType::PrintAST:
@@ -151,7 +149,6 @@ bool FrontendOptions::doesActionRequireInputs(ActionType action) {
151149
case ActionType::CompileModuleFromInterface:
152150
case ActionType::TypecheckModuleFromInterface:
153151
case ActionType::ResolveImports:
154-
case ActionType::LazyTypecheck:
155152
case ActionType::Typecheck:
156153
case ActionType::DumpAST:
157154
case ActionType::PrintAST:
@@ -194,7 +191,6 @@ bool FrontendOptions::doesActionPerformEndOfPipelineActions(ActionType action) {
194191
case ActionType::CompileModuleFromInterface:
195192
case ActionType::TypecheckModuleFromInterface:
196193
case ActionType::ResolveImports:
197-
case ActionType::LazyTypecheck:
198194
case ActionType::Typecheck:
199195
case ActionType::DumpAST:
200196
case ActionType::PrintAST:
@@ -234,7 +230,6 @@ bool FrontendOptions::supportCompilationCaching(ActionType action) {
234230
case ActionType::EmitImportedModules:
235231
case ActionType::ScanDependencies:
236232
case ActionType::ResolveImports:
237-
case ActionType::LazyTypecheck:
238233
case ActionType::Typecheck:
239234
case ActionType::DumpAST:
240235
case ActionType::PrintAST:
@@ -295,7 +290,6 @@ FrontendOptions::formatForPrincipalOutputFileForAction(ActionType action) {
295290

296291
case ActionType::Parse:
297292
case ActionType::ResolveImports:
298-
case ActionType::LazyTypecheck:
299293
case ActionType::Typecheck:
300294
case ActionType::TypecheckModuleFromInterface:
301295
case ActionType::DumpParse:
@@ -383,7 +377,6 @@ bool FrontendOptions::canActionEmitDependencies(ActionType action) {
383377
case ActionType::PrintFeature:
384378
return false;
385379
case ActionType::ResolveImports:
386-
case ActionType::LazyTypecheck:
387380
case ActionType::Typecheck:
388381
case ActionType::MergeModules:
389382
case ActionType::EmitModuleOnly:
@@ -410,7 +403,6 @@ bool FrontendOptions::canActionEmitReferenceDependencies(ActionType action) {
410403
case ActionType::NoneAction:
411404
case ActionType::Parse:
412405
case ActionType::ResolveImports:
413-
case ActionType::LazyTypecheck:
414406
case ActionType::DumpParse:
415407
case ActionType::DumpInterfaceHash:
416408
case ActionType::DumpAST:
@@ -453,7 +445,6 @@ bool FrontendOptions::canActionEmitModuleSummary(ActionType action) {
453445
case ActionType::NoneAction:
454446
case ActionType::Parse:
455447
case ActionType::ResolveImports:
456-
case ActionType::LazyTypecheck:
457448
case ActionType::DumpParse:
458449
case ActionType::DumpInterfaceHash:
459450
case ActionType::DumpAST:
@@ -515,7 +506,6 @@ bool FrontendOptions::canActionEmitClangHeader(ActionType action) {
515506
case ActionType::PrintVersion:
516507
case ActionType::PrintFeature:
517508
return false;
518-
case ActionType::LazyTypecheck:
519509
case ActionType::Typecheck:
520510
case ActionType::MergeModules:
521511
case ActionType::EmitModuleOnly:
@@ -557,7 +547,6 @@ bool FrontendOptions::canActionEmitLoadedModuleTrace(ActionType action) {
557547
case ActionType::PrintFeature:
558548
return false;
559549
case ActionType::ResolveImports:
560-
case ActionType::LazyTypecheck:
561550
case ActionType::Typecheck:
562551
case ActionType::MergeModules:
563552
case ActionType::EmitModuleOnly:
@@ -587,7 +576,6 @@ bool FrontendOptions::canActionEmitModuleSemanticInfo(ActionType action) {
587576
case ActionType::NoneAction:
588577
case ActionType::Parse:
589578
case ActionType::ResolveImports:
590-
case ActionType::LazyTypecheck:
591579
case ActionType::DumpParse:
592580
case ActionType::DumpInterfaceHash:
593581
case ActionType::DumpAST:
@@ -631,7 +619,6 @@ bool FrontendOptions::canActionEmitConstValues(ActionType action) {
631619
case ActionType::NoneAction:
632620
case ActionType::Parse:
633621
case ActionType::ResolveImports:
634-
case ActionType::LazyTypecheck:
635622
case ActionType::DumpParse:
636623
case ActionType::DumpInterfaceHash:
637624
case ActionType::DumpAST:
@@ -673,7 +660,6 @@ bool FrontendOptions::canActionEmitModule(ActionType action) {
673660
case ActionType::NoneAction:
674661
case ActionType::Parse:
675662
case ActionType::ResolveImports:
676-
case ActionType::LazyTypecheck:
677663
case ActionType::Typecheck:
678664
case ActionType::DumpParse:
679665
case ActionType::DumpInterfaceHash:
@@ -741,7 +727,6 @@ bool FrontendOptions::canActionEmitInterface(ActionType action) {
741727
case ActionType::PrintFeature:
742728
return false;
743729
case ActionType::ResolveImports:
744-
case ActionType::LazyTypecheck:
745730
case ActionType::Typecheck:
746731
case ActionType::MergeModules:
747732
case ActionType::EmitModuleOnly:
@@ -762,7 +747,6 @@ bool FrontendOptions::doesActionProduceOutput(ActionType action) {
762747
switch (action) {
763748
case ActionType::Parse:
764749
case ActionType::ResolveImports:
765-
case ActionType::LazyTypecheck:
766750
case ActionType::Typecheck:
767751
case ActionType::DumpParse:
768752
case ActionType::DumpAST:
@@ -821,7 +805,6 @@ bool FrontendOptions::doesActionProduceTextualOutput(ActionType action) {
821805

822806
case ActionType::Parse:
823807
case ActionType::ResolveImports:
824-
case ActionType::LazyTypecheck:
825808
case ActionType::Typecheck:
826809
case ActionType::DumpParse:
827810
case ActionType::DumpInterfaceHash:
@@ -851,7 +834,6 @@ bool FrontendOptions::doesActionGenerateSIL(ActionType action) {
851834
case ActionType::NoneAction:
852835
case ActionType::Parse:
853836
case ActionType::ResolveImports:
854-
case ActionType::LazyTypecheck:
855837
case ActionType::Typecheck:
856838
case ActionType::DumpParse:
857839
case ActionType::DumpInterfaceHash:
@@ -903,7 +885,6 @@ bool FrontendOptions::doesActionGenerateIR(ActionType action) {
903885
case ActionType::DumpTypeInfo:
904886
case ActionType::CompileModuleFromInterface:
905887
case ActionType::TypecheckModuleFromInterface:
906-
case ActionType::LazyTypecheck:
907888
case ActionType::Typecheck:
908889
case ActionType::ResolveImports:
909890
case ActionType::MergeModules:

lib/FrontendTool/FrontendTool.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1359,9 +1359,6 @@ static bool performAction(CompilerInstance &Instance,
13591359
return performParseOnly(*Instance.getMainModule());
13601360
case FrontendOptions::ActionType::ResolveImports:
13611361
return Instance.performParseAndResolveImportsOnly();
1362-
case FrontendOptions::ActionType::LazyTypecheck:
1363-
// For now, this action is just an alias of ResolveImports.
1364-
return Instance.performParseAndResolveImportsOnly();
13651362
case FrontendOptions::ActionType::Typecheck:
13661363
return withSemanticAnalysis(Instance, observer,
13671364
[](CompilerInstance &Instance) {

test/ModuleInterface/lazy-typecheck.swift renamed to test/ModuleInterface/resolve-imports.swift

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
// RUN: %empty-directory(%t)
22

3-
// RUN: %target-swift-frontend -resolve-imports %s -emit-module-interface-path %t/main.swiftinterface -enable-library-evolution
4-
// RUN: %target-swift-frontend -experimental-lazy-typecheck %s -emit-module-interface-path %t/main.swiftinterface -enable-library-evolution
5-
// RUN: %FileCheck %s < %t/main.swiftinterface
3+
// RUN: %target-swift-frontend -swift-version 5 -parse-as-library -enable-library-evolution -module-name resolve_imports -resolve-imports %s -emit-module-interface-path %t/resolve_imports.swiftinterface
4+
// RUN: %FileCheck %s < %t/resolve_imports.swiftinterface
5+
// RUN: %target-swift-typecheck-module-from-interface(%t/resolve_imports.swiftinterface)
66

77
// CHECK: import Swift
88

@@ -21,6 +21,3 @@ public class C {}
2121
// CHECK: public class C {
2222
// CHECK: deinit
2323
// CHECK: }
24-
25-
// Globals
26-
public var year = 2023

0 commit comments

Comments
 (0)