abiv2 proto converter: Do not resize dynamic storage arrays by writing to the length field as it is now read only

This commit is contained in:
Bhargava Shastry 2019-12-12 18:33:36 +01:00
parent f7624e254c
commit 49aec64caf

View File

@ -810,13 +810,16 @@ pair<string, string> AssignCheckVisitor::visit(ArrayType const& _type)
length = getDynArrayLengthFromFuzz(_type.length(), counter());
lengthStr = to_string(length);
if (m_stateVar)
resizeBuffer = assignAndCheckStringPair(
m_varName + ".length",
m_paramName + ".length",
lengthStr,
lengthStr,
DataType::VALUE
);
{
// Dynamic storage arrays are resized via the empty push() operation
resizeBuffer.first = Whiskers(R"(<indentation>for (uint i = 0; i < <length>; i++) <arrayRef>.push();)")
("indentation", indentation())
("length", lengthStr)
("arrayRef", m_varName)
.render() + "\n";
// Add a dynamic check on the resized length
resizeBuffer.second = checkString(m_paramName + ".length", lengthStr, DataType::VALUE);
}
else
{
// Resizing memory arrays via the new operator