Merge pull request #5020 from ethereum/lll-seq-fix

LLL: terminate sequences with a STOP
This commit is contained in:
chriseth 2018-11-13 14:10:48 +01:00 committed by GitHub
commit c237013911
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 502 additions and 479 deletions

View File

@ -45,6 +45,10 @@ using namespace dev::lll;
void CodeFragment::finalise(CompilerState const& _cs)
{
// NOTE: add this as a safeguard in case the user didn't issue an
// explicit stop at the end of the sequence
m_asm.append(Instruction::STOP);
if (_cs.usedAlloc && _cs.vars.size() && !m_finalised)
{
m_finalised = true;
@ -232,7 +236,12 @@ void CodeFragment::constructOperation(sp::utree const& _t, CompilerState& _s)
int c = 0;
for (auto const& i: _t)
if (c++)
m_asm.append(CodeFragment(i, _s, m_readFile, true).m_asm);
{
auto fragment = CodeFragment(i, _s, m_readFile, true).m_asm;
if ((m_asm.deposit() + fragment.deposit()) < 0)
error<IncorrectParameterCount>("The assembly instruction resulted in stack underflow");
m_asm.append(fragment);
}
}
else if (us == "INCLUDE")
{

View File

@ -147,215 +147,215 @@ BOOST_AUTO_TEST_CASE(disallowed_functional_asm_instructions)
BOOST_AUTO_TEST_CASE(valid_opcodes_functional)
{
vector<string> opcodes_bytecode {
"00",
"6000600001",
"6000600002",
"6000600003",
"6000600004",
"6000600005",
"6000600006",
"6000600007",
"60006000600008",
"60006000600009",
"600060000a",
"600060000b",
"6000600010",
"6000600011",
"6000600012",
"6000600013",
"6000600014",
"600015",
"6000600016",
"6000600017",
"6000600018",
"600019",
"600060001a",
"6000600020",
"30",
"600031",
"32",
"33",
"34",
"600035",
"36",
"60006000600037",
"38",
"60006000600039",
"3a",
"60003b",
"60006000600060003c",
"3d",
"6000600060003e",
"60003f",
"600040",
"41",
"42",
"43",
"44",
"45",
"600050",
"600051",
"6000600052",
"6000600053",
"600054",
"6000600055",
"600056",
"6000600057",
"58",
"59",
"5a",
"60ff",
"61ffff",
"62ffffff",
"63ffffffff",
"64ffffffffff",
"65ffffffffffff",
"66ffffffffffffff",
"67ffffffffffffffff",
"68ffffffffffffffffff",
"69ffffffffffffffffffff",
"6affffffffffffffffffffff",
"6bffffffffffffffffffffffff",
"6cffffffffffffffffffffffffff",
"6dffffffffffffffffffffffffffff",
"6effffffffffffffffffffffffffffff",
"6fffffffffffffffffffffffffffffffff",
"70ffffffffffffffffffffffffffffffffff",
"71ffffffffffffffffffffffffffffffffffff",
"72ffffffffffffffffffffffffffffffffffffff",
"73ffffffffffffffffffffffffffffffffffffffff",
"74ffffffffffffffffffffffffffffffffffffffffff",
"75ffffffffffffffffffffffffffffffffffffffffffff",
"76ffffffffffffffffffffffffffffffffffffffffffffff",
"77ffffffffffffffffffffffffffffffffffffffffffffffff",
"78ffffffffffffffffffffffffffffffffffffffffffffffffff",
"79ffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7affffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"60006000a0",
"600060006000a1",
"6000600060006000a2",
"60006000600060006000a3",
"600060006000600060006000a4",
"600060006000f0",
"6000600060006000600060006000f1",
"6000600060006000600060006000f2",
"60006000f3",
"600060006000600060006000f4",
"600060006000600060006000fa",
"60006000fd",
"fe",
"6000ff"
"0000",
"600060000100",
"600060000200",
"600060000300",
"600060000400",
"600060000500",
"600060000600",
"600060000700",
"6000600060000800",
"6000600060000900",
"600060000a00",
"600060000b00",
"600060001000",
"600060001100",
"600060001200",
"600060001300",
"600060001400",
"60001500",
"600060001600",
"600060001700",
"600060001800",
"60001900",
"600060001a00",
"600060002000",
"3000",
"60003100",
"3200",
"3300",
"3400",
"60003500",
"3600",
"6000600060003700",
"3800",
"6000600060003900",
"3a00",
"60003b00",
"60006000600060003c00",
"3d00",
"6000600060003e00",
"60003f00",
"60004000",
"4100",
"4200",
"4300",
"4400",
"4500",
"60005000",
"60005100",
"600060005200",
"600060005300",
"60005400",
"600060005500",
"60005600",
"600060005700",
"5800",
"5900",
"5a00",
"60ff00",
"61ffff00",
"62ffffff00",
"63ffffffff00",
"64ffffffffff00",
"65ffffffffffff00",
"66ffffffffffffff00",
"67ffffffffffffffff00",
"68ffffffffffffffffff00",
"69ffffffffffffffffffff00",
"6affffffffffffffffffffff00",
"6bffffffffffffffffffffffff00",
"6cffffffffffffffffffffffffff00",
"6dffffffffffffffffffffffffffff00",
"6effffffffffffffffffffffffffffff00",
"6fffffffffffffffffffffffffffffffff00",
"70ffffffffffffffffffffffffffffffffff00",
"71ffffffffffffffffffffffffffffffffffff00",
"72ffffffffffffffffffffffffffffffffffffff00",
"73ffffffffffffffffffffffffffffffffffffffff00",
"74ffffffffffffffffffffffffffffffffffffffffff00",
"75ffffffffffffffffffffffffffffffffffffffffffff00",
"76ffffffffffffffffffffffffffffffffffffffffffffff00",
"77ffffffffffffffffffffffffffffffffffffffffffffffff00",
"78ffffffffffffffffffffffffffffffffffffffffffffffffff00",
"79ffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7affffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"60006000a000",
"600060006000a100",
"6000600060006000a200",
"60006000600060006000a300",
"600060006000600060006000a400",
"600060006000f000",
"6000600060006000600060006000f100",
"6000600060006000600060006000f200",
"60006000f300",
"600060006000600060006000f400",
"600060006000600060006000fa00",
"60006000fd00",
"fe00",
"6000ff00"
};
vector<string> opcodes_lll {
"{ (STOP) }",
"{ (ADD 0 0) }",
"{ (MUL 0 0) }",
"{ (SUB 0 0) }",
"{ (DIV 0 0) }",
"{ (SDIV 0 0) }",
"{ (MOD 0 0) }",
"{ (SMOD 0 0) }",
"{ (ADDMOD 0 0 0) }",
"{ (MULMOD 0 0 0) }",
"{ (EXP 0 0) }",
"{ (SIGNEXTEND 0 0) }",
"{ (LT 0 0) }",
"{ (GT 0 0) }",
"{ (SLT 0 0) }",
"{ (SGT 0 0) }",
"{ (EQ 0 0) }",
"{ (ISZERO 0) }",
"{ (AND 0 0) }",
"{ (OR 0 0) }",
"{ (XOR 0 0) }",
"{ (NOT 0) }",
"{ (BYTE 0 0) }",
"{ (KECCAK256 0 0) }",
"{ (ADDRESS) }",
"{ (BALANCE 0) }",
"{ (ORIGIN) }",
"{ (CALLER) }",
"{ (CALLVALUE) }",
"{ (CALLDATALOAD 0) }",
"{ (CALLDATASIZE) }",
"{ (CALLDATACOPY 0 0 0) }",
"{ (CODESIZE) }",
"{ (CODECOPY 0 0 0) }",
"{ (GASPRICE) }",
"{ (EXTCODESIZE 0) }",
"{ (EXTCODECOPY 0 0 0 0) }",
"{ (RETURNDATASIZE) }",
"{ (RETURNDATACOPY 0 0 0) }",
"{ (EXTCODEHASH 0) }",
"{ (BLOCKHASH 0) }",
"{ (COINBASE) }",
"{ (TIMESTAMP) }",
"{ (NUMBER) }",
"{ (DIFFICULTY) }",
"{ (GASLIMIT) }",
"{ (POP 0) }",
"{ (MLOAD 0) }",
"{ (MSTORE 0 0) }",
"{ (MSTORE8 0 0) }",
"{ (SLOAD 0) }",
"{ (SSTORE 0 0) }",
"{ (JUMP 0) }",
"{ (JUMPI 0 0) }",
"{ (PC) }",
"{ (MSIZE) }",
"{ (GAS) }",
"{ 0xff }",
"{ 0xffff }",
"{ 0xffffff }",
"{ 0xffffffff }",
"{ 0xffffffffff }",
"{ 0xffffffffffff }",
"{ 0xffffffffffffff }",
"{ 0xffffffffffffffff }",
"{ 0xffffffffffffffffff }",
"{ 0xffffffffffffffffffff }",
"{ 0xffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff }",
"{ (LOG0 0 0) }",
"{ (LOG1 0 0 0) }",
"{ (LOG2 0 0 0 0) }",
"{ (LOG3 0 0 0 0 0) }",
"{ (LOG4 0 0 0 0 0 0) }",
"{ (CREATE 0 0 0) }",
"{ (CALL 0 0 0 0 0 0 0) }",
"{ (CALLCODE 0 0 0 0 0 0 0) }",
"{ (RETURN 0 0) }",
"{ (DELEGATECALL 0 0 0 0 0 0) }",
"{ (STATICCALL 0 0 0 0 0 0) }",
"{ (REVERT 0 0) }",
"{ (INVALID) }",
"{ (SELFDESTRUCT 0) }"
"(STOP)",
"(ADD 0 0)",
"(MUL 0 0)",
"(SUB 0 0)",
"(DIV 0 0)",
"(SDIV 0 0)",
"(MOD 0 0)",
"(SMOD 0 0)",
"(ADDMOD 0 0 0)",
"(MULMOD 0 0 0)",
"(EXP 0 0)",
"(SIGNEXTEND 0 0)",
"(LT 0 0)",
"(GT 0 0)",
"(SLT 0 0)",
"(SGT 0 0)",
"(EQ 0 0)",
"(ISZERO 0)",
"(AND 0 0)",
"(OR 0 0)",
"(XOR 0 0)",
"(NOT 0)",
"(BYTE 0 0)",
"(KECCAK256 0 0)",
"(ADDRESS)",
"(BALANCE 0)",
"(ORIGIN)",
"(CALLER)",
"(CALLVALUE)",
"(CALLDATALOAD 0)",
"(CALLDATASIZE)",
"(CALLDATACOPY 0 0 0)",
"(CODESIZE)",
"(CODECOPY 0 0 0)",
"(GASPRICE)",
"(EXTCODESIZE 0)",
"(EXTCODECOPY 0 0 0 0)",
"(RETURNDATASIZE)",
"(RETURNDATACOPY 0 0 0)",
"(EXTCODEHASH 0)",
"(BLOCKHASH 0)",
"(COINBASE)",
"(TIMESTAMP)",
"(NUMBER)",
"(DIFFICULTY)",
"(GASLIMIT)",
"(POP 0)",
"(MLOAD 0)",
"(MSTORE 0 0)",
"(MSTORE8 0 0)",
"(SLOAD 0)",
"(SSTORE 0 0)",
"(JUMP 0)",
"(JUMPI 0 0)",
"(PC)",
"(MSIZE)",
"(GAS)",
"0xff",
"0xffff",
"0xffffff",
"0xffffffff",
"0xffffffffff",
"0xffffffffffff",
"0xffffffffffffff",
"0xffffffffffffffff",
"0xffffffffffffffffff",
"0xffffffffffffffffffff",
"0xffffffffffffffffffffff",
"0xffffffffffffffffffffffff",
"0xffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"(LOG0 0 0)",
"(LOG1 0 0 0)",
"(LOG2 0 0 0 0)",
"(LOG3 0 0 0 0 0)",
"(LOG4 0 0 0 0 0 0)",
"(CREATE 0 0 0)",
"(CALL 0 0 0 0 0 0 0)",
"(CALLCODE 0 0 0 0 0 0 0)",
"(RETURN 0 0)",
"(DELEGATECALL 0 0 0 0 0 0)",
"(STATICCALL 0 0 0 0 0 0)",
"(REVERT 0 0)",
"(INVALID)",
"(SELFDESTRUCT 0)"
};
for (size_t i = 0; i < opcodes_bytecode.size(); i++)
@ -372,281 +372,281 @@ BOOST_AUTO_TEST_CASE(valid_opcodes_functional)
BOOST_AUTO_TEST_CASE(valid_opcodes_asm)
{
vector<string> opcodes_bytecode {
"00",
"01",
"02",
"03",
"04",
"05",
"06",
"07",
"08",
"09",
"0a",
"0b",
"10",
"11",
"12",
"13",
"14",
"15",
"16",
"17",
"18",
"19",
"1a",
"20",
"30",
"31",
"32",
"33",
"34",
"35",
"36",
"37",
"38",
"39",
"3a",
"3b",
"3c",
"3d",
"3e",
"3f",
"40",
"41",
"42",
"43",
"44",
"45",
"50",
"51",
"52",
"53",
"54",
"55",
"56",
"57",
"58",
"59",
"5a",
"5b",
"60ff",
"61ffff",
"62ffffff",
"63ffffffff",
"64ffffffffff",
"65ffffffffffff",
"66ffffffffffffff",
"67ffffffffffffffff",
"68ffffffffffffffffff",
"69ffffffffffffffffffff",
"6affffffffffffffffffffff",
"6bffffffffffffffffffffffff",
"6cffffffffffffffffffffffffff",
"6dffffffffffffffffffffffffffff",
"6effffffffffffffffffffffffffffff",
"6fffffffffffffffffffffffffffffffff",
"70ffffffffffffffffffffffffffffffffff",
"71ffffffffffffffffffffffffffffffffffff",
"72ffffffffffffffffffffffffffffffffffffff",
"73ffffffffffffffffffffffffffffffffffffffff",
"74ffffffffffffffffffffffffffffffffffffffffff",
"75ffffffffffffffffffffffffffffffffffffffffffff",
"76ffffffffffffffffffffffffffffffffffffffffffffff",
"77ffffffffffffffffffffffffffffffffffffffffffffffff",
"78ffffffffffffffffffffffffffffffffffffffffffffffffff",
"79ffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7affffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff",
"80",
"81",
"82",
"83",
"84",
"85",
"86",
"87",
"88",
"89",
"8a",
"8b",
"8c",
"8d",
"8e",
"8f",
"90",
"91",
"92",
"93",
"94",
"95",
"96",
"97",
"98",
"99",
"9a",
"9b",
"9c",
"9d",
"9e",
"9f",
"a0",
"a1",
"a2",
"a3",
"a4",
"f0",
"f1",
"f2",
"f3",
"f4",
"fa",
"fd",
"fe",
"ff"
"0000",
"600060000100",
"600060000200",
"600060000300",
"600060000400",
"600060000500",
"600060000600",
"600060000700",
"6000600060000800",
"6000600060000900",
"600060000a00",
"600060000b00",
"600060001000",
"600060001100",
"600060001200",
"600060001300",
"600060001400",
"60001500",
"600060001600",
"600060001700",
"600060001800",
"60001900",
"600060001a00",
"600060002000",
"3000",
"60003100",
"3200",
"3300",
"3400",
"60003500",
"3600",
"6000600060003700",
"3800",
"6000600060003900",
"3a00",
"60003b00",
"60006000600060003c00",
"3d00",
"6000600060003e00",
"60003f00",
"4000",
"4100",
"4200",
"4300",
"4400",
"4500",
"60005000",
"60005100",
"600060005200",
"600060005300",
"60005400",
"600060005500",
"60005600",
"600060005700",
"5800",
"5900",
"5a00",
"5b00",
"60ff00",
"61ffff00",
"62ffffff00",
"63ffffffff00",
"64ffffffffff00",
"65ffffffffffff00",
"66ffffffffffffff00",
"67ffffffffffffffff00",
"68ffffffffffffffffff00",
"69ffffffffffffffffffff00",
"6affffffffffffffffffffff00",
"6bffffffffffffffffffffffff00",
"6cffffffffffffffffffffffffff00",
"6dffffffffffffffffffffffffffff00",
"6effffffffffffffffffffffffffffff00",
"6fffffffffffffffffffffffffffffffff00",
"70ffffffffffffffffffffffffffffffffff00",
"71ffffffffffffffffffffffffffffffffffff00",
"72ffffffffffffffffffffffffffffffffffffff00",
"73ffffffffffffffffffffffffffffffffffffffff00",
"74ffffffffffffffffffffffffffffffffffffffffff00",
"75ffffffffffffffffffffffffffffffffffffffffffff00",
"76ffffffffffffffffffffffffffffffffffffffffffffff00",
"77ffffffffffffffffffffffffffffffffffffffffffffffff00",
"78ffffffffffffffffffffffffffffffffffffffffffffffffff00",
"79ffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7affffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00",
"60006000600060006000600060006000600060006000600060006000600060008000",
"60006000600060006000600060006000600060006000600060006000600060008100",
"60006000600060006000600060006000600060006000600060006000600060008200",
"60006000600060006000600060006000600060006000600060006000600060008300",
"60006000600060006000600060006000600060006000600060006000600060008400",
"60006000600060006000600060006000600060006000600060006000600060008500",
"60006000600060006000600060006000600060006000600060006000600060008600",
"60006000600060006000600060006000600060006000600060006000600060008700",
"60006000600060006000600060006000600060006000600060006000600060008800",
"60006000600060006000600060006000600060006000600060006000600060008900",
"60006000600060006000600060006000600060006000600060006000600060008a00",
"60006000600060006000600060006000600060006000600060006000600060008b00",
"60006000600060006000600060006000600060006000600060006000600060008c00",
"60006000600060006000600060006000600060006000600060006000600060008d00",
"60006000600060006000600060006000600060006000600060006000600060008e00",
"60006000600060006000600060006000600060006000600060006000600060008f00",
"60006000600060006000600060006000600060006000600060006000600060009000",
"60006000600060006000600060006000600060006000600060006000600060009100",
"60006000600060006000600060006000600060006000600060006000600060009200",
"60006000600060006000600060006000600060006000600060006000600060009300",
"60006000600060006000600060006000600060006000600060006000600060009400",
"60006000600060006000600060006000600060006000600060006000600060009500",
"60006000600060006000600060006000600060006000600060006000600060009600",
"60006000600060006000600060006000600060006000600060006000600060009700",
"60006000600060006000600060006000600060006000600060006000600060009800",
"60006000600060006000600060006000600060006000600060006000600060009900",
"60006000600060006000600060006000600060006000600060006000600060009a00",
"60006000600060006000600060006000600060006000600060006000600060009b00",
"60006000600060006000600060006000600060006000600060006000600060009c00",
"60006000600060006000600060006000600060006000600060006000600060009d00",
"60006000600060006000600060006000600060006000600060006000600060009e00",
"60006000600060006000600060006000600060006000600060006000600060009f00",
"60006000a000",
"600060006000a100",
"6000600060006000a200",
"60006000600060006000a300",
"600060006000600060006000a400",
"600060006000f000",
"600060006000600060006000f100",
"600060006000600060006000f200",
"60006000f300",
"60006000600060006000f400",
"60006000600060006000fa00",
"60006000fd00",
"fe00",
"6000ff00"
};
vector<string> opcodes_lll {
"{ (asm STOP) }",
"{ (asm ADD) }",
"{ (asm MUL) }",
"{ (asm SUB) }",
"{ (asm DIV) }",
"{ (asm SDIV ) }",
"{ (asm MOD) }",
"{ (asm SMOD) }",
"{ (asm ADDMOD) }",
"{ (asm MULMOD) }",
"{ (asm EXP) }",
"{ (asm SIGNEXTEND) }",
"{ (asm LT) }",
"{ (asm GT) }",
"{ (asm SLT) }",
"{ (asm SGT) }",
"{ (asm EQ) }",
"{ (asm ISZERO) }",
"{ (asm AND) }",
"{ (asm OR) }",
"{ (asm XOR) }",
"{ (asm NOT) }",
"{ (asm BYTE) }",
"{ (asm KECCAK256) }",
"{ (asm ADDRESS) }",
"{ (asm BALANCE) }",
"{ (asm ORIGIN) }",
"{ (asm CALLER) }",
"{ (asm CALLVALUE) }",
"{ (asm CALLDATALOAD) }",
"{ (asm CALLDATASIZE) }",
"{ (asm CALLDATACOPY) }",
"{ (asm CODESIZE) }",
"{ (asm CODECOPY) }",
"{ (asm GASPRICE) }",
"{ (asm EXTCODESIZE)}",
"{ (asm EXTCODECOPY) }",
"{ (asm RETURNDATASIZE) }",
"{ (asm RETURNDATACOPY) }",
"{ (asm EXTCODEHASH) }",
"{ (asm BLOCKHASH) }",
"{ (asm COINBASE) }",
"{ (asm TIMESTAMP) }",
"{ (asm NUMBER) }",
"{ (asm DIFFICULTY) }",
"{ (asm GASLIMIT) }",
"{ (asm POP) }",
"{ (asm MLOAD) }",
"{ (asm MSTORE) }",
"{ (asm MSTORE8) }",
"{ (asm SLOAD) }",
"{ (asm SSTORE) }",
"{ (asm JUMP ) }",
"{ (asm JUMPI ) }",
"{ (asm PC) }",
"{ (asm MSIZE) }",
"{ (asm GAS) }",
"{ (asm JUMPDEST) }",
"{ (asm 0xff) }",
"{ (asm 0xffff) }",
"{ (asm 0xffffff) }",
"{ (asm 0xffffffff) }",
"{ (asm 0xffffffffff) }",
"{ (asm 0xffffffffffff) }",
"{ (asm 0xffffffffffffff) }",
"{ (asm 0xffffffffffffffff) }",
"{ (asm 0xffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff) }",
"{ (asm DUP1) }",
"{ (asm DUP2) }",
"{ (asm DUP3) }",
"{ (asm DUP4) }",
"{ (asm DUP5) }",
"{ (asm DUP6) }",
"{ (asm DUP7) }",
"{ (asm DUP8) }",
"{ (asm DUP9) }",
"{ (asm DUP10) }",
"{ (asm DUP11) }",
"{ (asm DUP12) }",
"{ (asm DUP13) }",
"{ (asm DUP14) }",
"{ (asm DUP15) }",
"{ (asm DUP16) }",
"{ (asm SWAP1) }",
"{ (asm SWAP2) }",
"{ (asm SWAP3) }",
"{ (asm SWAP4) }",
"{ (asm SWAP5) }",
"{ (asm SWAP6) }",
"{ (asm SWAP7) }",
"{ (asm SWAP8) }",
"{ (asm SWAP9) }",
"{ (asm SWAP10) }",
"{ (asm SWAP11) }",
"{ (asm SWAP12) }",
"{ (asm SWAP13) }",
"{ (asm SWAP14) }",
"{ (asm SWAP15) }",
"{ (asm SWAP16) }",
"{ (asm LOG0) }",
"{ (asm LOG1) }",
"{ (asm LOG2) }",
"{ (asm LOG3) }",
"{ (asm LOG4) }",
"{ (asm CREATE) }",
"{ (asm CALL) }",
"{ (asm CALLCODE) }",
"{ (asm RETURN) }",
"{ (asm DELEGATECALL) }",
"{ (asm STATICCALL) }",
"{ (asm REVERT) }",
"{ (asm INVALID) }",
"{ (asm SELFDESTRUCT) }"
"(asm STOP)",
"(asm 0 0 ADD)",
"(asm 0 0 MUL)",
"(asm 0 0 SUB)",
"(asm 0 0 DIV)",
"(asm 0 0 SDIV)",
"(asm 0 0 MOD)",
"(asm 0 0 SMOD)",
"(asm 0 0 0 ADDMOD)",
"(asm 0 0 0 MULMOD)",
"(asm 0 0 EXP)",
"(asm 0 0 SIGNEXTEND)",
"(asm 0 0 LT)",
"(asm 0 0 GT)",
"(asm 0 0 SLT)",
"(asm 0 0 SGT)",
"(asm 0 0 EQ)",
"(asm 0 ISZERO)",
"(asm 0 0 AND)",
"(asm 0 0 OR)",
"(asm 0 0 XOR)",
"(asm 0 NOT)",
"(asm 0 0 BYTE)",
"(asm 0 0 KECCAK256)",
"(asm ADDRESS)",
"(asm 0 BALANCE)",
"(asm ORIGIN)",
"(asm CALLER)",
"(asm CALLVALUE)",
"(asm 0 CALLDATALOAD)",
"(asm CALLDATASIZE)",
"(asm 0 0 0 CALLDATACOPY)",
"(asm CODESIZE)",
"(asm 0 0 0 CODECOPY)",
"(asm GASPRICE)",
"(asm 0 EXTCODESIZE)",
"(asm 0 0 0 0 EXTCODECOPY)",
"(asm RETURNDATASIZE)",
"(asm 0 0 0 RETURNDATACOPY)",
"(asm 0 EXTCODEHASH)",
"(asm BLOCKHASH)",
"(asm COINBASE)",
"(asm TIMESTAMP)",
"(asm NUMBER)",
"(asm DIFFICULTY)",
"(asm GASLIMIT)",
"(asm 0 POP)",
"(asm 0 MLOAD)",
"(asm 0 0 MSTORE)",
"(asm 0 0 MSTORE8)",
"(asm 0 SLOAD)",
"(asm 0 0 SSTORE)",
"(asm 0 JUMP)",
"(asm 0 0 JUMPI)",
"(asm PC)",
"(asm MSIZE)",
"(asm GAS)",
"(asm JUMPDEST)",
"(asm 0xff)",
"(asm 0xffff)",
"(asm 0xffffff)",
"(asm 0xffffffff)",
"(asm 0xffffffffff)",
"(asm 0xffffffffffff)",
"(asm 0xffffffffffffff)",
"(asm 0xffffffffffffffff)",
"(asm 0xffffffffffffffffff)",
"(asm 0xffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP1)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP2)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP3)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP4)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP5)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP6)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP7)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP8)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP9)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP10)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP11)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP12)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP13)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP14)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP15)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 DUP16)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP1)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP2)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP3)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP4)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP5)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP6)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP7)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP8)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP9)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP10)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP11)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP12)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP13)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP14)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP15)",
"(asm 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 SWAP16)",
"(asm 0 0 LOG0)",
"(asm 0 0 0 LOG1)",
"(asm 0 0 0 0 LOG2)",
"(asm 0 0 0 0 0 LOG3)",
"(asm 0 0 0 0 0 0 LOG4)",
"(asm 0 0 0 CREATE)",
"(asm 0 0 0 0 0 0 CALL)",
"(asm 0 0 0 0 0 0 CALLCODE)",
"(asm 0 0 RETURN)",
"(asm 0 0 0 0 0 DELEGATECALL)",
"(asm 0 0 0 0 0 STATICCALL)",
"(asm 0 0 REVERT)",
"(asm INVALID)",
"(asm 0 SELFDESTRUCT)"
};
for (size_t i = 0; i < opcodes_bytecode.size(); i++)

View File

@ -986,6 +986,20 @@ BOOST_AUTO_TEST_CASE(shift_right)
BOOST_CHECK(callFallback() == encodeArgs(u256(256)));
}
BOOST_AUTO_TEST_CASE(sub_assemblies)
{
char const* sourceCode = R"(
(returnlll
(return (create 0 (returnlll (sstore 1 1)))))
)";
compileAndRun(sourceCode);
bytes ret = callFallback();
BOOST_REQUIRE(ret.size() == 32);
u256 rVal = u256(toHex(ret, 2, HexPrefix::Add));
BOOST_CHECK(rVal != 0);
BOOST_CHECK(rVal < u256("0x10000000000000000000000000000000000000000"));
}
BOOST_AUTO_TEST_SUITE_END()
}