This commit is contained in:
Alexander Arlt 2022-08-19 16:12:23 +02:00
parent 1774de0b3f
commit 91e3b650f9
3 changed files with 18 additions and 22 deletions

View File

@ -109,16 +109,14 @@ AssemblyItem Assembly::createAssemblyItemFromJSON(Json::Value const& _json)
std::string name = getOrDefault<std::string>(_json, "name", "");
solAssert(!name.empty());
int begin = get<int>(_json, "begin");
int end = get<int>(_json, "end");
SourceLocation location;
location.start = get<int>(_json, "begin");
location.end = get<int>(_json, "end");
int srcIndex = get<int>(_json, "source");
size_t modifierDepth = static_cast<size_t>(getOrDefault<int>(_json, "modifierDepth", 0));
std::string value = getOrDefault<std::string>(_json, "value", "");
std::string jumpType = getOrDefault<std::string>(_json, "jumpType", "");
SourceLocation location;
location.start = begin;
location.end = end;
auto updateUsedTags = [&](u256 const& data) {
m_usedTags = max(m_usedTags, static_cast<unsigned>(data) + 1);
@ -142,10 +140,9 @@ AssemblyItem Assembly::createAssemblyItemFromJSON(Json::Value const& _json)
AssemblyItem result(0);
if (c_instructions.find(name) != c_instructions.end())
if (c_instructions.count(name))
{
AssemblyItem item{c_instructions.at(name), location};
item.m_modifierDepth = modifierDepth;
if (!jumpType.empty())
item.setJumpType(jumpType);
result = item;
@ -154,42 +151,42 @@ AssemblyItem Assembly::createAssemblyItemFromJSON(Json::Value const& _json)
{
if (name == "PUSH")
{
AssemblyItem item{AssemblyItemType::Push, u256("0x" + value), location};
AssemblyItem item{AssemblyItemType::Push, u256("0x" + value)};
if (!jumpType.empty())
item.setJumpType(jumpType);
result = item;
}
else if (name == "PUSH [ErrorTag]")
result = {AssemblyItemType::PushTag, 0, location};
result = {AssemblyItemType::PushTag, 0};
else if (name == "PUSH [tag]")
result = {AssemblyItemType::PushTag, updateUsedTags(u256(value)), location};
result = {AssemblyItemType::PushTag, updateUsedTags(u256(value))};
else if (name == "PUSH [$]")
result = {AssemblyItemType::PushSub, u256("0x" + value), location};
result = {AssemblyItemType::PushSub, u256("0x" + value)};
else if (name == "PUSH #[$]")
result = {AssemblyItemType::PushSubSize, u256("0x" + value), location};
result = {AssemblyItemType::PushSubSize, u256("0x" + value)};
else if (name == "PUSHSIZE")
result = {AssemblyItemType::PushProgramSize, 0, location};
result = {AssemblyItemType::PushProgramSize, 0};
else if (name == "PUSHLIB")
result = {AssemblyItemType::PushLibraryAddress, libraryHash(value), location};
result = {AssemblyItemType::PushLibraryAddress, libraryHash(value)};
else if (name == "PUSHDEPLOYADDRESS")
result = {AssemblyItemType::PushDeployTimeAddress, 0, location};
result = {AssemblyItemType::PushDeployTimeAddress, 0};
else if (name == "PUSHIMMUTABLE")
result = {AssemblyItemType::PushImmutable, immutableHash(value), location};
result = {AssemblyItemType::PushImmutable, immutableHash(value)};
else if (name == "ASSIGNIMMUTABLE")
result = {AssemblyItemType::AssignImmutable, immutableHash(value), location};
result = {AssemblyItemType::AssignImmutable, immutableHash(value)};
else if (name == "tag")
result = {AssemblyItemType::Tag, updateUsedTags(u256(value)), location};
result = {AssemblyItemType::Tag, updateUsedTags(u256(value))};
else if (name == "PUSH data")
result = {AssemblyItemType::PushData, u256("0x" + value), location};
result = {AssemblyItemType::PushData, u256("0x" + value)};
else if (name == "VERBATIM")
{
AssemblyItem item(fromHex(value), 0, 0);
item.setLocation(location);
result = item;
}
else
assertThrow(false, InvalidOpcode, "");
}
result.setLocation(location);
result.m_modifierDepth = modifierDepth;
return result;
}

View File

@ -242,6 +242,7 @@ void CompilerStack::setLibraries(std::map<std::string, util::h160> const& _libra
void CompilerStack::setOptimiserSettings(bool _optimize, size_t _runs)
{
OptimiserSettings settings = _optimize ? OptimiserSettings::standard() : OptimiserSettings::minimal();
settings.enabled = _optimize;
settings.expectedExecutionsPerDeployment = _runs;
setOptimiserSettings(std::move(settings));
}

View File

@ -279,8 +279,6 @@ OptimiserSettings CommandLineOptions::optimiserSettings() const
solAssert(settings.yulOptimiserCleanupSteps == OptimiserSettings::DefaultYulOptimiserCleanupSteps);
}
settings.enabled = optimizer.enabled;
return settings;
}