mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Tests and fixes for ether subdenominations
This commit is contained in:
parent
426f9a2860
commit
eaadc71b4c
@ -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();
|
||||
|
31
Types.cpp
31
Types.cpp
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user