mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Be more strict about values in the optimizer block in StandardJSON
This commit is contained in:
parent
2c860b7d74
commit
384a65f660
@ -342,10 +342,25 @@ Json::Value StandardCompiler::compileInternal(Json::Value const& _input)
|
|||||||
}
|
}
|
||||||
m_compilerStack.setRemappings(remappings);
|
m_compilerStack.setRemappings(remappings);
|
||||||
|
|
||||||
Json::Value optimizerSettings = settings.get("optimizer", Json::Value());
|
if (settings.isMember("optimizer"))
|
||||||
bool const optimize = optimizerSettings.get("enabled", Json::Value(false)).asBool();
|
{
|
||||||
unsigned const optimizeRuns = optimizerSettings.get("runs", Json::Value(200u)).asUInt();
|
Json::Value optimizerSettings = settings["optimizer"];
|
||||||
m_compilerStack.setOptimiserSettings(optimize, optimizeRuns);
|
if (optimizerSettings.isMember("enabled"))
|
||||||
|
{
|
||||||
|
if (!optimizerSettings["enabled"].isBool())
|
||||||
|
return formatFatalError("JSONError", "The \"enabled\" setting must be a boolean.");
|
||||||
|
|
||||||
|
bool const optimize = optimizerSettings["enabled"].asBool();
|
||||||
|
unsigned optimizeRuns = 200;
|
||||||
|
if (optimizerSettings.isMember("runs"))
|
||||||
|
{
|
||||||
|
if (!optimizerSettings["runs"].isUInt())
|
||||||
|
return formatFatalError("JSONError", "The \"runs\" setting must be an unsigned number.");
|
||||||
|
optimizeRuns = optimizerSettings["runs"].asUInt();
|
||||||
|
}
|
||||||
|
m_compilerStack.setOptimiserSettings(optimize, optimizeRuns);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
map<string, h160> libraries;
|
map<string, h160> libraries;
|
||||||
Json::Value jsonLibraries = settings.get("libraries", Json::Value(Json::objectValue));
|
Json::Value jsonLibraries = settings.get("libraries", Json::Value(Json::objectValue));
|
||||||
|
@ -225,6 +225,71 @@ BOOST_AUTO_TEST_CASE(smoke_test)
|
|||||||
BOOST_CHECK(containsAtMostWarnings(result));
|
BOOST_CHECK(containsAtMostWarnings(result));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(optimizer_enabled_not_boolean)
|
||||||
|
{
|
||||||
|
char const* input = R"(
|
||||||
|
{
|
||||||
|
"language": "Solidity",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": "wrong"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"empty": {
|
||||||
|
"content": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
Json::Value result = compile(input);
|
||||||
|
BOOST_CHECK(containsError(result, "JSONError", "The \"enabled\" setting must be a boolean."));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(optimizer_runs_not_a_number)
|
||||||
|
{
|
||||||
|
char const* input = R"(
|
||||||
|
{
|
||||||
|
"language": "Solidity",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"runs": "not a number"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"empty": {
|
||||||
|
"content": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
Json::Value result = compile(input);
|
||||||
|
BOOST_CHECK(containsError(result, "JSONError", "The \"runs\" setting must be an unsigned number."));
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE(optimizer_runs_not_an_unsigned_number)
|
||||||
|
{
|
||||||
|
char const* input = R"(
|
||||||
|
{
|
||||||
|
"language": "Solidity",
|
||||||
|
"settings": {
|
||||||
|
"optimizer": {
|
||||||
|
"enabled": true,
|
||||||
|
"runs": -1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"sources": {
|
||||||
|
"empty": {
|
||||||
|
"content": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
Json::Value result = compile(input);
|
||||||
|
BOOST_CHECK(containsError(result, "JSONError", "The \"runs\" setting must be an unsigned number."));
|
||||||
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(basic_compilation)
|
BOOST_AUTO_TEST_CASE(basic_compilation)
|
||||||
{
|
{
|
||||||
char const* input = R"(
|
char const* input = R"(
|
||||||
|
Loading…
Reference in New Issue
Block a user