aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity/ast/AST.cpp
diff options
context:
space:
mode:
authorChristian Parpart <christian@parpart.family>2018-10-01 20:36:57 +0800
committerChristian Parpart <christian@ethereum.org>2018-10-02 21:37:15 +0800
commit9fb835b710f7f0dc9f2089df6301f0ce55d1e4aa (patch)
tree8e8787835a7a683e45cde3a975a95a330439c7ac /libsolidity/ast/AST.cpp
parent7609710d4f8e169784c7a8418da702ac236f5e23 (diff)
downloaddexon-solidity-9fb835b710f7f0dc9f2089df6301f0ce55d1e4aa.tar.gz
dexon-solidity-9fb835b710f7f0dc9f2089df6301f0ce55d1e4aa.tar.zst
dexon-solidity-9fb835b710f7f0dc9f2089df6301f0ce55d1e4aa.zip
Fixes #5051 (introduced in #4684), effectively allowing underscores in address literals.
Diffstat (limited to 'libsolidity/ast/AST.cpp')
-rw-r--r--libsolidity/ast/AST.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/libsolidity/ast/AST.cpp b/libsolidity/ast/AST.cpp
index a11b1146..d9264230 100644
--- a/libsolidity/ast/AST.cpp
+++ b/libsolidity/ast/AST.cpp
@@ -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');