mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
41 lines
1.3 KiB
Plaintext
41 lines
1.3 KiB
Plaintext
|
{
|
||
|
let _1 := 0
|
||
|
let value := calldataload(4)
|
||
|
if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(_1, _1) }
|
||
|
let length := extcodesize(value)
|
||
|
let _2 := 0xffffffffffffffff
|
||
|
if gt(length, _2) { revert(0, 0) }
|
||
|
let _3 := not(31)
|
||
|
let memPtr := mload(64)
|
||
|
let newFreePtr := add(memPtr, and(add(and(add(length, 31), _3), 63), _3))
|
||
|
if or(gt(newFreePtr, _2), lt(newFreePtr, memPtr)) { revert(0, 0) }
|
||
|
mstore(64, newFreePtr)
|
||
|
mstore(memPtr, length)
|
||
|
|
||
|
// We aim to optimize this out.
|
||
|
extcodecopy(value, add(memPtr, 32), _1, length)
|
||
|
sstore(_1, mload(memPtr))
|
||
|
}
|
||
|
// ====
|
||
|
// EVMVersion: >byzantium
|
||
|
// ----
|
||
|
// step: fullSuite
|
||
|
//
|
||
|
// {
|
||
|
// {
|
||
|
// let value := calldataload(4)
|
||
|
// if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }
|
||
|
// let length := extcodesize(value)
|
||
|
// let _1 := 0xffffffffffffffff
|
||
|
// if gt(length, _1) { revert(0, 0) }
|
||
|
// let memPtr := mload(64)
|
||
|
// let _2 := not(31)
|
||
|
// let newFreePtr := add(memPtr, and(add(and(add(length, 31), _2), 63), _2))
|
||
|
// if or(gt(newFreePtr, _1), lt(newFreePtr, memPtr)) { revert(0, 0) }
|
||
|
// mstore(64, newFreePtr)
|
||
|
// mstore(memPtr, length)
|
||
|
// extcodecopy(value, add(memPtr, 32), 0, length)
|
||
|
// sstore(0, mload(memPtr))
|
||
|
// }
|
||
|
// }
|