@0x/contracts-exchange: Remove assembly from fillOrderNoThrow().
This commit is contained in:
@@ -73,28 +73,15 @@ contract MixinWrapperFunctions is
|
|||||||
{
|
{
|
||||||
// ABI encode calldata for `fillOrder`
|
// ABI encode calldata for `fillOrder`
|
||||||
bytes memory fillOrderCalldata = abi.encodeWithSelector(
|
bytes memory fillOrderCalldata = abi.encodeWithSelector(
|
||||||
FILL_ORDER_SELECTOR,
|
IExchangeCore(0).fillOrder.selector,
|
||||||
order,
|
order,
|
||||||
takerAssetFillAmount,
|
takerAssetFillAmount,
|
||||||
signature
|
signature
|
||||||
);
|
);
|
||||||
|
|
||||||
// Delegate to `fillOrder` and handle any exceptions gracefully
|
(bool didSucceed, bytes memory resultData) = address(this).delegatecall(fillOrderCalldata);
|
||||||
assembly {
|
if (didSucceed) {
|
||||||
let success := delegatecall(
|
fillResults = abi.decode(resultData, (FillResults));
|
||||||
gas, // forward all gas
|
|
||||||
address, // call address of this contract
|
|
||||||
add(fillOrderCalldata, 32), // pointer to start of input (skip array length in first 32 bytes)
|
|
||||||
mload(fillOrderCalldata), // length of input
|
|
||||||
fillOrderCalldata, // write output over input
|
|
||||||
128 // output size is 128 bytes
|
|
||||||
)
|
|
||||||
if success {
|
|
||||||
mstore(fillResults, mload(fillOrderCalldata))
|
|
||||||
mstore(add(fillResults, 32), mload(add(fillOrderCalldata, 32)))
|
|
||||||
mstore(add(fillResults, 64), mload(add(fillOrderCalldata, 64)))
|
|
||||||
mstore(add(fillResults, 96), mload(add(fillOrderCalldata, 96)))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// fillResults values will be 0 by default if call was unsuccessful
|
// fillResults values will be 0 by default if call was unsuccessful
|
||||||
return fillResults;
|
return fillResults;
|
||||||
|
|||||||
Reference in New Issue
Block a user