aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/interface
diff options
context:
space:
mode:
authorchriseth <chris@ethereum.org>2018-12-03 18:52:48 +0800
committerGitHub <noreply@github.com>2018-12-03 18:52:48 +0800
commit4b98946e5a6cbc477ca5c61ca0a0dc8c2d1b27ca (patch)
treebf3b21164feeb37fbb2a48ecef1f13c4c67be7fb /libsolidity/interface
parent04d946669e70be680e7897dcbf2d4e3b6747cc22 (diff)
parent1cdcdcee656c080b8c6f9e2631bcc2a3c35fb13b (diff)
downloaddexon-solidity-4b98946e5a6cbc477ca5c61ca0a0dc8c2d1b27ca.tar.gz
dexon-solidity-4b98946e5a6cbc477ca5c61ca0a0dc8c2d1b27ca.tar.zst
dexon-solidity-4b98946e5a6cbc477ca5c61ca0a0dc8c2d1b27ca.zip
Merge pull request #5341 from ethereum/optimizeAssemblyCommandline
Apply the optimize commandline parameter to assembly mode.
Diffstat (limited to 'libsolidity/interface')
-rw-r--r--libsolidity/interface/AssemblyStack.cpp9
-rw-r--r--libsolidity/interface/AssemblyStack.h3
2 files changed, 12 insertions, 0 deletions
diff --git a/libsolidity/interface/AssemblyStack.cpp b/libsolidity/interface/AssemblyStack.cpp
index 66ba42ee..f5eb7e41 100644
--- a/libsolidity/interface/AssemblyStack.cpp
+++ b/libsolidity/interface/AssemblyStack.cpp
@@ -34,6 +34,8 @@
#include <libevmasm/Assembly.h>
+#include <libyul/optimiser/Suite.h>
+
using namespace std;
using namespace dev;
using namespace langutil;
@@ -79,6 +81,13 @@ bool AssemblyStack::parseAndAnalyze(std::string const& _sourceName, std::string
return analyzeParsed();
}
+void AssemblyStack::optimize()
+{
+ solAssert(m_language != Language::Assembly, "Optimization requested for loose assembly.");
+ yul::OptimiserSuite::run(*m_parserResult->code, *m_parserResult->analysisInfo);
+ solAssert(analyzeParsed(), "Invalid source code after optimization.");
+}
+
bool AssemblyStack::analyzeParsed()
{
solAssert(m_parserResult, "");
diff --git a/libsolidity/interface/AssemblyStack.h b/libsolidity/interface/AssemblyStack.h
index 7ae0592e..0d04ffec 100644
--- a/libsolidity/interface/AssemblyStack.h
+++ b/libsolidity/interface/AssemblyStack.h
@@ -69,6 +69,9 @@ public:
/// Multiple calls overwrite the previous state.
bool parseAndAnalyze(std::string const& _sourceName, std::string const& _source);
+ /// Run the optimizer suite. Can only be used with Yul or strict assembly.
+ void optimize();
+
/// Run the assembly step (should only be called after parseAndAnalyze).
MachineAssemblyObject assemble(Machine _machine) const;