Teach the frontend how to parse TypeCheckerOptions

This commit is contained in:
Robert Widmann
2019-11-08 16:33:25 -08:00
parent 097726717e
commit 422bb372d3
4 changed files with 53 additions and 41 deletions

View File

@@ -90,15 +90,6 @@ bool ArgsToFrontendOptionsConverter::convert(
computeDebugTimeOptions();
computeTBDOptions();
setUnsignedIntegerArgument(OPT_warn_long_function_bodies, 10,
Opts.WarnLongFunctionBodies);
setUnsignedIntegerArgument(OPT_warn_long_expression_type_checking, 10,
Opts.WarnLongExpressionTypeChecking);
setUnsignedIntegerArgument(OPT_solver_expression_time_threshold_EQ, 10,
Opts.SolverExpressionTimeThreshold);
setUnsignedIntegerArgument(OPT_switch_checking_invocation_threshold_EQ, 10,
Opts.SwitchCheckingInvocationThreshold);
Opts.CheckOnoneSupportCompleteness = Args.hasArg(OPT_check_onone_completeness);
Opts.DebuggerTestingTransform = Args.hasArg(OPT_debugger_testing_transform);
@@ -163,7 +154,7 @@ bool ArgsToFrontendOptionsConverter::convert(
return true;
if (FrontendOptions::doesActionGenerateIR(Opts.RequestedAction)
&& Opts.SkipNonInlinableFunctionBodies) {
&& Args.hasArg(OPT_experimental_skip_non_inlinable_function_bodies)) {
Diags.diagnose(SourceLoc(), diag::cannot_emit_ir_skipping_function_bodies);
return true;
}
@@ -222,17 +213,7 @@ void ArgsToFrontendOptionsConverter::computePrintStatsOptions() {
void ArgsToFrontendOptionsConverter::computeDebugTimeOptions() {
using namespace options;
Opts.DebugTimeFunctionBodies |= Args.hasArg(OPT_debug_time_function_bodies);
Opts.DebugTimeExpressionTypeChecking |=
Args.hasArg(OPT_debug_time_expression_type_checking);
Opts.DebugTimeCompilation |= Args.hasArg(OPT_debug_time_compilation);
Opts.SkipNonInlinableFunctionBodies |=
Args.hasArg(OPT_experimental_skip_non_inlinable_function_bodies);
// If asked to perform InstallAPI, go ahead and enable non-inlinable function
// body skipping.
Opts.SkipNonInlinableFunctionBodies |=
Args.hasArg(OPT_tbd_is_installapi);
if (const Arg *A = Args.getLastArg(OPT_stats_output_dir)) {
Opts.StatsOutputDir = A->getValue();
@@ -266,19 +247,6 @@ void ArgsToFrontendOptionsConverter::computeTBDOptions() {
}
}
void ArgsToFrontendOptionsConverter::setUnsignedIntegerArgument(
options::ID optionID, unsigned radix, unsigned &valueToSet) {
if (const Arg *A = Args.getLastArg(optionID)) {
unsigned attempt;
if (StringRef(A->getValue()).getAsInteger(radix, attempt)) {
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
A->getAsString(Args), A->getValue());
} else {
valueToSet = attempt;
}
}
}
void ArgsToFrontendOptionsConverter::computePlaygroundOptions() {
using namespace options;
Opts.PlaygroundTransform |= Args.hasArg(OPT_playground);