mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
final changes to typechecker, the expression compiler, and a couple more tests for good measure
This commit is contained in:
@@ -186,7 +186,7 @@ bool ExpressionCompiler::visit(Assignment const& _assignment)
|
||||
_assignment.leftHandSide().annotation().type
|
||||
);
|
||||
utils().convertType(*_assignment.rightHandSide().annotation().type, *type);
|
||||
|
||||
|
||||
_assignment.leftHandSide().accept(*this);
|
||||
solAssert(!!m_currentLValue, "LValue not retrieved.");
|
||||
|
||||
@@ -222,18 +222,17 @@ bool ExpressionCompiler::visit(TupleExpression const& _tuple)
|
||||
if (_tuple.isInlineArray())
|
||||
{
|
||||
ArrayType const& arrayType = dynamic_cast<ArrayType const&>(*_tuple.annotation().type);
|
||||
auto components = _tuple.components();
|
||||
|
||||
solAssert(!arrayType.isDynamicallySized(), "Cannot create dynamically sized inline array.");
|
||||
m_context << max(u256(32u), arrayType.memorySize());
|
||||
utils().allocateMemory();
|
||||
m_context << eth::Instruction::DUP1;
|
||||
|
||||
for (unsigned i = 0; i < components.size(); ++i)
|
||||
for (auto const& component: _tuple.components())
|
||||
{
|
||||
components[i]->accept(*this);
|
||||
utils().convertType(*components[i]->annotation().type, *arrayType.baseType(), true);
|
||||
components[i]->annotation().type = arrayType.baseType(); //force conversion
|
||||
utils().storeInMemoryDynamic(*components[i]->annotation().type, true);
|
||||
component->accept(*this);
|
||||
utils().convertType(*component->annotation().type, *arrayType.baseType(), true);
|
||||
utils().storeInMemoryDynamic(*arrayType.baseType(), true);
|
||||
}
|
||||
|
||||
m_context << eth::Instruction::POP;
|
||||
@@ -1155,7 +1154,7 @@ void ExpressionCompiler::endVisit(Literal const& _literal)
|
||||
break; // will be done during conversion
|
||||
default:
|
||||
BOOST_THROW_EXCEPTION(InternalCompilerError() << errinfo_comment("Only integer, boolean and string literals implemented for now."));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ExpressionCompiler::appendAndOrOperatorCode(BinaryOperation const& _binaryOperation)
|
||||
|
||||
Reference in New Issue
Block a user