mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			32 lines
		
	
	
		
			813 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			32 lines
		
	
	
		
			813 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
| contract C {
 | |
|     mapping(uint => uint) private m0;
 | |
|     mapping(uint => uint) private m1;
 | |
|     mapping(uint => uint) private m2;
 | |
| 
 | |
|     function f(uint i) public returns (uint slot, uint offset) {
 | |
|         mapping(uint => uint) storage m0Ptr = m0;
 | |
|         mapping(uint => uint) storage m1Ptr = m1;
 | |
|         mapping(uint => uint) storage m2Ptr = m2;
 | |
| 
 | |
|         assembly {
 | |
|             switch i
 | |
|             case 1 {
 | |
|                 slot := m1Ptr.slot
 | |
|                 offset := m1Ptr.offset
 | |
|             }
 | |
|             case 2 {
 | |
|                 slot := m2Ptr.slot
 | |
|                 offset := m2Ptr.offset
 | |
|             }
 | |
|             default {
 | |
|                 slot := m0Ptr.slot
 | |
|                 offset := m0Ptr.offset
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 | |
| // ----
 | |
| // f(uint256): 0 -> 0, 0
 | |
| // f(uint256): 1 -> 1, 0
 | |
| // f(uint256): 2 -> 2, 0
 |