diff options
author | chriseth <c@ethdev.com> | 2015-05-06 16:43:59 +0800 |
---|---|---|
committer | chriseth <c@ethdev.com> | 2015-05-06 16:43:59 +0800 |
commit | 16e468460fab786ddcdff7944e993bd852166f25 (patch) | |
tree | 05e0add16b113c8268d3947b9379e6462eb33d42 /CommandLineInterface.cpp | |
parent | b5491873bc5d430ee66874857d00ada5260bef07 (diff) | |
download | dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.tar dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.tar.gz dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.tar.bz2 dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.tar.lz dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.tar.xz dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.tar.zst dexon-solidity-16e468460fab786ddcdff7944e993bd852166f25.zip |
Structural gas estimator.
Diffstat (limited to 'CommandLineInterface.cpp')
-rw-r--r-- | CommandLineInterface.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/CommandLineInterface.cpp b/CommandLineInterface.cpp index e6f03a2e..944c8f68 100644 --- a/CommandLineInterface.cpp +++ b/CommandLineInterface.cpp @@ -42,6 +42,7 @@ #include <libsolidity/Exceptions.h> #include <libsolidity/CompilerStack.h> #include <libsolidity/SourceReferenceFormatter.h> +#include <libsolidity/StructuralGasEstimator.h> using namespace std; namespace po = boost::program_options; @@ -464,6 +465,17 @@ void CommandLineInterface::handleAst(string const& _argStr) // do we need AST output? if (m_args.count(_argStr)) { + StructuralGasEstimator gasEstimator; + vector<ASTNode const*> asts; + for (auto const& sourceCode: m_sourceCodes) + asts.push_back(&m_compiler->getAST(sourceCode.first)); + map<ASTNode const*, eth::GasMeter::GasConsumption> gasCosts; + if (m_compiler->getRuntimeAssemblyItems()) + gasCosts = gasEstimator.breakToStatementLevel( + gasEstimator.performEstimation(*m_compiler->getRuntimeAssemblyItems(), asts), + asts + ); + auto choice = m_args[_argStr].as<OutputType>(); if (outputToStdout(choice)) { @@ -473,7 +485,11 @@ void CommandLineInterface::handleAst(string const& _argStr) cout << endl << "======= " << sourceCode.first << " =======" << endl; if (_argStr == g_argAstStr) { - ASTPrinter printer(m_compiler->getAST(sourceCode.first), sourceCode.second); + ASTPrinter printer( + m_compiler->getAST(sourceCode.first), + sourceCode.second, + gasCosts + ); printer.print(cout); } else |