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     |
 | 
						|
+---------------+---------------+-------------------+
 |