mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use correct type for storing.
This commit is contained in:
parent
f7e219ed91
commit
e9d3327ad6
@ -225,7 +225,9 @@ bool ExpressionCompiler::visit(Assignment const& _assignment)
|
|||||||
_assignment.leftHandSide().accept(*this);
|
_assignment.leftHandSide().accept(*this);
|
||||||
solAssert(!!m_currentLValue, "LValue not retrieved.");
|
solAssert(!!m_currentLValue, "LValue not retrieved.");
|
||||||
|
|
||||||
if (op != Token::Assign) // compound assignment
|
if (op == Token::Assign)
|
||||||
|
m_currentLValue->storeValue(*rightIntermediateType, _assignment.location());
|
||||||
|
else // compound assignment
|
||||||
{
|
{
|
||||||
solAssert(leftType.isValueType(), "Compound operators only available for value types.");
|
solAssert(leftType.isValueType(), "Compound operators only available for value types.");
|
||||||
unsigned lvalueSize = m_currentLValue->sizeOnStack();
|
unsigned lvalueSize = m_currentLValue->sizeOnStack();
|
||||||
@ -239,14 +241,12 @@ bool ExpressionCompiler::visit(Assignment const& _assignment)
|
|||||||
m_currentLValue->retrieveValue(_assignment.location(), true);
|
m_currentLValue->retrieveValue(_assignment.location(), true);
|
||||||
utils().convertType(leftType, leftType, cleanupNeeded);
|
utils().convertType(leftType, leftType, cleanupNeeded);
|
||||||
|
|
||||||
Token::Value targetOp = Token::AssignmentToBinaryOp(op);
|
if (Token::isShiftOp(binOp))
|
||||||
|
appendShiftOperatorCode(binOp, leftType, *rightIntermediateType);
|
||||||
if (Token::isShiftOp(targetOp))
|
|
||||||
appendShiftOperatorCode(targetOp, leftType, *rightIntermediateType);
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
solAssert(leftType == *rightIntermediateType, "");
|
solAssert(leftType == *rightIntermediateType, "");
|
||||||
appendOrdinaryBinaryOperatorCode(targetOp, leftType);
|
appendOrdinaryBinaryOperatorCode(binOp, leftType);
|
||||||
}
|
}
|
||||||
if (lvalueSize > 0)
|
if (lvalueSize > 0)
|
||||||
{
|
{
|
||||||
@ -255,8 +255,8 @@ bool ExpressionCompiler::visit(Assignment const& _assignment)
|
|||||||
for (unsigned i = 0; i < itemSize; ++i)
|
for (unsigned i = 0; i < itemSize; ++i)
|
||||||
m_context << swapInstruction(itemSize + lvalueSize) << Instruction::POP;
|
m_context << swapInstruction(itemSize + lvalueSize) << Instruction::POP;
|
||||||
}
|
}
|
||||||
|
m_currentLValue->storeValue(*_assignment.annotation().type, _assignment.location());
|
||||||
}
|
}
|
||||||
m_currentLValue->storeValue(*rightIntermediateType, _assignment.location());
|
|
||||||
m_currentLValue.reset();
|
m_currentLValue.reset();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user