mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
This commit is contained in:
committed by
Christian Parpart
parent
7609710d4f
commit
9fb835b710
@@ -633,6 +633,11 @@ IdentifierAnnotation& Identifier::annotation() const
|
||||
return dynamic_cast<IdentifierAnnotation&>(*m_annotation);
|
||||
}
|
||||
|
||||
ASTString Literal::valueWithoutUnderscores() const
|
||||
{
|
||||
return boost::erase_all_copy(value(), "_");
|
||||
}
|
||||
|
||||
bool Literal::isHexNumber() const
|
||||
{
|
||||
if (token() != Token::Number)
|
||||
@@ -648,20 +653,20 @@ bool Literal::looksLikeAddress() const
|
||||
if (!isHexNumber())
|
||||
return false;
|
||||
|
||||
return abs(int(value().length()) - 42) <= 1;
|
||||
return abs(int(valueWithoutUnderscores().length()) - 42) <= 1;
|
||||
}
|
||||
|
||||
bool Literal::passesAddressChecksum() const
|
||||
{
|
||||
solAssert(isHexNumber(), "Expected hex number");
|
||||
return dev::passesAddressChecksum(value(), true);
|
||||
return dev::passesAddressChecksum(valueWithoutUnderscores(), true);
|
||||
}
|
||||
|
||||
string Literal::getChecksummedAddress() const
|
||||
{
|
||||
solAssert(isHexNumber(), "Expected hex number");
|
||||
/// Pad literal to be a proper hex address.
|
||||
string address = value().substr(2);
|
||||
string address = valueWithoutUnderscores().substr(2);
|
||||
if (address.length() > 40)
|
||||
return string();
|
||||
address.insert(address.begin(), 40 - address.size(), '0');
|
||||
|
||||
@@ -1679,6 +1679,8 @@ public:
|
||||
/// @returns the non-parsed value of the literal
|
||||
ASTString const& value() const { return *m_value; }
|
||||
|
||||
ASTString valueWithoutUnderscores() const;
|
||||
|
||||
SubDenomination subDenomination() const { return m_subDenomination; }
|
||||
|
||||
/// @returns true if this is a number with a hex prefix.
|
||||
|
||||
@@ -499,7 +499,7 @@ u256 AddressType::literalValue(Literal const* _literal) const
|
||||
{
|
||||
solAssert(_literal, "");
|
||||
solAssert(_literal->value().substr(0, 2) == "0x", "");
|
||||
return u256(_literal->value());
|
||||
return u256(_literal->valueWithoutUnderscores());
|
||||
}
|
||||
|
||||
TypePointer AddressType::unaryOperatorResult(Token::Value _operator) const
|
||||
|
||||
Reference in New Issue
Block a user