diff options
author | chriseth <chris@ethereum.org> | 2018-12-03 18:52:48 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-03 18:52:48 +0800 |
commit | 4b98946e5a6cbc477ca5c61ca0a0dc8c2d1b27ca (patch) | |
tree | bf3b21164feeb37fbb2a48ecef1f13c4c67be7fb /libsolidity/interface | |
parent | 04d946669e70be680e7897dcbf2d4e3b6747cc22 (diff) | |
parent | 1cdcdcee656c080b8c6f9e2631bcc2a3c35fb13b (diff) | |
download | dexon-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.cpp | 9 | ||||
-rw-r--r-- | libsolidity/interface/AssemblyStack.h | 3 |
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; |