// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
// Define a contract named ReturningValues
contract ReturningValues {
// Function demonstrates returning a value using the `return` opcode in assembly
function usingReturnOpcode() public pure returns (uint256) {
assembly {
// Store a temporary value (10) in memory at location 0x0
let temp := 10
mstore(0x0, temp)
// Use the `return` opcode to return the data in memory starting at 0x0 of size 32 bytes
// This effectively returns the value 10 to the caller
return(0x0, 32)
}
}
// Function demonstrates returning a value by assigning it to the named return variable
function usingReturnVariable() public pure returns (uint256 retval) {
assembly {
// Store a temporary value (10) in an assembly variable
let temp := 10
// Assign the value of `temp` to the named return variable `retval`
retval := temp
}
// The value of `retval` is automatically returned to the caller
}
}