mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Use array length function.
This commit is contained in:
parent
56d6855222
commit
a737e51533
@ -1767,32 +1767,11 @@ void IRGeneratorForStatements::endVisit(MemberAccess const& _memberAccess)
|
|||||||
auto const& type = dynamic_cast<ArrayType const&>(*_memberAccess.expression().annotation().type);
|
auto const& type = dynamic_cast<ArrayType const&>(*_memberAccess.expression().annotation().type);
|
||||||
|
|
||||||
if (member == "length")
|
if (member == "length")
|
||||||
{
|
define(_memberAccess) <<
|
||||||
if (!type.isDynamicallySized())
|
m_utils.arrayLengthFunction(type) <<
|
||||||
define(_memberAccess) << type.length() << "\n";
|
"(" <<
|
||||||
else
|
IRVariable(_memberAccess.expression()).commaSeparatedList() <<
|
||||||
switch (type.location())
|
")\n";
|
||||||
{
|
|
||||||
case DataLocation::CallData:
|
|
||||||
define(_memberAccess, IRVariable(_memberAccess.expression()).part("length"));
|
|
||||||
break;
|
|
||||||
case DataLocation::Storage:
|
|
||||||
{
|
|
||||||
define(_memberAccess) <<
|
|
||||||
m_utils.arrayLengthFunction(type) <<
|
|
||||||
"(" <<
|
|
||||||
IRVariable(_memberAccess.expression()).commaSeparatedList() <<
|
|
||||||
")\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case DataLocation::Memory:
|
|
||||||
define(_memberAccess) <<
|
|
||||||
"mload(" <<
|
|
||||||
IRVariable(_memberAccess.expression()).commaSeparatedList() <<
|
|
||||||
")\n";
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (member == "pop" || member == "push")
|
else if (member == "pop" || member == "push")
|
||||||
{
|
{
|
||||||
solAssert(type.location() == DataLocation::Storage, "");
|
solAssert(type.location() == DataLocation::Storage, "");
|
||||||
|
Loading…
Reference in New Issue
Block a user