mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
- style fixes
- added test for uint8 = -1 which doesn't fail; todo: fix that
This commit is contained in:
parent
382ac85aa5
commit
89aab7e234
3
AST.cpp
3
AST.cpp
@ -686,8 +686,7 @@ void Expression::expectType(Type const& _expectedType)
|
||||
checkTypeRequirements(nullptr);
|
||||
Type const& type = *getType();
|
||||
if (!type.isImplicitlyConvertibleTo(_expectedType))
|
||||
BOOST_THROW_EXCEPTION(
|
||||
createTypeError(
|
||||
BOOST_THROW_EXCEPTION(createTypeError(
|
||||
"Type " +
|
||||
type.toString() +
|
||||
" is not implicitly convertible to expected type " +
|
||||
|
11
Types.cpp
11
Types.cpp
@ -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();
|
||||
|
Loading…
Reference in New Issue
Block a user