mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
More information for type expectation errors.
This commit is contained in:
parent
29c9a7aed9
commit
4b6c422315
16
AST.cpp
16
AST.cpp
@ -347,9 +347,11 @@ void ExpressionStatement::checkTypeRequirements()
|
|||||||
void Expression::expectType(Type const& _expectedType)
|
void Expression::expectType(Type const& _expectedType)
|
||||||
{
|
{
|
||||||
checkTypeRequirements();
|
checkTypeRequirements();
|
||||||
if (!getType()->isImplicitlyConvertibleTo(_expectedType))
|
const Type& type = *getType();
|
||||||
BOOST_THROW_EXCEPTION(createTypeError("Type not implicitly convertible to expected type."));
|
if (!type.isImplicitlyConvertibleTo(_expectedType))
|
||||||
//@todo provide more information to the exception
|
BOOST_THROW_EXCEPTION(createTypeError("Type " + type.toString() +
|
||||||
|
" not implicitly convertible to expected type "
|
||||||
|
+ _expectedType.toString() + "."));
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnaryOperation::checkTypeRequirements()
|
void UnaryOperation::checkTypeRequirements()
|
||||||
@ -373,14 +375,18 @@ void BinaryOperation::checkTypeRequirements()
|
|||||||
else if (m_left->getType()->isImplicitlyConvertibleTo(*m_right->getType()))
|
else if (m_left->getType()->isImplicitlyConvertibleTo(*m_right->getType()))
|
||||||
m_commonType = m_right->getType();
|
m_commonType = m_right->getType();
|
||||||
else
|
else
|
||||||
BOOST_THROW_EXCEPTION(createTypeError("No common type found in binary operation."));
|
BOOST_THROW_EXCEPTION(createTypeError("No common type found in binary operation: " +
|
||||||
|
m_left->getType()->toString() + " vs. " +
|
||||||
|
m_right->getType()->toString()));
|
||||||
if (Token::isCompareOp(m_operator))
|
if (Token::isCompareOp(m_operator))
|
||||||
m_type = make_shared<BoolType>();
|
m_type = make_shared<BoolType>();
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_type = m_commonType;
|
m_type = m_commonType;
|
||||||
if (!m_commonType->acceptsBinaryOperator(m_operator))
|
if (!m_commonType->acceptsBinaryOperator(m_operator))
|
||||||
BOOST_THROW_EXCEPTION(createTypeError("Operator not compatible with type."));
|
BOOST_THROW_EXCEPTION(createTypeError("Operator " + string(Token::toString(m_operator)) +
|
||||||
|
" not compatible with type " +
|
||||||
|
m_commonType->toString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user