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()); length = getDynArrayLengthFromFuzz(_type.length(), counter());
lengthStr = to_string(length); lengthStr = to_string(length);
if (m_stateVar) if (m_stateVar)
resizeBuffer = assignAndCheckStringPair( {
m_varName + ".length", // Dynamic storage arrays are resized via the empty push() operation
m_paramName + ".length", resizeBuffer.first = Whiskers(R"(<indentation>for (uint i = 0; i < <length>; i++) <arrayRef>.push();)")
lengthStr, ("indentation", indentation())
lengthStr, ("length", lengthStr)
DataType::VALUE ("arrayRef", m_varName)
); .render() + "\n";
// Add a dynamic check on the resized length
resizeBuffer.second = checkString(m_paramName + ".length", lengthStr, DataType::VALUE);
}
else else
{ {
// Resizing memory arrays via the new operator // Resizing memory arrays via the new operator