push() for byte arrays also properly implemented

This commit is contained in:
Lefteris Karapetsas
2015-10-15 14:37:11 +02:00
parent 9224c1f712
commit a823de2d58
2 changed files with 16 additions and 13 deletions
+6 -4
View File
@@ -624,7 +624,6 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
break;
}
case Location::ByteArrayPush:
solAssert(false, "Not properly implemented yet");
case Location::ArrayPush:
{
_functionCall.expression().accept(*this);
@@ -651,12 +650,15 @@ bool ExpressionCompiler::visit(FunctionCall const& _functionCall)
arguments[0]->accept(*this);
// stack: newLength storageSlot slotOffset argValue
TypePointer type = arguments[0]->annotation().type;
utils().convertType(*type, *type->mobileType());
type = type->mobileType();
utils().convertType(*type, *arrayType->baseType());
type = arrayType->baseType();
utils().moveToStackTop(1 + type->sizeOnStack());
utils().moveToStackTop(1 + type->sizeOnStack());
// stack: newLength argValue storageSlot slotOffset
StorageItem(m_context, *paramType).storeValue(*type, _functionCall.location(), true);
if (function.location() == Location::ArrayPush)
StorageItem(m_context, *paramType).storeValue(*type, _functionCall.location(), true);
else
StorageByteArrayElement(m_context).storeValue(*type, _functionCall.location(), true);
break;
}
default: