aboutsummaryrefslogtreecommitdiffstats
path: root/CompilerUtils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'CompilerUtils.cpp')
-rw-r--r--CompilerUtils.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/CompilerUtils.cpp b/CompilerUtils.cpp
index 349877a2..d4e705a3 100644
--- a/CompilerUtils.cpp
+++ b/CompilerUtils.cpp
@@ -274,10 +274,13 @@ void CompilerUtils::encodeToMemory(
else
{
copyToStackTop(argSize - stackPos + dynPointers + 2, _givenTypes[i]->getSizeOnStack());
- if (targetType->isValueType())
- convertType(*_givenTypes[i], *targetType, true);
solAssert(!!targetType, "Externalable type expected.");
- storeInMemoryDynamic(*targetType, _padToWordBoundaries);
+ TypePointer type = targetType;
+ if (_givenTypes[i]->isInStorage())
+ type = _givenTypes[i]; // delay conversion
+ else
+ convertType(*_givenTypes[i], *targetType, true);
+ storeInMemoryDynamic(*type, _padToWordBoundaries);
}
stackPos += _givenTypes[i]->getSizeOnStack();
}