aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
authorchriseth <c@ethdev.com>2015-05-12 23:50:41 +0800
committerchriseth <c@ethdev.com>2015-05-12 23:50:51 +0800
commit43338fac9f1adfdbcb2bdfdb156dd72073d7eb73 (patch)
tree92f3f8b6da9d9cf1382437b5834ff0e3af307b2b /libsolidity
parentb6bd56bccd836a1f97afe18468029504e525bba6 (diff)
downloaddexon-solidity-43338fac9f1adfdbcb2bdfdb156dd72073d7eb73.tar.gz
dexon-solidity-43338fac9f1adfdbcb2bdfdb156dd72073d7eb73.tar.zst
dexon-solidity-43338fac9f1adfdbcb2bdfdb156dd72073d7eb73.zip
Reverse if and else body.
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/SolidityCompiler.cpp59
1 files changed, 29 insertions, 30 deletions
diff --git a/libsolidity/SolidityCompiler.cpp b/libsolidity/SolidityCompiler.cpp
index aa83c465..dda7847e 100644
--- a/libsolidity/SolidityCompiler.cpp
+++ b/libsolidity/SolidityCompiler.cpp
@@ -116,36 +116,35 @@ BOOST_AUTO_TEST_CASE(ifStatement)
bytes code = compileContract(sourceCode);
unsigned shift = 60;
unsigned boilerplateSize = 73;
- bytes expectation({byte(Instruction::JUMPDEST),
- byte(Instruction::PUSH1), 0x0,
- byte(Instruction::DUP1),
- byte(Instruction::PUSH1), byte(0x1b + shift), // "true" target
- byte(Instruction::JUMPI),
- // new check "else if" condition
- byte(Instruction::DUP1),
- byte(Instruction::ISZERO),
- byte(Instruction::PUSH1), byte(0x13 + shift),
- byte(Instruction::JUMPI),
- // "else" body
- byte(Instruction::PUSH1), 0x4f,
- byte(Instruction::POP),
- byte(Instruction::PUSH1), byte(0x17 + shift), // exit path of second part
- byte(Instruction::JUMP),
- // "else if" body
- byte(Instruction::JUMPDEST),
- byte(Instruction::PUSH1), 0x4e,
- byte(Instruction::POP),
- byte(Instruction::JUMPDEST),
- byte(Instruction::PUSH1), byte(0x1f + shift),
- byte(Instruction::JUMP),
- // "if" body
- byte(Instruction::JUMPDEST),
- byte(Instruction::PUSH1), 0x4d,
- byte(Instruction::POP),
- byte(Instruction::JUMPDEST),
- byte(Instruction::JUMPDEST),
- byte(Instruction::POP),
- byte(Instruction::JUMP)});
+ bytes expectation({
+ byte(Instruction::JUMPDEST),
+ byte(Instruction::PUSH1), 0x0,
+ byte(Instruction::DUP1),
+ byte(Instruction::ISZERO),
+ byte(Instruction::PUSH1), byte(0x0f + shift), // "false" target
+ byte(Instruction::JUMPI),
+ // "if" body
+ byte(Instruction::PUSH1), 0x4d,
+ byte(Instruction::POP),
+ byte(Instruction::PUSH1), byte(0x21 + shift),
+ byte(Instruction::JUMP),
+ // new check "else if" condition
+ byte(Instruction::JUMPDEST),
+ byte(Instruction::DUP1),
+ byte(Instruction::ISZERO),
+ byte(Instruction::ISZERO),
+ byte(Instruction::PUSH1), byte(0x1c + shift),
+ byte(Instruction::JUMPI),
+ // "else if" body
+ byte(Instruction::PUSH1), 0x4e,
+ byte(Instruction::POP),
+ byte(Instruction::PUSH1), byte(0x20 + shift),
+ byte(Instruction::JUMP),
+ // "else" body
+ byte(Instruction::JUMPDEST),
+ byte(Instruction::PUSH1), 0x4f,
+ byte(Instruction::POP),
+ });
checkCodePresentAt(code, expectation, boilerplateSize);
}