diff options
author | Lefteris Karapetsas <lefteris@refu.co> | 2015-02-05 20:48:02 +0800 |
---|---|---|
committer | Lefteris Karapetsas <lefteris@refu.co> | 2015-02-05 22:41:13 +0800 |
commit | eaadc71b4c88603a7264211401d249ca1ead22e3 (patch) | |
tree | 1d90d9d43d59472be6092e372d4d9d05ad1654d8 | |
parent | 426f9a286071714de61accd04a13ce9d2446ba30 (diff) | |
download | dexon-solidity-eaadc71b4c88603a7264211401d249ca1ead22e3.tar.gz dexon-solidity-eaadc71b4c88603a7264211401d249ca1ead22e3.tar.zst dexon-solidity-eaadc71b4c88603a7264211401d249ca1ead22e3.zip |
Tests and fixes for ether subdenominations
-rw-r--r-- | Parser.cpp | 4 | ||||
-rw-r--r-- | Types.cpp | 31 |
2 files changed, 18 insertions, 17 deletions
@@ -694,10 +694,10 @@ ASTPointer<Expression> Parser::parsePrimaryExpression() case Token::NUMBER: nextToken = m_scanner->peekNextToken(); case Token::STRING_LITERAL: - if (Token::isEtherSubdenomination(nextToken)) - m_scanner->next(); nodeFactory.markEndPosition(); expression = nodeFactory.createNode<Literal>(token, getLiteralAndAdvance(), nextToken); + if (Token::isEtherSubdenomination(nextToken)) + m_scanner->next(); break; case Token::IDENTIFIER: nodeFactory.markEndPosition(); @@ -328,31 +328,32 @@ string IntegerConstantType::toString() const u256 IntegerConstantType::literalValue(Literal const* _literal) const { - Literal::ethSubDenomination sub =_literal->getSubDenomination(); u256 value; // we ignore the literal and hope that the type was correctly determined solAssert(m_value <= u256(-1), "Integer constant too large."); solAssert(m_value >= -(bigint(1) << 255), "Integer constant too small."); - if (m_value >= 0) value = u256(m_value); else value = s2u(s256(m_value)); - switch(sub) { - case Literal::ethSubDenomination::WEI: - case Literal::ethSubDenomination::NONE: - break; - case Literal::ethSubDenomination::SZABO: - value *= u256(1000000000000); - break; - case Literal::ethSubDenomination::FINNEY: - value *= u256(1000000000000000); - break; - case Literal::ethSubDenomination::ETHER: - value *= u256(1000000000000000000); - break; + if (_literal) { + Literal::ethSubDenomination sub =_literal->getSubDenomination(); + switch(sub) { + case Literal::ethSubDenomination::WEI: + case Literal::ethSubDenomination::NONE: + break; + case Literal::ethSubDenomination::SZABO: + value *= u256(1000000000000); + break; + case Literal::ethSubDenomination::FINNEY: + value *= u256(1000000000000000); + break; + case Literal::ethSubDenomination::ETHER: + value *= u256(1000000000000000000); + break; + } } return value; |