mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Compiler for assignments.
This commit is contained in:
@@ -326,6 +326,8 @@ void Assignment::checkTypeRequirements()
|
||||
//@todo lefthandside actually has to be assignable
|
||||
// add a feature to the type system to check that
|
||||
m_leftHandSide->checkTypeRequirements();
|
||||
if (!m_leftHandSide->isLvalue())
|
||||
BOOST_THROW_EXCEPTION(createTypeError("Expression has to be an lvalue."));
|
||||
expectType(*m_rightHandSide, *m_leftHandSide->getType());
|
||||
m_type = m_leftHandSide->getType();
|
||||
if (m_assigmentOperator != Token::ASSIGN)
|
||||
@@ -338,8 +340,13 @@ void Assignment::checkTypeRequirements()
|
||||
|
||||
void UnaryOperation::checkTypeRequirements()
|
||||
{
|
||||
// INC, DEC, NOT, BIT_NOT, DELETE
|
||||
// INC, DEC, ADD, SUB, NOT, BIT_NOT, DELETE
|
||||
m_subExpression->checkTypeRequirements();
|
||||
if (m_operator == Token::Value::INC || m_operator == Token::Value::DEC || m_operator == Token::Value::DELETE)
|
||||
{
|
||||
if (!m_subExpression->isLvalue())
|
||||
BOOST_THROW_EXCEPTION(createTypeError("Expression has to be an lvalue."));
|
||||
}
|
||||
m_type = m_subExpression->getType();
|
||||
if (!m_type->acceptsUnaryOperator(m_operator))
|
||||
BOOST_THROW_EXCEPTION(createTypeError("Unary operator not compatible with type."));
|
||||
@@ -441,9 +448,9 @@ void Identifier::checkTypeRequirements()
|
||||
if (variable)
|
||||
{
|
||||
if (!variable->getType())
|
||||
BOOST_THROW_EXCEPTION(createTypeError("Variable referenced before type "
|
||||
"could be determined."));
|
||||
BOOST_THROW_EXCEPTION(createTypeError("Variable referenced before type could be determined."));
|
||||
m_type = variable->getType();
|
||||
m_isLvalue = true;
|
||||
return;
|
||||
}
|
||||
//@todo can we unify these with TypeName::toType()?
|
||||
|
||||
Reference in New Issue
Block a user