From a1a2eac5fde0cd6f5aed206958434d655f9a194f Mon Sep 17 00:00:00 2001 From: RJ Catalano Date: Fri, 18 Mar 2016 13:52:00 -0500 Subject: size capabilities functioning properly for fixed types --- libsolidity/ast/Types.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/libsolidity/ast/Types.cpp b/libsolidity/ast/Types.cpp index a0915df9..d5e989ac 100644 --- a/libsolidity/ast/Types.cpp +++ b/libsolidity/ast/Types.cpp @@ -580,16 +580,11 @@ bool ConstantNumberType::isImplicitlyConvertibleTo(Type const& _convertTo) const int forSignBit = (targetType->isSigned() ? 1 : 0); if (m_value > 0) { - if ( - m_value <= (u256(-1) >> (256 - targetType->numBits() + forSignBit)) && - m_scalingFactor <= targetType->fractionalBits() - ) + bool properlyScaledBits = m_scalingFactor <= targetType->fractionalBits() ? + true : m_scalingFactor == 1 && targetType->fractionalBits() == 0 ? true : false; + if (m_value <= (u256(-1) >> (256 - targetType->numBits() + forSignBit)) && properlyScaledBits) return true; - else if ( - targetType->isSigned() && - -m_value <= (u256(1) >> (256 - targetType->numBits() + forSignBit)) && - m_scalingFactor <= targetType->fractionalBits() - ) + else if (targetType->isSigned() && -m_value <= (u256(1) << (targetType->numBits() - forSignBit)) && properlyScaledBits) return true; return false; } -- cgit v1.2.3