Browse Source

NEG->BNOT change

cl-refactor
Christian 10 years ago
parent
commit
ec5bf1abe9
  1. 12
      libsolidity/Compiler.cpp
  2. 4
      test/solidityCompiler.cpp

12
libsolidity/Compiler.cpp

@ -111,13 +111,7 @@ void ExpressionCompiler::endVisit(UnaryOperation& _unaryOperation)
append(eth::Instruction::NOT);
break;
case Token::BIT_NOT: // ~
// ~a modeled as "a xor (0 - 1)" for now
append(eth::Instruction::PUSH1);
append(1);
append(eth::Instruction::PUSH1);
append(0);
append(eth::Instruction::SUB);
append(eth::Instruction::XOR);
append(eth::Instruction::BNOT);
break;
case Token::DELETE: // delete
// a -> a xor a (= 0).
@ -149,7 +143,9 @@ void ExpressionCompiler::endVisit(UnaryOperation& _unaryOperation)
// unary add, so basically no-op
break;
case Token::SUB: // -
append(eth::Instruction::NEG);
append(eth::Instruction::PUSH1);
append(0);
append(eth::Instruction::SUB);
break;
default:
assert(false); // invalid operation

4
test/solidityCompiler.cpp

@ -210,11 +210,9 @@ BOOST_AUTO_TEST_CASE(unary_operators)
byte(eth::Instruction::PUSH1), 0x1,
byte(eth::Instruction::SWAP1),
byte(eth::Instruction::SUB),
byte(eth::Instruction::NEG),
byte(eth::Instruction::PUSH1), 0x1,
byte(eth::Instruction::PUSH1), 0x0,
byte(eth::Instruction::SUB),
byte(eth::Instruction::XOR), // bitwise not
byte(eth::Instruction::BNOT),
byte(eth::Instruction::PUSH1), 0x2,
byte(eth::Instruction::EQ),
byte(eth::Instruction::NOT)});

Loading…
Cancel
Save