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
15
AST.cpp
15
AST.cpp
@ -686,14 +686,13 @@ void Expression::expectType(Type const& _expectedType)
|
|||||||
checkTypeRequirements(nullptr);
|
checkTypeRequirements(nullptr);
|
||||||
Type const& type = *getType();
|
Type const& type = *getType();
|
||||||
if (!type.isImplicitlyConvertibleTo(_expectedType))
|
if (!type.isImplicitlyConvertibleTo(_expectedType))
|
||||||
BOOST_THROW_EXCEPTION(
|
BOOST_THROW_EXCEPTION(createTypeError(
|
||||||
createTypeError(
|
"Type " +
|
||||||
"Type " +
|
type.toString() +
|
||||||
type.toString() +
|
" is not implicitly convertible to expected type " +
|
||||||
" is not implicitly convertible to expected type " +
|
_expectedType.toString() +
|
||||||
_expectedType.toString() +
|
"."
|
||||||
"."
|
)
|
||||||
)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
Types.cpp
11
Types.cpp
@ -361,22 +361,21 @@ IntegerConstantType::IntegerConstantType(Literal const& _literal)
|
|||||||
|
|
||||||
bool IntegerConstantType::isImplicitlyConvertibleTo(Type const& _convertTo) const
|
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)
|
if (m_value == 0)
|
||||||
return true;
|
return true;
|
||||||
int forSignBit = (integerType->isSigned() ? 1 : 0);
|
int forSignBit = (targetType->isSigned() ? 1 : 0);
|
||||||
if (m_value > 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;
|
return true;
|
||||||
}
|
}
|
||||||
else if (-m_value <= (u256(1) << (integerType->getNumBits() - forSignBit)))
|
else if (-m_value <= (u256(1) << (targetType->getNumBits() - forSignBit)))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else if (_convertTo.getCategory() == Category::FixedBytes)
|
||||||
if (_convertTo.getCategory() == Category::FixedBytes)
|
|
||||||
{
|
{
|
||||||
FixedBytesType const& fixedBytes = dynamic_cast<FixedBytesType const&>(_convertTo);
|
FixedBytesType const& fixedBytes = dynamic_cast<FixedBytesType const&>(_convertTo);
|
||||||
return fixedBytes.getNumBytes() * 8 >= getIntegerType()->getNumBits();
|
return fixedBytes.getNumBytes() * 8 >= getIntegerType()->getNumBits();
|
||||||
|
Loading…
Reference in New Issue
Block a user