[Yul] Directly jump over a series of function definitions

Implement a AbstractAssembly::setStackHeight function
Update the tests
Update Changelog
This commit is contained in:
Vedant Agarwala
2019-06-19 12:40:11 +08:00
committed by Vedant Agarwala
parent b66950711e
commit 5d6cbd97df
9 changed files with 69 additions and 15 deletions
+5 -6
View File
@@ -277,16 +277,15 @@ BOOST_AUTO_TEST_CASE(functions_multi_return)
let unused := 7
})";
BOOST_CHECK_EQUAL(assemble(in),
"PUSH1 0xB JUMP "
"PUSH1 0x13 JUMP "
"JUMPDEST PUSH1 0x0 SWAP3 SWAP2 POP POP JUMP " // f
"JUMPDEST PUSH1 0x17 JUMP "
"JUMPDEST PUSH1 0x0 PUSH1 0x0 SWAP1 SWAP2 JUMP " // g
"JUMPDEST PUSH1 0x21 PUSH1 0x2 PUSH1 0x1 PUSH1 0x3 JUMP " // f(1, 2)
"JUMPDEST PUSH1 0x2B PUSH1 0x4 PUSH1 0x3 PUSH1 0x3 JUMP " // f(3, 4)
"JUMPDEST PUSH1 0x1D PUSH1 0x2 PUSH1 0x1 PUSH1 0x3 JUMP " // f(1, 2)
"JUMPDEST PUSH1 0x27 PUSH1 0x4 PUSH1 0x3 PUSH1 0x3 JUMP " // f(3, 4)
"JUMPDEST SWAP1 POP " // assignment to x
"POP " // remove x
"PUSH1 0x34 PUSH1 0xF JUMP " // g()
"JUMPDEST PUSH1 0x3A PUSH1 0xF JUMP " // g()
"PUSH1 0x30 PUSH1 0xB JUMP " // g()
"JUMPDEST PUSH1 0x36 PUSH1 0xB JUMP " // g()
"JUMPDEST SWAP2 POP SWAP2 POP " // assignments
"POP POP " // removal of y and z
"PUSH1 0x7 POP "