mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Copying calldata directly to memory.
This commit is contained in:
parent
1c3c1f1e5d
commit
56c6eaf509
@ -76,8 +76,16 @@ void CompilerUtils::storeInMemoryDynamic(Type const& _type, bool _padToWordBound
|
||||
if (_type.getCategory() == Type::Category::ByteArray)
|
||||
{
|
||||
auto const& type = dynamic_cast<ByteArrayType const&>(_type);
|
||||
solAssert(type.getLocation() == ByteArrayType::Location::Storage, "Non-storage byte arrays not yet implemented.");
|
||||
|
||||
if (type.getLocation() == ByteArrayType::Location::CallData)
|
||||
{
|
||||
m_context << eth::Instruction::CALLDATASIZE << u256(0) << eth::Instruction::DUP3
|
||||
<< eth::Instruction::CALLDATACOPY
|
||||
<< eth::Instruction::CALLDATASIZE << eth::Instruction::ADD;
|
||||
}
|
||||
else
|
||||
{
|
||||
solAssert(type.getLocation() == ByteArrayType::Location::Storage, "Memory byte arrays not yet implemented.");
|
||||
m_context << eth::Instruction::DUP1 << eth::Instruction::SLOAD;
|
||||
// stack here: memory_offset storage_offset length_bytes
|
||||
// jump to end if length is zero
|
||||
@ -106,6 +114,7 @@ void CompilerUtils::storeInMemoryDynamic(Type const& _type, bool _padToWordBound
|
||||
m_context.appendConditionalJumpTo(loopStart);
|
||||
m_context << loopEnd << eth::Instruction::POP << eth::Instruction::POP;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unsigned numBytes = prepareMemoryStore(_type, _padToWordBoundaries);
|
||||
|
Loading…
Reference in New Issue
Block a user