Browse Source

Merge pull request #458 from chriseth/sol_fix_swap

Bugfix: Swap before mod and div.
cl-refactor
Gav Wood 10 years ago
parent
commit
1c70e327c8
  1. 2
      libsolidity/Compiler.cpp
  2. 2
      test/solidityCompiler.cpp

2
libsolidity/Compiler.cpp

@ -336,9 +336,11 @@ void ExpressionCompiler::appendArithmeticOperatorCode(Token::Value _operator, Ty
append(eth::Instruction::MUL); append(eth::Instruction::MUL);
break; break;
case Token::DIV: case Token::DIV:
append(eth::Instruction::SWAP1);
append(isSigned ? eth::Instruction::SDIV : eth::Instruction::DIV); append(isSigned ? eth::Instruction::SDIV : eth::Instruction::DIV);
break; break;
case Token::MOD: case Token::MOD:
append(eth::Instruction::SWAP1);
append(isSigned ? eth::Instruction::SMOD : eth::Instruction::MOD); append(isSigned ? eth::Instruction::SMOD : eth::Instruction::MOD);
break; break;
default: default:

2
test/solidityCompiler.cpp

@ -193,7 +193,9 @@ BOOST_AUTO_TEST_CASE(arithmetics)
byte(eth::Instruction::SWAP1), byte(eth::Instruction::SWAP1),
byte(eth::Instruction::SUB), byte(eth::Instruction::SUB),
byte(eth::Instruction::ADD), byte(eth::Instruction::ADD),
byte(eth::Instruction::SWAP1),
byte(eth::Instruction::MOD), byte(eth::Instruction::MOD),
byte(eth::Instruction::SWAP1),
byte(eth::Instruction::DIV), byte(eth::Instruction::DIV),
byte(eth::Instruction::MUL)}); byte(eth::Instruction::MUL)});
BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end()); BOOST_CHECK_EQUAL_COLLECTIONS(code.begin(), code.end(), expectation.begin(), expectation.end());

Loading…
Cancel
Save