Skip to content

Commit 0e21d85

Browse files
committed
RequirementMachine: Add -requirement-machine-protocol-signatures= flag
There are three settings, on, off and verify. Not hooked up quite yet.
1 parent a4c2ad4 commit 0e21d85

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

include/swift/Basic/LangOptions.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,6 +481,11 @@ namespace swift {
481481
/// algorithm.
482482
unsigned RequirementMachineDepthLimit = 10;
483483

484+
/// Enable the new experimental protocol requirement signature minimization
485+
/// algorithm.
486+
RequirementMachineMode RequirementMachineProtocolSignatures =
487+
RequirementMachineMode::Disabled;
488+
484489
/// Sets the target we are building for and updates platform conditions
485490
/// to match.
486491
///

include/swift/Option/Options.td

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,10 @@ def requirement_machine_EQ : Joined<["-"], "requirement-machine=">,
616616
Flags<[FrontendOption, ModuleInterfaceOption]>,
617617
HelpText<"Control usage of experimental generics implementation: 'on', 'off', or 'verify'">;
618618

619+
def requirement_machine_protocol_signatures_EQ : Joined<["-"], "requirement-machine-protocol-signatures=">,
620+
Flags<[FrontendOption]>,
621+
HelpText<"Control usage of experimental protocol requirement signature minimization: 'on', 'off', or 'verify'">;
622+
619623
// Diagnostic control options
620624
def suppress_warnings : Flag<["-"], "suppress-warnings">,
621625
Flags<[FrontendOption]>,

lib/Frontend/CompilerInvocation.cpp

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -831,13 +831,12 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
831831
}
832832
}
833833

834-
if (auto A =
835-
Args.getLastArg(OPT_requirement_machine_EQ)) {
834+
if (auto A = Args.getLastArg(OPT_requirement_machine_EQ)) {
836835
auto value = llvm::StringSwitch<Optional<RequirementMachineMode>>(A->getValue())
837-
.Case("off", RequirementMachineMode::Disabled)
838-
.Case("on", RequirementMachineMode::Enabled)
839-
.Case("verify", RequirementMachineMode::Verify)
840-
.Default(None);
836+
.Case("off", RequirementMachineMode::Disabled)
837+
.Case("on", RequirementMachineMode::Enabled)
838+
.Case("verify", RequirementMachineMode::Verify)
839+
.Default(None);
841840

842841
if (value)
843842
Opts.EnableRequirementMachine = *value;
@@ -846,6 +845,20 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
846845
A->getAsString(Args), A->getValue());
847846
}
848847

848+
if (auto A = Args.getLastArg(OPT_requirement_machine_protocol_signatures_EQ)) {
849+
auto value = llvm::StringSwitch<Optional<RequirementMachineMode>>(A->getValue())
850+
.Case("off", RequirementMachineMode::Disabled)
851+
.Case("on", RequirementMachineMode::Enabled)
852+
.Case("verify", RequirementMachineMode::Verify)
853+
.Default(None);
854+
855+
if (value)
856+
Opts.RequirementMachineProtocolSignatures = *value;
857+
else
858+
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
859+
A->getAsString(Args), A->getValue());
860+
}
861+
849862
Opts.DumpRequirementMachine = Args.hasArg(
850863
OPT_dump_requirement_machine);
851864
Opts.AnalyzeRequirementMachine = Args.hasArg(

0 commit comments

Comments
 (0)