mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Some changes to the log functions.
This commit is contained in:
parent
ffeb7daf11
commit
c9102010bf
@ -257,60 +257,22 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
|
|||||||
m_context << u256(32) << u256(0) << eth::Instruction::SHA3;
|
m_context << u256(32) << u256(0) << eth::Instruction::SHA3;
|
||||||
break;
|
break;
|
||||||
case Location::LOG0:
|
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:
|
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:
|
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:
|
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:
|
case Location::LOG4:
|
||||||
arguments[4]->accept(*this);
|
{
|
||||||
arguments[3]->accept(*this);
|
unsigned logNumber = int(function.getLocation()) - int(Location::LOG0);
|
||||||
arguments[2]->accept(*this);
|
for (int arg = logNumber; arg >= 0; --arg)
|
||||||
arguments[1]->accept(*this);
|
{
|
||||||
arguments[0]->accept(*this);
|
arguments[arg]->accept(*this);
|
||||||
appendTypeConversion(*arguments[4]->getType(), *function.getParameterTypes()[4], true);
|
appendTypeConversion(*arguments[arg]->getType(), *function.getParameterTypes()[arg], 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);
|
|
||||||
// @todo move this once we actually use memory
|
// @todo move this once we actually use memory
|
||||||
CompilerUtils(m_context).storeInMemory(0);
|
CompilerUtils(m_context).storeInMemory(0);
|
||||||
m_context << u256(32) << u256(0) << eth::Instruction::LOG4;
|
m_context << u256(32) << u256(0) << eth::logInstruction(logNumber);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case Location::ECRECOVER:
|
case Location::ECRECOVER:
|
||||||
case Location::SHA256:
|
case Location::SHA256:
|
||||||
case Location::RIPEMD160:
|
case Location::RIPEMD160:
|
||||||
|
Loading…
Reference in New Issue
Block a user