[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 "
@@ -0,0 +1,28 @@
object "Contract" {
code {
function f() {}
function g() {}
sstore(0, 1)
}
}
// ----
// Assembly:
// /* "source":33:48 */
// jump(tag_1)
// tag_2:
// /* "source":46:48 */
// jump
// /* "source":53:68 */
// tag_3:
// /* "source":66:68 */
// jump
// tag_1:
// /* "source":83:84 */
// 0x01
// /* "source":80:81 */
// 0x00
// /* "source":73:85 */
// sstore
// Bytecode: 6007565b565b565b6001600055
// Opcodes: PUSH1 0x7 JUMP JUMPDEST JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x1 PUSH1 0x0 SSTORE