mirror of
				https://github.com/ethereum/solidity
				synced 2023-10-03 13:03:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			34 lines
		
	
	
		
			730 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
			
		
		
	
	
			34 lines
		
	
	
		
			730 B
		
	
	
	
		
			Solidity
		
	
	
	
	
	
contract C {
 | 
						|
    struct S {
 | 
						|
        uint a;
 | 
						|
        uint b;
 | 
						|
    }
 | 
						|
 | 
						|
    mapping(uint => S) public mappingAccess;
 | 
						|
 | 
						|
    function data() internal view returns (S storage _data) {
 | 
						|
        // We need to assign it from somewhere, otherwise we would
 | 
						|
        // get an "uninitialized access" error.
 | 
						|
        _data = mappingAccess[20];
 | 
						|
 | 
						|
        bytes32 slot = keccak256(abi.encode(uint(1), uint(0)));
 | 
						|
        assembly {
 | 
						|
            _data.slot := slot
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    function set(uint x) public {
 | 
						|
        data().a = x;
 | 
						|
    }
 | 
						|
 | 
						|
    function get() public view returns (uint) {
 | 
						|
        return data().a;
 | 
						|
    }
 | 
						|
}
 | 
						|
// ----
 | 
						|
// get() -> 0
 | 
						|
// mappingAccess(uint256): 1 -> 0, 0
 | 
						|
// set(uint256): 4
 | 
						|
// get() -> 4
 | 
						|
// mappingAccess(uint256): 1 -> 4, 0
 |