- style fixes

- added test for uint8 = -1 which doesn't fail; todo: fix that
This commit is contained in:
Liana Husikyan 2015-06-04 12:42:55 +02:00
parent 382ac85aa5
commit 89aab7e234
2 changed files with 12 additions and 14 deletions

15
AST.cpp
View File

@ -686,14 +686,13 @@ void Expression::expectType(Type const& _expectedType)
checkTypeRequirements(nullptr);
Type const& type = *getType();
if (!type.isImplicitlyConvertibleTo(_expectedType))
BOOST_THROW_EXCEPTION(
createTypeError(
"Type " +
type.toString() +
" is not implicitly convertible to expected type " +
_expectedType.toString() +
"."
)
BOOST_THROW_EXCEPTION(createTypeError(
"Type " +
type.toString() +
" is not implicitly convertible to expected type " +
_expectedType.toString() +
"."
)
);
}

View File

@ -361,22 +361,21 @@ IntegerConstantType::IntegerConstantType(Literal const& _literal)
bool IntegerConstantType::isImplicitlyConvertibleTo(Type const& _convertTo) const
{
if (IntegerType const* integerType = dynamic_cast<IntegerType const*>(&_convertTo))
if (auto targetType = dynamic_cast<IntegerType const*>(&_convertTo))
{
if (m_value == 0)
return true;
int forSignBit = (integerType->isSigned() ? 1 : 0);
int forSignBit = (targetType->isSigned() ? 1 : 0);
if (m_value > 0)
{
if (m_value <= (u256(-1) >> (256 - integerType->getNumBits() + forSignBit)))
if (m_value <= (u256(-1) >> (256 - targetType->getNumBits() + forSignBit)))
return true;
}
else if (-m_value <= (u256(1) << (integerType->getNumBits() - forSignBit)))
else if (-m_value <= (u256(1) << (targetType->getNumBits() - forSignBit)))
return true;
return false;
}
else
if (_convertTo.getCategory() == Category::FixedBytes)
else if (_convertTo.getCategory() == Category::FixedBytes)
{
FixedBytesType const& fixedBytes = dynamic_cast<FixedBytesType const&>(_convertTo);
return fixedBytes.getNumBytes() * 8 >= getIntegerType()->getNumBits();