mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #4736 from ethereum/removeFillRight
Remove remaining instances of ``fillRight``.
This commit is contained in:
@@ -498,7 +498,12 @@ void TypeChecker::checkDoubleStorageAssignment(Assignment const& _assignment)
|
||||
TupleType const& lhs = dynamic_cast<TupleType const&>(*type(_assignment.leftHandSide()));
|
||||
TupleType const& rhs = dynamic_cast<TupleType const&>(*type(_assignment.rightHandSide()));
|
||||
|
||||
bool fillRight = !lhs.components().empty() && (!lhs.components().back() || lhs.components().front());
|
||||
if (lhs.components().size() != rhs.components().size())
|
||||
{
|
||||
solAssert(m_errorReporter.hasErrors(), "");
|
||||
return;
|
||||
}
|
||||
|
||||
size_t storageToStorageCopies = 0;
|
||||
size_t toStorageCopies = 0;
|
||||
for (size_t i = 0; i < lhs.components().size(); ++i)
|
||||
@@ -506,10 +511,8 @@ void TypeChecker::checkDoubleStorageAssignment(Assignment const& _assignment)
|
||||
ReferenceType const* ref = dynamic_cast<ReferenceType const*>(lhs.components()[i].get());
|
||||
if (!ref || !ref->dataStoredIn(DataLocation::Storage) || ref->isPointer())
|
||||
continue;
|
||||
size_t rhsPos = fillRight ? i : rhs.components().size() - (lhs.components().size() - i);
|
||||
solAssert(rhsPos < rhs.components().size(), "");
|
||||
toStorageCopies++;
|
||||
if (rhs.components()[rhsPos]->dataStoredIn(DataLocation::Storage))
|
||||
if (rhs.components()[i]->dataStoredIn(DataLocation::Storage))
|
||||
storageToStorageCopies++;
|
||||
}
|
||||
if (storageToStorageCopies >= 1 && toStorageCopies >= 2)
|
||||
|
||||
@@ -2293,16 +2293,14 @@ TypePointer TupleType::closestTemporaryType(TypePointer const& _targetType) cons
|
||||
{
|
||||
solAssert(!!_targetType, "");
|
||||
TypePointers const& targetComponents = dynamic_cast<TupleType const&>(*_targetType).components();
|
||||
bool fillRight = !targetComponents.empty() && (!targetComponents.back() || targetComponents.front());
|
||||
solAssert(components().size() == targetComponents.size(), "");
|
||||
TypePointers tempComponents(targetComponents.size());
|
||||
for (size_t i = 0; i < min(targetComponents.size(), components().size()); ++i)
|
||||
for (size_t i = 0; i < targetComponents.size(); ++i)
|
||||
{
|
||||
size_t si = fillRight ? i : components().size() - i - 1;
|
||||
size_t ti = fillRight ? i : targetComponents.size() - i - 1;
|
||||
if (components()[si] && targetComponents[ti])
|
||||
if (components()[i] && targetComponents[i])
|
||||
{
|
||||
tempComponents[ti] = components()[si]->closestTemporaryType(targetComponents[ti]);
|
||||
solAssert(tempComponents[ti], "");
|
||||
tempComponents[i] = components()[i]->closestTemporaryType(targetComponents[i]);
|
||||
solAssert(tempComponents[i], "");
|
||||
}
|
||||
}
|
||||
return make_shared<TupleType>(tempComponents);
|
||||
|
||||
@@ -947,20 +947,12 @@ void CompilerUtils::convertType(
|
||||
{
|
||||
TupleType const& sourceTuple = dynamic_cast<TupleType const&>(_typeOnStack);
|
||||
TupleType const& targetTuple = dynamic_cast<TupleType const&>(_targetType);
|
||||
// fillRight: remove excess values at right side, !fillRight: remove eccess values at left side
|
||||
bool fillRight = !targetTuple.components().empty() && (
|
||||
!targetTuple.components().back() ||
|
||||
targetTuple.components().front()
|
||||
);
|
||||
solAssert(targetTuple.components().size() == sourceTuple.components().size(), "");
|
||||
unsigned depth = sourceTuple.sizeOnStack();
|
||||
for (size_t i = 0; i < sourceTuple.components().size(); ++i)
|
||||
{
|
||||
TypePointer sourceType = sourceTuple.components()[i];
|
||||
TypePointer targetType;
|
||||
if (fillRight && i < targetTuple.components().size())
|
||||
targetType = targetTuple.components()[i];
|
||||
else if (!fillRight && targetTuple.components().size() + i >= sourceTuple.components().size())
|
||||
targetType = targetTuple.components()[targetTuple.components().size() - (sourceTuple.components().size() - i)];
|
||||
TypePointer targetType = targetTuple.components()[i];
|
||||
if (!sourceType)
|
||||
{
|
||||
solAssert(!targetType, "");
|
||||
|
||||
Reference in New Issue
Block a user