use metaslang_bindings::{FileGraphBuilder, ScopeGraphBuilder};
use metaslang_cst::kinds::KindTypes;
use semver::Version;
#[allow(clippy::too_many_lines)]
pub fn define_built_ins<KT: KindTypes + 'static>(
builder: &mut FileGraphBuilder<'_, KT>,
scope: &mut ScopeGraphBuilder,
version: &Version,
) {
if *version < Version::new(0, 4, 12) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
scope.define_function(builder, "sha3", Some("bytes32"));
scope.define_function(builder, "suicide", None);
_ = scope.define_type(builder, "%AbiType");
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool"));
type_scope.define_function(builder, "callcode", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
type_scope.define_function(builder, "blockhash", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "jump", None);
scope.define_function(builder, "jumpi", None);
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "sha3", Some("uint256"));
scope.define_function(builder, "suicide", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 4, 17) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
scope.define_function(builder, "sha3", Some("bytes32"));
scope.define_function(builder, "suicide", None);
_ = scope.define_type(builder, "%AbiType");
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool"));
type_scope.define_function(builder, "callcode", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
type_scope.define_function(builder, "blockhash", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "jump", None);
scope.define_function(builder, "jumpi", None);
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "sha3", Some("uint256"));
scope.define_function(builder, "suicide", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 4, 21) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
scope.define_function(builder, "sha3", Some("bytes32"));
scope.define_function(builder, "suicide", None);
_ = scope.define_type(builder, "%AbiType");
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool"));
type_scope.define_function(builder, "callcode", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
type_scope.define_function(builder, "blockhash", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "jump", None);
scope.define_function(builder, "jumpi", None);
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "sha3", Some("uint256"));
scope.define_function(builder, "suicide", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 4, 22) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
scope.define_function(builder, "sha3", Some("bytes32"));
scope.define_function(builder, "suicide", None);
_ = scope.define_type(builder, "%AbiType");
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool"));
type_scope.define_function(builder, "callcode", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
type_scope.define_function(builder, "blockhash", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "jump", None);
scope.define_function(builder, "jumpi", None);
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "sha3", Some("uint256"));
scope.define_function(builder, "suicide", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 5, 0) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
scope.define_function(builder, "sha3", Some("bytes32"));
scope.define_function(builder, "suicide", None);
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool"));
type_scope.define_function(builder, "callcode", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
type_scope.define_function(builder, "blockhash", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "jump", None);
scope.define_function(builder, "jumpi", None);
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "sha3", Some("uint256"));
scope.define_function(builder, "suicide", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 5, 3) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 6, 0) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("uint256"));
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 6, 2) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 6, 7) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 6, 8) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
_ = scope.define_type(builder, "%IntTypeType");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 7, 0) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%Function");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
type_scope.define_function(builder, "gas", Some("%ExternalFunction"));
type_scope.define_function(builder, "value", Some("%ExternalFunction"));
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "now", "uint256");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 0) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "byte");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address payable");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address payable");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 2) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 4) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 7) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 8) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 11) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 15) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodeCall", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 18) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodeCall", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%EventType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "difficulty", Some("uint256"));
}
} else if *version < Version::new(0, 8, 24) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodeCall", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "prevrandao", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%EventType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "prevrandao", Some("uint256"));
}
} else if *version < Version::new(0, 8, 26) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "blobhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodeCall", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "blobbasefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "prevrandao", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%EventType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "prevrandao", Some("uint256"));
scope.define_function(builder, "blobbasefee", Some("uint256"));
scope.define_function(builder, "blobhash", Some("uint256"));
scope.define_function(builder, "tload", Some("uint256"));
scope.define_function(builder, "tstore", None);
scope.define_function(builder, "mcopy", None);
}
} else if *version < Version::new(0, 8, 31) {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "blobhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodeCall", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "blobbasefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "prevrandao", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%EventType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "prevrandao", Some("uint256"));
scope.define_function(builder, "blobbasefee", Some("uint256"));
scope.define_function(builder, "blobhash", Some("uint256"));
scope.define_function(builder, "tload", Some("uint256"));
scope.define_function(builder, "tstore", None);
scope.define_function(builder, "mcopy", None);
}
} else {
{
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "assert", None);
scope.define_function(builder, "blockhash", Some("bytes32"));
scope.define_function(builder, "blobhash", Some("bytes32"));
scope.define_function(builder, "ecrecover", Some("address"));
scope.define_function(builder, "gasleft", Some("uint256"));
scope.define_function(builder, "keccak256", Some("bytes32"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "require", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "ripemd160", Some("bytes20"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sha256", Some("bytes32"));
let mut type_scope = scope.define_type(builder, "%AbiType");
type_scope.define_function(builder, "decode", Some("%Any[]"));
type_scope.define_function(builder, "encode", Some("bytes"));
type_scope.define_function(builder, "encodeCall", Some("bytes"));
type_scope.define_function(builder, "encodePacked", Some("bytes"));
type_scope.define_function(builder, "encodeWithSelector", Some("bytes"));
type_scope.define_function(builder, "encodeWithSignature", Some("bytes"));
let mut type_scope = scope.define_type(builder, "address");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
let mut type_scope = scope.define_type(builder, "address payable");
type_scope.define_field(builder, "balance", "uint256");
type_scope.define_field(builder, "code", "bytes");
type_scope.define_field(builder, "codehash", "bytes32");
type_scope.define_function(builder, "call", Some("bool, bytes"));
type_scope.define_function(builder, "delegatecall", Some("bool, bytes"));
type_scope.define_function(builder, "send", Some("bool"));
type_scope.define_function(builder, "staticcall", Some("bool, bytes"));
type_scope.define_function(builder, "transfer", None);
let mut type_scope = scope.define_type(builder, "%Array");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", Some("%ValueType"));
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "%FixedArray");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BlockType");
type_scope.define_field(builder, "basefee", "uint256");
type_scope.define_field(builder, "blobbasefee", "uint256");
type_scope.define_field(builder, "chainid", "uint256");
type_scope.define_field(builder, "coinbase", "address payable");
type_scope.define_field(builder, "difficulty", "uint256");
type_scope.define_field(builder, "gaslimit", "uint256");
type_scope.define_field(builder, "number", "uint256");
type_scope.define_field(builder, "prevrandao", "uint256");
type_scope.define_field(builder, "timestamp", "uint256");
let mut type_scope = scope.define_type(builder, "bytes");
type_scope.define_field(builder, "length", "uint256");
type_scope.define_function(builder, "push", None);
type_scope.define_function(builder, "pop", None);
let mut type_scope = scope.define_type(builder, "bytes1");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes2");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes3");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes4");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes5");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes6");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes7");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes8");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes9");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes10");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes11");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes12");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes13");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes14");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes15");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes16");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes17");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes18");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes19");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes20");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes21");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes22");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes23");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes24");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes25");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes26");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes27");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes28");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes29");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes30");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes31");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "bytes32");
type_scope.define_field(builder, "length", "uint256");
let mut type_scope = scope.define_type(builder, "%BytesType");
type_scope.define_function(builder, "concat", Some("bytes"));
let mut type_scope = scope.define_type(builder, "%CallOptions");
type_scope.define_field(builder, "gas", "uint256");
type_scope.define_field(builder, "salt", "uint256");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Error");
type_scope.define_field(builder, "reason", "string");
let mut type_scope = scope.define_type(builder, "%ErrorType");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%EventType");
type_scope.define_field(builder, "selector", "bytes4");
_ = scope.define_type(builder, "%Function");
let mut type_scope = scope.define_type(builder, "%ExternalFunction");
type_scope.define_field(builder, "address", "address");
type_scope.define_field(builder, "selector", "bytes4");
let mut type_scope = scope.define_type(builder, "%MessageType");
type_scope.define_field(builder, "data", "bytes");
type_scope.define_field(builder, "sender", "address");
type_scope.define_field(builder, "sig", "bytes4");
type_scope.define_field(builder, "value", "uint256");
let mut type_scope = scope.define_type(builder, "Panic");
type_scope.define_field(builder, "errorCode", "uint256");
let mut type_scope = scope.define_type(builder, "%StringType");
type_scope.define_function(builder, "concat", Some("string"));
let mut type_scope = scope.define_type(builder, "%TransactionType");
type_scope.define_field(builder, "gasprice", "uint256");
type_scope.define_field(builder, "origin", "address");
let mut type_scope = scope.define_type(builder, "%ContractTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "creationCode", "bytes");
type_scope.define_field(builder, "runtimeCode", "bytes");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%InterfaceTypeType");
type_scope.define_field(builder, "name", "string");
type_scope.define_field(builder, "interfaceId", "bytes4");
let mut type_scope = scope.define_type(builder, "%IntTypeType");
type_scope.define_field(builder, "min", "int256");
type_scope.define_field(builder, "max", "int256");
let mut type_scope = scope.define_type(builder, "%UserDefinedValueType");
type_scope.define_function(builder, "wrap", Some("%UserType"));
type_scope.define_function(builder, "unwrap", Some("%WrappedType"));
scope.define_field(builder, "%_", "%Function");
scope.define_field(builder, "abi", "%AbiType");
scope.define_field(builder, "block", "%BlockType");
scope.define_field(builder, "bytes", "%BytesType");
scope.define_field(builder, "msg", "%MessageType");
scope.define_field(builder, "string", "%StringType");
scope.define_field(builder, "tx", "%TransactionType");
}
{
let mut scope = scope.new_context(builder, "@yul");
let mut type_scope = scope.define_type(builder, "%YulExternal");
type_scope.define_field(builder, "slot", "uint256");
type_scope.define_field(builder, "offset", "uint256");
type_scope.define_field(builder, "length", "uint256");
scope.define_function(builder, "add", Some("uint256"));
scope.define_function(builder, "addmod", Some("uint256"));
scope.define_function(builder, "address", Some("uint256"));
scope.define_function(builder, "and", Some("uint256"));
scope.define_function(builder, "balance", Some("uint256"));
scope.define_function(builder, "blockhash", Some("uint256"));
scope.define_function(builder, "byte", Some("uint256"));
scope.define_function(builder, "callcode", Some("uint256"));
scope.define_function(builder, "calldatacopy", None);
scope.define_function(builder, "calldataload", Some("uint256"));
scope.define_function(builder, "calldatasize", Some("uint256"));
scope.define_function(builder, "caller", Some("uint256"));
scope.define_function(builder, "call", Some("uint256"));
scope.define_function(builder, "callvalue", Some("uint256"));
scope.define_function(builder, "codecopy", None);
scope.define_function(builder, "codesize", Some("uint256"));
scope.define_function(builder, "coinbase", Some("uint256"));
scope.define_function(builder, "create", Some("uint256"));
scope.define_function(builder, "delegatecall", Some("uint256"));
scope.define_function(builder, "div", Some("uint256"));
scope.define_function(builder, "eq", Some("uint256"));
scope.define_function(builder, "exp", Some("uint256"));
scope.define_function(builder, "extcodecopy", None);
scope.define_function(builder, "extcodesize", Some("uint256"));
scope.define_function(builder, "gas", Some("uint256"));
scope.define_function(builder, "gaslimit", Some("uint256"));
scope.define_function(builder, "gasprice", Some("uint256"));
scope.define_function(builder, "gt", Some("uint256"));
scope.define_function(builder, "invalid", None);
scope.define_function(builder, "iszero", Some("uint256"));
scope.define_function(builder, "log0", None);
scope.define_function(builder, "log1", None);
scope.define_function(builder, "log2", None);
scope.define_function(builder, "log3", None);
scope.define_function(builder, "log4", None);
scope.define_function(builder, "lt", Some("uint256"));
scope.define_function(builder, "mload", Some("uint256"));
scope.define_function(builder, "mod", Some("uint256"));
scope.define_function(builder, "msize", Some("uint256"));
scope.define_function(builder, "mstore8", None);
scope.define_function(builder, "mstore", None);
scope.define_function(builder, "mul", Some("uint256"));
scope.define_function(builder, "mulmod", Some("uint256"));
scope.define_function(builder, "not", Some("uint256"));
scope.define_function(builder, "number", Some("uint256"));
scope.define_function(builder, "origin", Some("uint256"));
scope.define_function(builder, "or", Some("uint256"));
scope.define_function(builder, "pop", Some("uint256"));
scope.define_function(builder, "return", None);
scope.define_function(builder, "revert", None);
scope.define_function(builder, "sdiv", Some("uint256"));
scope.define_function(builder, "selfdestruct", None);
scope.define_function(builder, "sgt", Some("uint256"));
scope.define_function(builder, "signextend", Some("uint256"));
scope.define_function(builder, "sload", Some("uint256"));
scope.define_function(builder, "slt", Some("uint256"));
scope.define_function(builder, "smod", Some("uint256"));
scope.define_function(builder, "sstore", None);
scope.define_function(builder, "stop", None);
scope.define_function(builder, "sub", Some("uint256"));
scope.define_function(builder, "timestamp", Some("uint256"));
scope.define_function(builder, "xor", Some("uint256"));
scope.define_function(builder, "keccak256", Some("uint256"));
scope.define_function(builder, "returndatacopy", None);
scope.define_function(builder, "returndatasize", Some("uint256"));
scope.define_function(builder, "staticcall", Some("uint256"));
scope.define_function(builder, "create2", Some("uint256"));
scope.define_function(builder, "extcodehash", Some("uint256"));
scope.define_function(builder, "sar", Some("uint256"));
scope.define_function(builder, "shl", Some("uint256"));
scope.define_function(builder, "shr", Some("uint256"));
scope.define_function(builder, "chainid", Some("uint256"));
scope.define_function(builder, "selfbalance", Some("uint256"));
scope.define_function(builder, "basefee", Some("uint256"));
scope.define_function(builder, "prevrandao", Some("uint256"));
scope.define_function(builder, "blobbasefee", Some("uint256"));
scope.define_function(builder, "blobhash", Some("uint256"));
scope.define_function(builder, "tload", Some("uint256"));
scope.define_function(builder, "tstore", None);
scope.define_function(builder, "mcopy", None);
scope.define_function(builder, "clz", Some("uint256"));
}
}
}