diff options
-rw-r--r-- | libsolidity/codegen/Compiler.cpp | 6 | ||||
-rw-r--r-- | libsolidity/codegen/CompilerUtils.cpp | 1 | ||||
-rw-r--r-- | libsolidity/codegen/ExpressionCompiler.cpp | 12 | ||||
-rw-r--r-- | solc/CommandLineInterface.cpp | 6 | ||||
-rw-r--r-- | solc/jsonCompiler.cpp | 4 | ||||
-rw-r--r-- | test/libsolidity/GasMeter.cpp | 4 |
6 files changed, 18 insertions, 15 deletions
diff --git a/libsolidity/codegen/Compiler.cpp b/libsolidity/codegen/Compiler.cpp index 5daa37de..055e607f 100644 --- a/libsolidity/codegen/Compiler.cpp +++ b/libsolidity/codegen/Compiler.cpp @@ -24,12 +24,11 @@ #include <algorithm> #include <boost/range/adaptor/reversed.hpp> #include <libevmcore/Instruction.h> +#include <libethcore/ChainOperationParams.h> #include <libevmasm/Assembly.h> -#include <libevmcore/Params.h> #include <libsolidity/ast/AST.h> #include <libsolidity/codegen/ExpressionCompiler.h> #include <libsolidity/codegen/CompilerUtils.h> - using namespace std; using namespace dev; using namespace dev::solidity; @@ -760,6 +759,7 @@ void Compiler::compileExpression(Expression const& _expression, TypePointer cons eth::Assembly Compiler::cloneRuntime() { + eth::EVMSchedule schedule; eth::Assembly a; a << eth::Instruction::CALLDATASIZE; a << u256(0) << eth::Instruction::DUP1 << eth::Instruction::CALLDATACOPY; @@ -771,7 +771,7 @@ eth::Assembly Compiler::cloneRuntime() // this is the address which has to be substituted by the linker. //@todo implement as special "marker" AssemblyItem. a << u256("0xcafecafecafecafecafecafecafecafecafecafe"); - a << u256(eth::c_callGas + eth::c_callValueTransferGas + 10) << eth::Instruction::GAS << eth::Instruction::SUB; + a << u256(schedule.callGas + schedule.callValueTransferGas + 10) << eth::Instruction::GAS << eth::Instruction::SUB; a << eth::Instruction::CALLCODE; //Propagate error condition (if CALLCODE pushes 0 on stack). a << eth::Instruction::ISZERO; diff --git a/libsolidity/codegen/CompilerUtils.cpp b/libsolidity/codegen/CompilerUtils.cpp index 6d82e94b..ce20f2d1 100644 --- a/libsolidity/codegen/CompilerUtils.cpp +++ b/libsolidity/codegen/CompilerUtils.cpp @@ -23,7 +23,6 @@ #include <libsolidity/codegen/CompilerUtils.h> #include <libsolidity/ast/AST.h> #include <libevmcore/Instruction.h> -#include <libevmcore/Params.h> #include <libsolidity/codegen/ArrayUtils.h> #include <libsolidity/codegen/LValue.h> diff --git a/libsolidity/codegen/ExpressionCompiler.cpp b/libsolidity/codegen/ExpressionCompiler.cpp index 0f952f9c..05d9ea1c 100644 --- a/libsolidity/codegen/ExpressionCompiler.cpp +++ b/libsolidity/codegen/ExpressionCompiler.cpp @@ -23,17 +23,18 @@ #include <utility> #include <numeric> #include <boost/range/adaptor/reversed.hpp> -#include <libevmcore/Params.h> #include <libdevcore/Common.h> #include <libdevcore/SHA3.h> +#include <libethcore/ChainOperationParams.h> #include <libsolidity/ast/AST.h> #include <libsolidity/codegen/ExpressionCompiler.h> #include <libsolidity/codegen/CompilerContext.h> #include <libsolidity/codegen/CompilerUtils.h> #include <libsolidity/codegen/LValue.h> - using namespace std; +// TODO: FIXME: HOMESTEAD: XXX: @chriseth Params deprecated - use EVMSchedule instead. + namespace dev { namespace solidity @@ -1195,6 +1196,7 @@ void ExpressionCompiler::appendExternalFunctionCall( vector<ASTPointer<Expression const>> const& _arguments ) { + eth::EVMSchedule schedule;// TODO: Make relevant to current suppose context. solAssert( _functionType.takesArbitraryParameters() || _arguments.size() == _functionType.parameterTypes().size(), "" @@ -1303,11 +1305,11 @@ void ExpressionCompiler::appendExternalFunctionCall( { // send all gas except the amount needed to execute "SUB" and "CALL" // @todo this retains too much gas for now, needs to be fine-tuned. - u256 gasNeededByCaller = eth::c_callGas + 10; + u256 gasNeededByCaller = schedule.callGas + 10; if (_functionType.valueSet()) - gasNeededByCaller += eth::c_callValueTransferGas; + gasNeededByCaller += schedule.callValueTransferGas; if (!isCallCode) - gasNeededByCaller += eth::c_callNewAccountGas; // we never know + gasNeededByCaller += schedule.callNewAccountGas; // we never know m_context << gasNeededByCaller << eth::Instruction::GAS << diff --git a/solc/CommandLineInterface.cpp b/solc/CommandLineInterface.cpp index b4121574..376196e1 100644 --- a/solc/CommandLineInterface.cpp +++ b/solc/CommandLineInterface.cpp @@ -34,7 +34,6 @@ #include <libdevcore/CommonData.h> #include <libdevcore/CommonIO.h> #include <libevmcore/Instruction.h> -#include <libevmcore/Params.h> #include <libsolidity/interface/Version.h> #include <libsolidity/parsing/Scanner.h> #include <libsolidity/parsing/Parser.h> @@ -239,6 +238,7 @@ void CommandLineInterface::handleMeta(DocumentationType _type, string const& _co void CommandLineInterface::handleGasEstimation(string const& _contract) { + eth::EVMSchedule schedule; // TODO: make it relevant to the SealEngine/EnvInfo. using Gas = GasEstimator::GasConsumption; if (!m_compiler->assemblyItems(_contract) && !m_compiler->runtimeAssemblyItems(_contract)) return; @@ -248,8 +248,8 @@ void CommandLineInterface::handleGasEstimation(string const& _contract) Gas gas = GasEstimator::functionalEstimation(*items); u256 bytecodeSize(m_compiler->runtimeObject(_contract).bytecode.size()); cout << "construction:" << endl; - cout << " " << gas << " + " << (bytecodeSize * eth::c_createDataGas) << " = "; - gas += bytecodeSize * eth::c_createDataGas; + cout << " " << gas << " + " << (bytecodeSize * schedule.createDataGas) << " = "; + gas += bytecodeSize * schedule.createDataGas; cout << gas << endl; } if (eth::AssemblyItems const* items = m_compiler->runtimeAssemblyItems(_contract)) diff --git a/solc/jsonCompiler.cpp b/solc/jsonCompiler.cpp index 43164807..cb3eeefd 100644 --- a/solc/jsonCompiler.cpp +++ b/solc/jsonCompiler.cpp @@ -27,7 +27,6 @@ #include <libdevcore/CommonData.h> #include <libdevcore/CommonIO.h> #include <libevmcore/Instruction.h> -#include <libevmcore/Params.h> #include <libsolidity/parsing/Scanner.h> #include <libsolidity/parsing/Parser.h> #include <libsolidity/ast/ASTPrinter.h> @@ -67,6 +66,7 @@ Json::Value gasToJson(GasEstimator::GasConsumption const& _gas) Json::Value estimateGas(CompilerStack const& _compiler, string const& _contract) { + eth::EVMSchedule schedule;// TODO: make relevant to supposed context. Json::Value gasEstimates(Json::objectValue); using Gas = GasEstimator::GasConsumption; if (!_compiler.assemblyItems(_contract) && !_compiler.runtimeAssemblyItems(_contract)) @@ -77,7 +77,7 @@ Json::Value estimateGas(CompilerStack const& _compiler, string const& _contract) u256 bytecodeSize(_compiler.runtimeObject(_contract).bytecode.size()); Json::Value creationGas(Json::arrayValue); creationGas[0] = gasToJson(gas); - creationGas[1] = gasToJson(bytecodeSize * eth::c_createDataGas); + creationGas[1] = gasToJson(bytecodeSize * schedule.createDataGas); gasEstimates["creation"] = creationGas; } if (eth::AssemblyItems const* items = _compiler.runtimeAssemblyItems(_contract)) diff --git a/test/libsolidity/GasMeter.cpp b/test/libsolidity/GasMeter.cpp index b5cee01e..25df9e4d 100644 --- a/test/libsolidity/GasMeter.cpp +++ b/test/libsolidity/GasMeter.cpp @@ -59,12 +59,14 @@ public: void testCreationTimeGas(string const& _sourceCode) { + EVMSchedule schedule;// TODO: make relevant to supposed context. + compileAndRun(_sourceCode); auto state = make_shared<KnownState>(); PathGasMeter meter(*m_compiler.assemblyItems()); GasMeter::GasConsumption gas = meter.estimateMax(0, state); u256 bytecodeSize(m_compiler.runtimeObject().bytecode.size()); - gas += bytecodeSize * c_createDataGas; + gas += bytecodeSize * schedule.createDataGas; BOOST_REQUIRE(!gas.isInfinite); BOOST_CHECK(gas.value == m_gasUsed); } |