From 1d9b6b5bbfb9592f2106bc2e933c9b2da6804ff8 Mon Sep 17 00:00:00 2001 From: Vignesh Karthikeyan Date: Fri, 7 Jun 2019 00:47:08 +0530 Subject: [PATCH] Added Content and Edited for readability The example for signextend requested by @bshastry was added. Codeblock was moved before warning for readability. --- docs/assembly.rst | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/assembly.rst b/docs/assembly.rst index 881d77650..295e39b90 100644 --- a/docs/assembly.rst +++ b/docs/assembly.rst @@ -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(, x) }`` + Labels ------