Added Content and Edited for readability

The example for signextend requested by @bshastry was added. Codeblock was moved before warning for readability.
This commit is contained in:
Vignesh Karthikeyan 2019-06-07 00:47:08 +05:30 committed by GitHub
parent 1978e1d3ff
commit 1d9b6b5bbf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -394,17 +394,6 @@ use ``x_slot``, and to retrieve the byte-offset you use ``x_offset``.
Local Solidity variables are available for assignments, for example:
.. warning::
If you access variables of a type that spans less than 256 bits
(for example ``uint64``, ``address``, ``bytes16`` or ``byte``),
you cannot make any assumptions about bits not part of the
encoding of the type. Especially, do not assume them to be zero.
To be safe, always clear the data properly before you use it
in a context where this is important:
``uint32 x = f(); assembly { x := and(x, 0xffffffff) /* now use x */ }``
To clean signed types, you can use the ``signextend`` opcode:
``assembly { signextend(0, x) }``
.. code::
pragma solidity >=0.4.11 <0.7.0;
@ -418,6 +407,17 @@ Local Solidity variables are available for assignments, for example:
}
}
.. warning::
If you access variables of a type that spans less than 256 bits
(for example ``uint64``, ``address``, ``bytes16`` or ``byte``),
you cannot make any assumptions about bits not part of the
encoding of the type. Especially, do not assume them to be zero.
To be safe, always clear the data properly before you use it
in a context where this is important:
``uint32 x = f(); assembly { x := and(x, 0xffffffff) /* now use x */ }``
To clean signed types, you can use the ``signextend`` opcode:
``assembly { signextend(<bit_width_of_x>, x) }``
Labels
------