Add hasHexPrefix() to AST::Literal

This commit is contained in:
Alex Beregszaszi 2017-06-26 12:49:05 +01:00
parent 79d1336687
commit 8b0c866f02
3 changed files with 16 additions and 7 deletions

View File

@ -1886,7 +1886,7 @@ void TypeChecker::expectType(Expression const& _expression, Type const& _expecte
{
auto literal = dynamic_cast<Literal const*>(&_expression);
if (literal && !boost::starts_with(literal->value(), "0x"))
if (literal && !literal->hasHexPrefix())
m_errorReporter.warning(
_expression.location(),
"Decimal literal assigned to bytesXX variable will be left-aligned. "

View File

@ -530,20 +530,26 @@ IdentifierAnnotation& Identifier::annotation() const
return dynamic_cast<IdentifierAnnotation&>(*m_annotation);
}
bool Literal::hasHexPrefix() const
{
if (token() != Token::Number)
return false;
return value().substr(0, 2) == "0x";
}
bool Literal::looksLikeAddress() const
{
if (subDenomination() != SubDenomination::None)
return false;
if (token() != Token::Number)
if (!hasHexPrefix())
return false;
string lit = value();
return lit.substr(0, 2) == "0x" && abs(int(lit.length()) - 42) <= 1;
return abs(int(value().length()) - 42) <= 1;
}
bool Literal::passesAddressChecksum() const
{
string lit = value();
solAssert(lit.substr(0, 2) == "0x", "Expected hex prefix");
return dev::passesAddressChecksum(lit, true);
solAssert(hasHexPrefix(), "Expected hex prefix");
return dev::passesAddressChecksum(value(), true);
}

View File

@ -1590,6 +1590,9 @@ public:
SubDenomination subDenomination() const { return m_subDenomination; }
/// @returns true if this is a number with a hex prefix.
bool hasHexPrefix() const;
/// @returns true if this looks like a checksummed address.
bool looksLikeAddress() const;
/// @returns true if it passes the address checksum test.