mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
48 lines
2.2 KiB
ReStructuredText
48 lines
2.2 KiB
ReStructuredText
|
.. index: variable cleanup
|
||
|
|
||
|
*********************
|
||
|
Cleaning Up Variables
|
||
|
*********************
|
||
|
|
||
|
When a value is shorter than 256 bit, in some cases the remaining bits
|
||
|
must be cleaned.
|
||
|
The Solidity compiler is designed to clean such remaining bits before any operations
|
||
|
that might be adversely affected by the potential garbage in the remaining bits.
|
||
|
For example, before writing a value to memory, the remaining bits need
|
||
|
to be cleared because the memory contents can be used for computing
|
||
|
hashes or sent as the data of a message call. Similarly, before
|
||
|
storing a value in the storage, the remaining bits need to be cleaned
|
||
|
because otherwise the garbled value can be observed.
|
||
|
|
||
|
On the other hand, we do not clean the bits if the immediately
|
||
|
following operation is not affected. For instance, since any non-zero
|
||
|
value is considered ``true`` by ``JUMPI`` instruction, we do not clean
|
||
|
the boolean values before they are used as the condition for
|
||
|
``JUMPI``.
|
||
|
|
||
|
In addition to the design principle above, the Solidity compiler
|
||
|
cleans input data when it is loaded onto the stack.
|
||
|
|
||
|
Different types have different rules for cleaning up invalid values:
|
||
|
|
||
|
+---------------+---------------+-------------------+
|
||
|
|Type |Valid Values |Invalid Values Mean|
|
||
|
+===============+===============+===================+
|
||
|
|enum of n |0 until n - 1 |exception |
|
||
|
|members | | |
|
||
|
+---------------+---------------+-------------------+
|
||
|
|bool |0 or 1 |1 |
|
||
|
+---------------+---------------+-------------------+
|
||
|
|signed integers|sign-extended |currently silently |
|
||
|
| |word |wraps; in the |
|
||
|
| | |future exceptions |
|
||
|
| | |will be thrown |
|
||
|
| | | |
|
||
|
| | | |
|
||
|
+---------------+---------------+-------------------+
|
||
|
|unsigned |higher bits |currently silently |
|
||
|
|integers |zeroed |wraps; in the |
|
||
|
| | |future exceptions |
|
||
|
| | |will be thrown |
|
||
|
+---------------+---------------+-------------------+
|