mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Fix documentation about revert data.
This commit is contained in:
parent
27e44b85e3
commit
61fd76cb27
@ -896,12 +896,11 @@ the ``dup`` and ``swap`` instructions as well as ``jump`` instructions, labels a
|
|||||||
|
|
||||||
.. note::
|
.. note::
|
||||||
The ``call*`` instructions use the ``out`` and ``outsize`` parameters to define an area in memory where
|
The ``call*`` instructions use the ``out`` and ``outsize`` parameters to define an area in memory where
|
||||||
the return data is placed. This area is written to depending on how many bytes the called contract returns.
|
the return or failure data is placed. This area is written to depending on how many bytes the called contract returns.
|
||||||
If it returns more data, only the first ``outsize`` bytes are written. You can access the rest of the data
|
If it returns more data, only the first ``outsize`` bytes are written. You can access the rest of the data
|
||||||
using the ``returndatacopy`` opcode. If it returns less data, then the remaining bytes are not touched at all.
|
using the ``returndatacopy`` opcode. If it returns less data, then the remaining bytes are not touched at all.
|
||||||
You need to use the ``returndatasize`` opcode to check which part of this memory area contains the return data.
|
You need to use the ``returndatasize`` opcode to check which part of this memory area contains the return data.
|
||||||
The remaining bytes will retain their values as of before the call. If the call fails (it returns ``0``),
|
The remaining bytes will retain their values as of before the call.
|
||||||
nothing is written to that area, but you can still retrieve the failure data using ``returndatacopy``.
|
|
||||||
|
|
||||||
|
|
||||||
In some internal dialects, there are additional functions:
|
In some internal dialects, there are additional functions:
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
contract C {
|
||||||
|
fallback() external {
|
||||||
|
revert("abc");
|
||||||
|
}
|
||||||
|
|
||||||
|
function f() public returns (uint s, uint r) {
|
||||||
|
address x = address(this);
|
||||||
|
assembly {
|
||||||
|
mstore(0, 7)
|
||||||
|
s := call(sub(0, 1), x, 0, 0, 0, 0, 32)
|
||||||
|
r := mload(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ====
|
||||||
|
// compileViaYul: also
|
||||||
|
// EVMVersion: >=byzantium
|
||||||
|
// ----
|
||||||
|
// f() -> 0x00, 0x08c379a000000000000000000000000000000000000000000000000000000000
|
Loading…
Reference in New Issue
Block a user