aboutsummaryrefslogtreecommitdiffstats
path: root/libsolidity
diff options
context:
space:
mode:
authorAlex Beregszaszi <alex@rtfs.hu>2017-06-26 19:49:05 +0800
committerAlex Beregszaszi <alex@rtfs.hu>2017-06-28 23:57:32 +0800
commit8b0c866f025f3b48db36b0e48451062806a1ab06 (patch)
treeb6dd46f48b66478feefc7e1c1810535c6bd1f700 /libsolidity
parent79d13366874c432c2f8f2adf3cd8cc00638c6a98 (diff)
downloaddexon-solidity-8b0c866f025f3b48db36b0e48451062806a1ab06.tar.gz
dexon-solidity-8b0c866f025f3b48db36b0e48451062806a1ab06.tar.zst
dexon-solidity-8b0c866f025f3b48db36b0e48451062806a1ab06.zip
Add hasHexPrefix() to AST::Literal
Diffstat (limited to 'libsolidity')
-rw-r--r--libsolidity/analysis/TypeChecker.cpp2
-rw-r--r--libsolidity/ast/AST.cpp18
-rw-r--r--libsolidity/ast/AST.h3
3 files changed, 16 insertions, 7 deletions
diff --git a/libsolidity/analysis/TypeChecker.cpp b/libsolidity/analysis/TypeChecker.cpp
index b276a2d4..436d960b 100644
--- a/libsolidity/analysis/TypeChecker.cpp
+++ b/libsolidity/analysis/TypeChecker.cpp
@@ -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. "
diff --git a/libsolidity/ast/AST.cpp b/libsolidity/ast/AST.cpp
index b929b6fe..54ded609 100644
--- a/libsolidity/ast/AST.cpp
+++ b/libsolidity/ast/AST.cpp
@@ -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);
}
diff --git a/libsolidity/ast/AST.h b/libsolidity/ast/AST.h
index 83572692..24b16176 100644
--- a/libsolidity/ast/AST.h
+++ b/libsolidity/ast/AST.h
@@ -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.