diff options
author | Gav Wood <g@ethdev.com> | 2015-01-09 23:28:01 +0800 |
---|---|---|
committer | Gav Wood <g@ethdev.com> | 2015-01-09 23:28:01 +0800 |
commit | 396f638ce19206144ce32dcf3926fc13fa9a89b7 (patch) | |
tree | eee05416ca7267b77adc6310f2000a28579c070f /ExpressionCompiler.cpp | |
parent | 43d79cc7305524bb8503e660cfd43c121706e1ed (diff) | |
parent | c9102010bf05cd651eb4ba12f486243429356a73 (diff) | |
download | dexon-solidity-396f638ce19206144ce32dcf3926fc13fa9a89b7.tar.gz dexon-solidity-396f638ce19206144ce32dcf3926fc13fa9a89b7.tar.zst dexon-solidity-396f638ce19206144ce32dcf3926fc13fa9a89b7.zip |
Merge pull request #765 from chriseth/sol_someLogFixes
Some changes to the log functions.
Diffstat (limited to 'ExpressionCompiler.cpp')
-rw-r--r-- | ExpressionCompiler.cpp | 56 |
1 files changed, 9 insertions, 47 deletions
diff --git a/ExpressionCompiler.cpp b/ExpressionCompiler.cpp index cf91a763..5667098d 100644 --- a/ExpressionCompiler.cpp +++ b/ExpressionCompiler.cpp @@ -268,60 +268,22 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall) m_context << u256(32) << u256(0) << eth::Instruction::SHA3; break; case Location::LOG0: - arguments.front()->accept(*this); - appendTypeConversion(*arguments.front()->getType(), *function.getParameterTypes().front(), true); - // @todo move this once we actually use memory - CompilerUtils(m_context).storeInMemory(0); - m_context << u256(32) << u256(0) << eth::Instruction::LOG0; - break; case Location::LOG1: - arguments[1]->accept(*this); - arguments[0]->accept(*this); - appendTypeConversion(*arguments[1]->getType(), *function.getParameterTypes()[1], true); - appendTypeConversion(*arguments[0]->getType(), *function.getParameterTypes()[0], true); - // @todo move this once we actually use memory - CompilerUtils(m_context).storeInMemory(0); - m_context << u256(32) << u256(0) << eth::Instruction::LOG1; - break; case Location::LOG2: - arguments[2]->accept(*this); - arguments[1]->accept(*this); - arguments[0]->accept(*this); - appendTypeConversion(*arguments[2]->getType(), *function.getParameterTypes()[2], true); - appendTypeConversion(*arguments[1]->getType(), *function.getParameterTypes()[1], true); - appendTypeConversion(*arguments[0]->getType(), *function.getParameterTypes()[0], true); - // @todo move this once we actually use memory - CompilerUtils(m_context).storeInMemory(0); - m_context << u256(32) << u256(0) << eth::Instruction::LOG2; - break; case Location::LOG3: - arguments[3]->accept(*this); - arguments[2]->accept(*this); - arguments[1]->accept(*this); - arguments[0]->accept(*this); - appendTypeConversion(*arguments[3]->getType(), *function.getParameterTypes()[3], true); - appendTypeConversion(*arguments[2]->getType(), *function.getParameterTypes()[2], true); - appendTypeConversion(*arguments[1]->getType(), *function.getParameterTypes()[1], true); - appendTypeConversion(*arguments[0]->getType(), *function.getParameterTypes()[0], true); - // @todo move this once we actually use memory - CompilerUtils(m_context).storeInMemory(0); - m_context << u256(32) << u256(0) << eth::Instruction::LOG3; - break; case Location::LOG4: - arguments[4]->accept(*this); - arguments[3]->accept(*this); - arguments[2]->accept(*this); - arguments[1]->accept(*this); - arguments[0]->accept(*this); - appendTypeConversion(*arguments[4]->getType(), *function.getParameterTypes()[4], true); - appendTypeConversion(*arguments[3]->getType(), *function.getParameterTypes()[3], true); - appendTypeConversion(*arguments[2]->getType(), *function.getParameterTypes()[2], true); - appendTypeConversion(*arguments[1]->getType(), *function.getParameterTypes()[1], true); - appendTypeConversion(*arguments[0]->getType(), *function.getParameterTypes()[0], true); + { + unsigned logNumber = int(function.getLocation()) - int(Location::LOG0); + for (int arg = logNumber; arg >= 0; --arg) + { + arguments[arg]->accept(*this); + appendTypeConversion(*arguments[arg]->getType(), *function.getParameterTypes()[arg], true); + } // @todo move this once we actually use memory CompilerUtils(m_context).storeInMemory(0); - m_context << u256(32) << u256(0) << eth::Instruction::LOG4; + m_context << u256(32) << u256(0) << eth::logInstruction(logNumber); break; + } case Location::ECRECOVER: case Location::SHA256: case Location::RIPEMD160: |