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