MCPcopy Create free account
hub / github.com/argotorg/solidity / parseOptimizerSettings

Function parseOptimizerSettings

libsolidity/interface/StandardCompiler.cpp:623–691  ·  view source on GitHub ↗

Validates the optimizer settings and returns them in a parsed object. On error returns the json-formatted error message.

Source from the content-addressed store, hash-verified

621/// Validates the optimizer settings and returns them in a parsed object.
622/// On error returns the json-formatted error message.
623std::variant<OptimiserSettings, Json> parseOptimizerSettings(std::string_view const _language, Json const& _jsonInput)
624{
625 if (auto result = checkOptimizerKeys(_jsonInput))
626 return *result;
627
628 OptimiserSettings settings = _language == "EVMAssembly" ? OptimiserSettings::none() : OptimiserSettings::minimal();
629
630 if (_jsonInput.contains("enabled"))
631 {
632 if (!_jsonInput["enabled"].is_boolean())
633 return formatFatalError(Error::Type::JSONError, "The \"enabled\" setting must be a Boolean.");
634
635 if (_jsonInput["enabled"].get<bool>())
636 settings = OptimiserSettings::standard();
637 }
638
639 if (_jsonInput.contains("runs"))
640 {
641 if (!_jsonInput["runs"].is_number_unsigned())
642 return formatFatalError(Error::Type::JSONError, "The \"runs\" setting must be an unsigned number.");
643 settings.expectedExecutionsPerDeployment = _jsonInput["runs"].get<size_t>();
644 }
645
646 if (_jsonInput.contains("details"))
647 {
648 Json const& details = _jsonInput["details"];
649 if (auto result = checkOptimizerDetailsKeys(details))
650 return *result;
651
652 if (auto error = checkOptimizerDetail(details, "peephole", settings.runPeephole))
653 return *error;
654 if (auto error = checkOptimizerDetail(details, "inliner", settings.runInliner))
655 return *error;
656 if (auto error = checkOptimizerDetail(details, "jumpdestRemover", settings.runJumpdestRemover))
657 return *error;
658 if (auto error = checkOptimizerDetail(details, "orderLiterals", settings.runOrderLiterals))
659 return *error;
660 if (auto error = checkOptimizerDetail(details, "deduplicate", settings.runDeduplicate))
661 return *error;
662 if (auto error = checkOptimizerDetail(details, "cse", settings.runCSE))
663 return *error;
664 if (auto error = checkOptimizerDetail(details, "constantOptimizer", settings.runConstantOptimiser))
665 return *error;
666 if (auto error = checkOptimizerDetail(details, "yul", settings.runYulOptimiser))
667 return *error;
668 if (auto error = checkOptimizerDetail(details, "simpleCounterForLoopUncheckedIncrement", settings.simpleCounterForLoopUncheckedIncrement))
669 return *error;
670 settings.optimizeStackAllocation = settings.runYulOptimiser;
671 if (details.contains("yulDetails"))
672 {
673 if (!settings.runYulOptimiser)
674 {
675 if (checkKeys(details["yulDetails"], {"optimizerSteps"}, "settings.optimizer.details.yulDetails"))
676 return formatFatalError(Error::Type::JSONError, "Only optimizerSteps can be set in yulDetails when Yul optimizer is disabled.");
677 if (auto error = checkOptimizerDetailSteps(details["yulDetails"], "optimizerSteps", settings.yulOptimiserSteps, settings.yulOptimiserCleanupSteps, settings.runYulOptimiser))
678 return *error;
679 return {std::move(settings)};
680 }

Callers 1

parseInputMethod · 0.85

Calls 7

checkOptimizerKeysFunction · 0.85
formatFatalErrorFunction · 0.85
checkOptimizerDetailFunction · 0.85
checkKeysFunction · 0.85
containsMethod · 0.45

Tested by

no test coverage detected